PHP 需要“guzzle.phar”会引发致命错误,但在页面刷新时有效

Posted

技术标签:

【中文标题】PHP 需要“guzzle.phar”会引发致命错误,但在页面刷新时有效【英文标题】:PHP require 'guzzle.phar' throws Fatal Error but on page refresh works 【发布时间】:2020-06-27 11:16:48 【问题描述】:

我想在我的项目中使用Guzzle 而不使用 Composer(我无法避免的限制)。我已经将他们的phar文件下载到我的项目目录PROJECT_ROOT/includes/guzzle.phar

现在在我的其他文件中,如果我使用 require_once 或 include 或 include_once 它会在下面抛出致命错误:

php Fatal error:  
require(): Failed opening required 'phar://guzzle.phar/autoloader.php (include_path='.:/usr/share/php:PROJECT_ROOT/includes') in PROJECT_ROOT/includes/guzzle.phar on line 3

但是当我使用

require 'includes/guzzle.phar'  

它在页面第一次加载时抛出上述错误,但是当我刷新它时它不会抛出任何错误并且在那之后可以正常工作。

在过去的两天里,我查看了各种 SO 问题,尝试使用 include_onceincluderequire_once 并添加 PROJECT_ROOT 以包含路径,但似乎没有任何效果。

感谢任何帮助,如果需要更多信息,请告诉我。谢谢

【问题讨论】:

您的服务器上有phar 扩展吗?权限配置错误怎么办? 使用 getcwd() 函数获取当前工作目录 我确实有 phar 扩展并且 getcwd 没有改变任何东西。问题是 phar 确实加载了“require”命令,但在第一次加载时,它崩溃了。之后,当我刷新时,它会完美运行。 它对我来说就像一个魅力。你用什么服务器运行 PHP? FPM?阿帕奇?您是否有任何机会启用像 php.net/manual/en/book.opcache.php 或 php.net/manual/en/book.apc.php 这样的操作码缓存?你用的是什么 PHP 和 guzzle 版本? 只需下载 zip 包而不是 phar,解压缩即可。 【参考方案1】:

提到的PHP Fatal 错误只有在文件路径正确的情况下才会抛出,您还可以在Fatal error 之前找到提及文件路径不正确的警告。

PHP Fatal error:  
require(): Failed opening required 'phar://guzzle.phar/autoloader.php (include_path='.:/usr/share/php:PROJECT_ROOT/includes') in PROJECT_ROOT/includes/guzzle.phar on line 

在每个Error/Warning/Notice PHP 中包含有关错误原因的信息,以帮助开发人员跟踪问题。

Failed opening required 'phar://guzzle.phar/autoloader.php

从上面的line/code可以发现guzzle.phar的文件路径不对,尝试使用相对路径的绝对路径。

require_once $_SERVER['DOCUMENT_ROOT'].""."includes/guzzle.phar"

【讨论】:

以上是关于PHP 需要“guzzle.phar”会引发致命错误,但在页面刷新时有效的主要内容,如果未能解决你的问题,请参考以下文章

PHP 中的 SoapClient 错误回退

为啥 PHP 错误会打印两次?

Memcache 和 php:致命错误:在中找不到类“Memcache”

相同命名空间相同类名的程序集间引发的致命错误

翻身的废鱼——论PHP从入门到放弃需要多久?14

Joomla Akeeba 致命错误