1

我正在尝试检查是否存在 XML 文件,具体取决于用户名参数

<?php
$username = $_GET["username"];
$filename = "/documents/$username/data.xml";

if (file_exists($filename)) {
   // output documents
} else {
   echo "No documents exist in your account.";
}
?>

它继续返回该文件不存在。

完整路径: http ://example.com/documents/ {username}/data.xml

当我知道文件存在时,为什么它继续返回 false?

编辑:我几年前发表了这篇文章,这绝对不是保存用户数据的最佳方式,但这篇文章的答案可以很好地解释 file_exists()。

4

3 回答 3

3

file_exists()函数旨在检查与 PHP 代码位于同一服务器上的本地文件。

与其他文件处理功能一样,它也可以读取 URL,但是这个功能可以被认为是一个安全风险,并且许多服务器禁用它,并限制您只能从本地服务器读取文件。

您应该检查您的服务器是否允许您这样做。如果没有,您将不得不使用不同的方法来读取远程 URL,例如,使用 CURL。

另请参阅手册页中的评论file_exists();一个条目明确给出了如何读取远程文件的答案。这是手动注释中引用的代码:

$file_headers = @get_headers($file);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
    $exists = false;
}
else {
    $exists = true;
}
于 2013-09-03T12:35:57.593 回答
3

file_exists检查文件是否存在于本地或计算机的已安装文件系统中。它无法通过 http 检查远程文件。

要对此进行测试,您可以尝试获取文件并验证发送的标头:

$file = 'http://www.domain.com/somefile.jpg';
$file_headers = get_headers($file);
$exists = ($file_headers[0] != 'HTTP/1.1 404 Not Found');

$exists 文件存在时为真,文件不存在时为假。

于 2013-09-03T12:37:00.953 回答
3

file_exist检查本地文件。如果您想通过 URL 使用检查文件

fopen()- 返回 NULL 是文件尚未打开

cURL(访问:如何使用 PHP 检查远程文件是否存在?

$ch = curl_init("http://example.com/userdata/johndoe1/docs.xml");

curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// $retcode > 400 -> not found, $retcode = 200, found.
curl_close($ch);
于 2013-09-03T12:39:03.173 回答