【问题标题】:PHP-script with fopen throws 404 Not Found带有 fopen 的 PHP 脚本抛出 404 Not Found
【发布时间】:2015-11-17 14:17:58
【问题描述】:

我正在使用一个简单的 fopen 语句来读取文本文件,但我得到:

fopen(http://www.domain.nl/cees.txt):打开流失败:HTTP 请求失败!未找到 HTTP/1.1 404

如果我在浏览器中调用http://www.domain.nl/cees.txt,内容显示没有任何问题,因此文件存在(对吗?)....

我也试过 cUrl,但它也返回 404。

如果我在另一台主机上尝试我的 php 脚本,它工作得很好,所以我想我会比较两个主机的设置,但它们与 allow_url_fopen 在这两种情况下都是相同的。

没有htaccess,根文件夹的权限是755。

我正在为此拉头发。有人有什么建议吗?

【问题讨论】:

  • 你试过使用绝对路径吗?
  • a) domain.nl 具有反抓取保护,由获取 404 的任何主机触发。b) 中间的代理/网关正在过滤。所以...您是否有权访问 domain.nl 的日志,以查看好请求和坏请求的记录?
  • 尝试使用 curl 并传递用户代理
  • 可能USER_AGENT 未设置,最终生成错误,因为系统(对吗?)猜测它没有通过浏览器/人类调用。
  • 两台主机都在同一个 VPS 上(我的!)。我已经尝试过 cUrl(有和没有用户代理)和 file_get_content,但它们都给出了 404。我把这个例子放到网上:aangenaam.nl/fopen.php

标签: php http-status-code-404 fopen


【解决方案1】:

这是我的尝试:

无法访问文件的服务器位于代理后面。 您也可能在代理后面,并且您的浏览器已配置为通过。但不是你的 php 脚本。

如果使用代理,请检查浏览器的配置。如果是这样,那么 fopen 也必须使用它:

$opts= array(
                 'http' => array( 
                 'proxy' => 'tcp://proxyip:8080', 
                 'header' => array( 
                                     "Proxy-Authorization: Basic $auth" 
                                  ) 
                ) 
); 
$context = stream_context_create($opts);
$file = fopen($url, 'r', false, $context)

【讨论】:

  • 我不在代理后面,服务器也不在后面。服务器是我自己的VPS。
  • 仍然没有解决方案:www.aangenaamvoedzaam.nl/scripts/fopen.php 抛出 404,而 www.cornelisdigitaal.nl 上的相同脚本工作正常。两个站点在同一个 VPS 上,具有相同的 DNS 设置,并且 allow_url_fopen 为 On....
【解决方案2】:

我决定检查一下 httpd.conf 并发现指定域的 VirtualHost 行包含 IP4 地址,但不包含 IP6 地址。

我添加了 IP6 地址,重新启动了 Apache,我很高兴小兔子!!!

希望这对其他人有所帮助...

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多