PHP 文件检查总是返回 false

Posted

技术标签:

【中文标题】PHP 文件检查总是返回 false【英文标题】:PHP File checking always returning false 【发布时间】:2017-08-02 01:11:21 【问题描述】:

这段代码从 RSS 提要中读取,并应检测服务器上是否存在图像:

<?php
$feedURL = 'http://www.goapr.com/news/category/product-release/feed/';
$sxml = @simplexml_load_file($feedURL);
if($sxml)
    $i=0;
    foreach($sxml->channel as $channel)
        foreach($channel->item as $item)
            //if($i==6)break;
            if($item->prodimg=="~")break;
            if($item->prodpage=="~")break;
            $i += 1;

            $file = 'http://www.goapr.co.uk'. $item->prodimg; 

            if (file_exists($file)) 
            echo "The file $file exists";
             else 
            echo "The file $file does not exist";
            

        
    
else
    echo 'Sorry there was an error. The recent products will return shortly.';

?>

许多图像确实存在,但它返回所有未找到的图像:

文件http://www.goapr.co.uk/includes/img/newprod/ultras4.png不存在文件http://www.goapr.co.uk/includes/img/newprod/30tpulleys.png不存在文件http://www.goapr.co.uk/includes/img/newprod/tiguan.png不存在文件http://www.goapr.co.uk/includes/img/newprod/2325row.png不存在文件http://www.goapr.co.uk/includes/img/newprod/plus.png不存在文件http://www.goapr.co.uk/includes/img/newprod/2017r.png不存在文件http://www.goapr.co.uk/includes/img/newprod/v24gti.png不存在文件http://www.goapr.co.uk/includes/img/newprod/q5gen3.png 不存在文件http://www.goapr.co.uk/includes/img/newprod/s8downpipes.png 不存在文件http://www.goapr.co.uk/products/ 所有图像都被检测为未找到。

它与:How to check if a file exists from a url 不同,因为这些文件与此 PHP 页面位于同一文件系统上。

【问题讨论】:

file_exists 仅适用于本地文件系统。我个人使用 cURL 打开连接并获取信息并检查响应是否为 404,但通常检查 fopen 是否成功就足够了。 您好,谢谢。这些文件与这个 PHP 页面在同一个文件系统上,这有帮助吗? How check if file exists from the url的可能重复 您需要通过它们的本地路径而不是 URL 来检查它们,然后例如$_SERVER["DOCUMENT_ROOT"]."path/to/pictures/"... 【参考方案1】:

如果您需要检查本地文件系统上的文件是否存在,您应该通过它的本地路径而不是其 URL 来引用它,例如:

$file = $_SERVER["DOCUMENT_ROOT"]."/path/to/images/".$item->prodimg; 

请注意,DOCUMENT_ROOT 是网络服务器主机设置的根路径(这意味着它可能无法在命令行中使用。

如果图像与当前运行的脚本位于同一目录中,您也可以使用__DIR__."/".$item-&gt;prodimg

【讨论】:

以上是关于PHP 文件检查总是返回 false的主要内容,如果未能解决你的问题,请参考以下文章

mysql_query 总是用 SELECT EXISTS 返回 false

为什么PHP is_link函数返回FALSE?

File.Exists() 在 IIS 上总是返回 false

当变量在文件名中时,PHP file_exists 返回 false

PHP file_exists() 在某些文件上返回 false

为啥 Auth::attempt 在 Laravel 5.3 中总是返回 false?