PHP说文件不存在

时间:2013-09-03 12:31:10

标签: php

我有一个服务器,用户就像:

http://example.com/userdata/johndoe1/docs.xml

PHP应该检查xml文件是否存在,具体取决于用户名url参数

这是我的PHP代码:

<?php
$filename = $_GET["userpath"];
$username = $_GET["username"];

if (file_exists($filename)) {
header('Location: http://nsc-component.webs.com/auth.html?username=' .$username);
} else {
header('Location: http://nsc-component.webs.com/user/login.html?error=2');
}

echo getcwd();
?>

继续返回该文件不存在。

userpath = http://example.com/userdata/johndoe1/docs.xml(路径)

username = johndoe1(用户名)

为什么文件存在时会继续返回false?

3 个答案:

答案 0 :(得分:3)

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

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

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

另请参阅comments in the file_exists() manual page;一个条目明确给出了如何读取远程文件的答案。以下是手动评论引用的代码:

$file_headers = @get_headers($file);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
    $exists = false;
}
else {
    $exists = true;
}

答案 1 :(得分: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为true,如果文件不存在则为false。

答案 2 :(得分:3)

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

检查文件

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

cURL(访问:How can one check to see if a remote file exists using 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);