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_once
、include
、require_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”会引发致命错误,但在页面刷新时有效的主要内容,如果未能解决你的问题,请参考以下文章