【问题标题】:URL path not working, absolute path doesURL 路径不起作用,绝对路径起作用
【发布时间】:2013-07-06 12:05:03
【问题描述】:

我切换了托管服务提供商,现在遇到以下问题。

函数imagecreatefromjpeg() 正在尝试从其 URL 路径 (http://mydomain.com/contents/category/certificate/1/template.jpg) 读取文件。此函数在旧设置上工作,但在新设置上失败并出现以下错误。

(104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
Premature end of script headers: index.php

将 URL 路径替换为同一个文件的绝对路径后,问题就消失了。

我能看到的区别是

  1. 新设置使用 nginx 作为 Apache 的反向代理。
  2. 新设置的 PHP 版本为 5.3.3,旧设置为 5.3.14

我们尝试了很多方法,但无法理解如何使 URL 路径在较新的设置上工作。有人可以帮忙吗?

【问题讨论】:

  • 您可能已经遇到过它,但在做一些研究时我发现了this。这可能是相关的
  • 您是否检查过您的 .htaccess 以确保您没有来自旧主机的自定义 php 处理程序?
  • 这里的“读取文件”到底是什么意思?你在做include() / require() 吗?
  • 上述错误来自函数 imagecreatefromjpeg() 尝试读取作为参数提供的图像路径。
  • 正确的 PHP 版本应该是 5.3.27(更准确地说是 5.5.1)。 5.3.3 已经超过 3 年了,并且有几个安全问题在以后的版本中得到了修复。真的不应该使用这个非常旧的版本!特别是不应该降级。

标签: php path fastcgi absolute-path


【解决方案1】:

我在运行 cron 时在我的服务器上遇到了这个问题。

这是基于类似主题我可以说的。

1) 页面加载到类似 ~/.

2) 您引用了位于 ~/../private/hello/derp.php 的另一个页面

3) 在 derp.php 中,假设您正在从 ~/../private/hello/.' 运行文件。

4) 实际上你是从 ~/.

5) 文件引用错误,因为 PWD 错误。

弄清楚我的东西很烦人,但是当我深入研究它时,我意识到它试图从 ~/../private/hello/images/hi.jpg 之类的东西加载东西,实际上由于 PWD,它正在查找不存在的 ~/images/hi.jpg。

也许这对你有帮助。我希望是的。

编辑你也想知道很多时候,~/.因为你可以和 ~/.公共的。这也是需要注意的地方。

尝试通过 bash 脚本正确使用终端变量。

【讨论】:

  • 您可以随时使用魔术常量__DIR__来使用当前文件所在的目录,并使用它来创建绝对路径。这样,你就不会陷入那个陷阱。另请注意,cronjob 不一定继承为登录 shell 配置的完整环境。通常只有一个基本的设置,任何路径都应该是绝对的 - 否则命令会因为找不到而失败。
  • 该死的。每天学些新东西。哈哈。感谢您的指点。
【解决方案2】:

你确定你相应地配置了你的 nginx 网络服务器吗?这里有一些很好的教程,可以解释一些更相关的 nginx 和 php fastcgi 进程管理器常见的陷阱:

  1. Ars Technica: Web Served part 1: Setting up a web server

  2. Ars Technica: Web Served part 3: Installing PHP Fastcgi Process Manager

  3. Nginx common pitfalls

我链接了这些资源,因为您的重写引擎似乎配置错​​误。无论如何,请提供更好的上下文!

【讨论】:

    【解决方案3】:

    尝试通过函数更改 url 'http://mydomain.com/'

        function selfURL(){
        $server1 = $_SERVER['HTTPS'];
        $server2 = $_SERVER['SERVER_PROTOCOL'];
        $server3 = $_SERVER['SERVER_PORT'];
        $server4 = $_SERVER['SERVER_NAME'];
    
    
        $s = empty($server1) ? '' : ($server1 == "on") ? "s" : "";
        $protocol = strleft(strtolower($server2), "/").$s;
        $port = ($server3 == "80") ? "" : (":".$server3);
        return $protocol."://".$server4.$port;
    
        }
    function strleft($s1, $s2){
    return substr($s1, 0, strpos($s1, $s2));
    }
    print(selfURL());
    

    '$port' 如果不使用,你可以替换它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 2022-11-29
      • 2020-12-23
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多