Php file_exists()要求参数1为有效路径,字符串为

Php file_exists()要求参数1为有效路径,字符串为,php,Php,我正在设计一个web应用程序,可以根据最终用户来自哪个零售位置进行定制。例如,如果用户来自一家名为Farmer's Market的商店,则该用户可能有特定于该特定商店的定制内容或额外链接。文件_exists()用于确定是否需要导入页面的任何自定义部分 到目前为止,我们一直在使用一种相对不安全的方法,其中item ID#和store只是作为GET参数传入,系统知道如何将它们应用于页面中的每个链接。但是,我们正在切换到可逆散列方法,其中存储和项目编号被加密(看起来像“gd651hd8h41dg0h8

我正在设计一个web应用程序,可以根据最终用户来自哪个零售位置进行定制。例如,如果用户来自一家名为Farmer's Market的商店,则该用户可能有特定于该特定商店的定制内容或额外链接。文件_exists()用于确定是否需要导入页面的任何自定义部分

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

然而,从那以后,我们遇到了一个错误,谷歌一直没有给我找到答案。有几个类似的代码块,但它们看起来都是这样的:

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

if(file_exists($buttons_first))
{
    include($buttons_first);
}
(实际上,/stores/目录位于工作目录之上的目录中,因此为../)

相当直接。但是,尽管在传入常规ID和存储时工作正常,但使用加密ID会为这些类似语句中的每一条抛出此错误:

警告:file_exists()要求参数1为有效路径,字符串在第11行的[url removed]中给出


我已经让脚本吐回了完整的URL,它似乎正确地分配了$store。我在1&1主机上运行PHP5.4.11(因为我知道他们的服务器工作方式有一些异常),如果有帮助的话。

存储之前添加
/
,最好使用绝对路径。

路径可能有问题,因为它取决于您运行脚本的位置。使用绝对路径更安全。要获取当前脚本正在其中执行的目录的路径,可以使用
dirname(\uuuuu FILE\uuuu)
运行var\u转储(strpos($buttons\u first,“\0”)),出于安全原因,当路径有空字节时会出现此警告。如果不起作用,请检查字符串的长度,并确保它是您期望的长度,以防有其他不可见的字节。

我以前也遇到过同样的错误,但我不知道我的解决方案是否能解决您的问题。您需要删除“\0”并尝试替换它:

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

我知道这篇文章创建于2013年,但没有看到通用的解决方案

多个
添加到
文件提交表单
例如,您在php上使用这样的文件:
$\u files['file']['tmp\u name']
但是在表单中添加
multiple
选项之后。您的输入名称变成了
file=>file[]


因此,即使只发布一个文件,
$\u文件['file']['tmp\u name']
也应该更改为
$\u文件['file']['tmp\u name'][0]

您能提供一个失败路径的示例吗?
var\u dump($store)
的结果是什么?可能它包含的保留字符将构成无效路径(
*
等)。“./stores/shoprite/buttons_first.php”是我正在玩的一个。在这种情况下,var_dump($store)会导致字符串(28)“shoprite”。好吧,现在有一个非常愚蠢的问题-您100%确定文件存在于该相对路径?有一件事你可以尝试(不认为这不是文件存在的问题)将值硬编码到一个你知道存在的文件中,看看函数是否成功。文件并不总是存在,因此需要检查,但我明确创建了一个文件来检查。它可以正常工作并使用常规ID正确加载,但如果我使用加密的ID(它们使用不同的$\u GET变量,因此不会相互干扰),则不会正确加载。仍然会收到相同的错误,事实上,最初是这样的,我改变了它,希望能解决这个问题。我相信,在全局配置文件中包含应用程序的绝对路径会为您节省很多麻烦。如果您使用的是PHP5.3或更高版本,请使用
\uuuu DIR\uuuu
而不是
dirname(\uu file\uuu)