file_exists()期望参数1是有效路径,给定字符串

时间:2013-02-13 15:33:17

标签: php

我正在设计一个可以根据最终用户来自哪个零售点定制的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(因为我知道他们的服务器工作方式有些异常),如果这有帮助的话。

5 个答案:

答案 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]