我正在设计一个可以根据最终用户来自哪个零售点定制的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 removed]中给出了字符串
我已经让脚本吐出了完整的URL,它似乎正确地分配了$ store。我在1& 1主机上运行PHP 5.4.11(因为我知道他们的服务器工作方式有些异常),如果这有帮助的话。
答案 0 :(得分:14)
之前我遇到了同样的错误,但我不知道我的解决方案是否能解决您的问题,您需要删除" \ 0"尝试替换它:
$cleaned = strval(str_replace("\0", "", $buttons_first));
它适用于我的案例。
答案 1 :(得分:2)
运行var_dump(strpos($ buttons_first,“\ 0”)),出于安全原因,当路径具有空字节时,此警告可能会出现。如果这不起作用,请检查字符串的长度,并确保它符合您的期望,以防有其他不可见的字节。
答案 2 :(得分:1)
路径可能存在问题,因为它取决于您运行脚本的位置。使用绝对路径更安全。要获取执行当前脚本的目录的路径,可以使用dirname(__FILE__)
。
答案 3 :(得分:0)
在/
之前添加stores/
,最好使用绝对路径。
答案 4 :(得分:0)
我知道这篇文章创建于2013年,但没有看到常见的解决方案。
将multiple
添加到file submit form
后,会发生此错误
例如,您正在php上使用以下文件:$_FILES['file']['tmp_name']
但是在向表单添加multiple
选项之后。您的输入名称变为file => file[]
因此,即使您仅发布一个文件,也应将$_FILES['file']['tmp_name']
更改为$_FILES['file']['tmp_name'][0]