11

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

到目前为止,我们一直在使用一种相对不安全的方法,其中项目 ID# 和商店只是作为 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 已删除] 中给出的字符串

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

4

5 回答 5

16

我之前遇到过同样的错误,但我不知道我的这个解决方案是否适用于您的问题,您需要删除“\0”尝试替换它:

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

它适用于我的情况。

于 2014-04-09T09:09:57.633 回答
3

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

于 2013-08-22T02:28:09.707 回答
1

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

于 2013-02-13T15:37:08.217 回答
0

/之前添加stores/,你最好使用绝对路径。

于 2013-02-13T15:36:01.157 回答
0

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

multiple在添加到file submit form 例如您在 php 上使用这样的文件之后会发生此错误:$_FILES['file']['tmp_name'] 但是在向multiple表单添加选项之后。你输入的名字变成了file => file[]

所以即使你只发布一个文件, $_FILES['file']['tmp_name']也应该改为$_FILES['file']['tmp_name'][0]

于 2020-07-17T13:43:30.700 回答