Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:检查文件是否存在,但@get_头影响跟踪程序_Php_File Header - Fatal编程技术网

PHP:检查文件是否存在,但@get_头影响跟踪程序

PHP:检查文件是否存在,但@get_头影响跟踪程序,php,file-header,Php,File Header,我使用PHP检查服务器上是否存在.html文件。然而,@get_headers在检查文件时似乎正在“访问”页面,而我生成分析报告的跟踪脚本正在将其作为页面视图。有没有其他方法可以检查文件是否存在而不发生这种情况?下面是我现在使用的代码: $file = "https://www." . $_SERVER['HTTP_HOST'] . $row['page']; $file_headers = @get_headers($file); if(!$file_headers || $file_head

我使用PHP检查服务器上是否存在.html文件。然而,@get_headers在检查文件时似乎正在“访问”页面,而我生成分析报告的跟踪脚本正在将其作为页面视图。有没有其他方法可以检查文件是否存在而不发生这种情况?下面是我现在使用的代码:

$file = "https://www." . $_SERVER['HTTP_HOST'] . $row['page'];
$file_headers = @get_headers($file);
if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found') {
    $file_exists = false;
}
else {
    $file_exists = true;
}

如果您确实需要使用
get_headers
,您可能会发现这很有用

简而言之:
get\u header
默认情况下使用
get
请求(无论如何,是一个页面视图)

示例#2供参考:

<?php
// By default get_headers uses a GET request to fetch the headers. If you
// want to send a HEAD request instead, you can do so using a stream context:
stream_context_set_default(
    array(
        'http' => array(
            'method' => 'HEAD'
        )
    )
);
$headers = get_headers('http://example.com');
?>

虽然我不喜欢更改默认的流上下文,但实际上我建议您创建自己的:

<?php
$context = stream_context_create(
    array(
        'http' => array(
            'method' => 'HEAD'
        )
    )
);

$headers = get_headers('http://example.com', 0, $context);
?>

这是否有效主要取决于您的分析软件(即它是否区分GET和HEAD请求)

@get_headers在检查文件时似乎正在“访问”页面

这正是它所做的,是的

有没有其他方法可以检查文件是否存在而不发生这种情况

通过检查文件是否存在。现在,您要检查的是“URL是否在请求时返回错误”

如果您没有任何特殊的URL重写,您可能可以通过以下方式完成:

if (file_exists($_SERVER["DOCUMENT_ROOT"] . $row['page'])) {
    ....
}

是同一台服务器吗?您使用web访问而不是计算文件系统路径并使用
file\u exists
,这就是原因吗?谢谢。当我最初尝试使用文件时,我意识到我在代码的其他地方犯了一个逻辑错误。它将所有文件显示为现有文件,即使不是现有文件。该错误已消失,现在文件_存在并正常工作。谢谢谢谢,我使用的是get_头,因为最初文件_exists不适用于我,因为代码中的其他地方存在逻辑错误。既然已经解决了这个问题,那么file_exists可以正常工作,我不需要使用get_头作为替代方法。