2013-02-13 95 views
6

我正在设计一个Web应用程序,可以根据最终用户来自哪个零售位置进行定制。例如,如果用户来自称为Farmer's Market的商店,那么可能会为该用户提供特定于该特定商店的定制内容或额外链接。 file_exists()用于确定是否存在需要导入的页面的任何自定义部分。file_exists()期望参数1是一个有效的路径,给出的字符串

到目前为止,我们一直使用一种相对不安全的方法,其中项目ID#和商店被简单地作为GET参数传入,并且系统知道将它们应用于页面中的每个链接。但是,我们切换到可逆散列方法,其中存储和项目编号被加密(看起来像“gd651hd8h41dg0h81”),并且页面简单地解码它们并分配存储和ID变量。

然而,自那时起,我们一直在遇到一个错误,谷歌搜索广泛没有找到我的答案。有代码的几个类似的块,但他们都看起来像这样:

$buttons_first = "../stores/" . $store . "/buttons_first.php"; 

if(file_exists($buttons_first)) 
{ 
    include($buttons_first); 
} 

(在/专卖店/目录实际上是在一个工作的上级目录,因此../)

相当直截了当。但是,尽管在常规的ID和存储传入做工精细,使用加密ID抛出这个错误对那些类似的语句中的每一个:

警告:file_exists()预计参数1是一个有效的路径,串在第11行[网址删除]给出

我已经有脚本吐回完整的URL,它似乎是正确地分配$存储。我正在运行PHP 5.4.11 1 & 1托管(因为我知道他们的服务器工作方式有些异常),如果有帮助的话。

+0

你能提供一个路径失败的例子吗? – Raad 2013-02-13 15:36:00

+0

'var_dump($ store)'的结果是什么?也许它包含将构成无效路径的保留字符('?','*'等)。 [以下是可能保留的字符列表](http://en.wikipedia.org/wiki/File_name#Reserved_characters_and_words)。 – cmbuckley 2013-02-13 15:39:38

+0

“../stores/shoprite/buttons_first.php”是我玩的一个。 在这种情况下,var_dump($ store)会导致** string(28)“shoprite”**。 – Sean 2013-02-13 15:43:35

回答

0

添加/前门店/,你最好使用绝对路径关闭...

+0

仍然得到相同的错误,它实际上原来是这样,我想改变它,希望能解决这个问题。 – Sean 2013-02-13 15:38:05

+0

我相信在你的全局配置文件中包含应用程序绝对路径的值会为你节省很多麻烦.. – phpalix 2013-02-13 15:39:45

1

,因为它取决于你在哪里运行该脚本可能与路径的问题。使用绝对路径更安全。要获取执行当前脚本的目录的路径,可以使用dirname(__FILE__)

+0

如果你使用PHP 5.3或更高版本,使用'__DIR__'而不是'dirname(__ FILE __)'' – SDC 2013-02-13 15:48:59

+0

已经尝试过了,还有$ _SERVER ['DOCUMENT_ROOT'] – Sean 2013-02-13 15:55:16

2

运行一个var_dump(strpos($ buttons_first,“\ 0”)),出于安全原因,当路径有一个空字节时会出现此警告。如果这不起作用,请检查字符串的长度并确保它是您所期望的,以防万一还有其他不可见的字节。

11

我之前同样的错误,但你需要删除“\ 0”试图取代它,我不知道我的这个解决方案适用于您的问题:

$cleaned = strval(str_replace("\0", "", $buttons_first)); 

它的工作对我来说, 。

+0

非常感谢!这个对我有用! – GeekHades 2017-06-06 09:26:33

相关问题