Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php文件中包含两次变量_Php_Include_Fopen - Fatal编程技术网

从php文件中包含两次变量

从php文件中包含两次变量,php,include,fopen,Php,Include,Fopen,我有这样一个简单的用户文件 joe.php <?php $pass = 'joepassword'; $userpath = 'work/joe'; ?> <?php $pass = 'joepassword'; $userpath = 'work/joe'; ?> 出于管理目的,我现在需要访问sam的$userpath作为目标,同时访问joe的$userpath作为源,但如果我包括sam.php,我将超过joe的$userpath $userpath='work/j

我有这样一个简单的用户文件

joe.php

<?php
$pass = 'joepassword';
$userpath = 'work/joe';
?>
<?php
$pass = 'joepassword';
$userpath = 'work/joe';
?>
出于管理目的,我现在需要访问sam的$userpath作为目标,同时访问joe的$userpath作为源,但如果我包括sam.php,我将超过joe的$userpath

$userpath='work/joe'
我认为有一个更简单的解决方案,比如使用fopen并仅提取sam的(第二)路径,但不确定如何进行

我发布这篇文章不是为了发表一篇关于安全性的演讲,所以请不要回复关于安全性的话题。这些文件不在web服务器可以访问的文件夹中。

将它们设置为类:

class Sam() {
    public $userPath;
    public $password;
    public __construct($path,$password) {
        $this->userpath = $path;
        $this->password = $password;
    }
}

class Joe() {
    public $userPath;
    public $password;
    public __construct($path,$password) {
        $this->userpath = $path;
        $this->password = $password;
    }
}

$joe = new Joe("user path here", "my password");
$sam = new Sam("another user path", "another password");

echo $joe->userPath;
echo $sam->userPath;
echo $joe->password;
echo $sam->password;

尽管大多数人吐错了答案,但答案却非常简单。从最初包含的文件中设置会话变量,然后使用会话变量。对该文件或类似文件的第二次调用将设置第二组会话变量

在auth.php中包含joe.php之后

$_SESSION['userpath']=$userpath;
然后,即使在同一页或其他页上,我们也可以包括

joe.php

<?php
$pass = 'joepassword';
$userpath = 'work/joe';
?>
<?php
$pass = 'joepassword';
$userpath = 'work/joe';
?>

一个常见问题的创造性解决方案。@Jay Blanchard我不明白这是如何从文件中获得$pass的。我想我必须在每节课上都加一个包含?joe类和sam类?不,不能在@Mark类中包含文件。这是一种面向对象的方法,用于处理具有相似属性的多个用户。虽然这是一个创造性的解决方案,但正如你在上面的评论中所说的,它会让你走上一条“不同的道路”。顺便说一句,惩罚一个看不懂你心思的人是不应该发生的——这些信息都不在你的专栏文章中,而评论者只是想提供帮助。@Jay Blanchard,这也没有解决这个问题。通过ypur自己的wortds,它不会从文件中获取用户路径,因此我建议,如果安全系统是服务器上的平面文件,那么我所需要做的就是攻击服务器-我不需要任何更复杂的东西。不管怎样,你想要@Mark做的事情是不可能以你想要的方式实现的。您需要一些东西来防止平面文件变量被覆盖,这只能通过使用不同的平面文件方法(如CSV或JSON)来实现。您应该使用一种介质和一种为数据存储而设计的格式。它可以是一个简单的文本文件,如csv文件或json文件,但如果需要扩展,则需要一个数据库。在那里,您可以存储用户名/用户路径/密码组合,您应该使用
password\u hash()
对密码进行散列。然后你可以在一个地方验证你的用户,检查可用的凭证。Marc,我强烈建议你为你的用户帐户使用某种持久性存储(平面文件或数据库)。您可以使用
passwword\u hash()
进行存储,并使用
password\u verify()
进行登录。我非常感谢yopur对数据库等的评论,但目前我不会更改所有代码。我在这里问你如何通过特定街道上的减速带,你告诉我走另一条路?这并不能回答问题。身份验证的方法不是我想要改变的。此外,您显然不明白并非所有的php应用程序都暴露在互联网上。这是一个仅限于局域网的应用程序,不需要如此高的安全性,也不需要通过修改代码来切换到数据库。您可以将信息保存在JSON中,可以读取到您的系统中,其中每个用户都可以拥有与他们相关的信息,其他用户可以使用相同的“密钥”。除非在加载变量后更改变量名,否则无法使用单独的文件执行此操作。