我的 PHP 扩展遇到了最奇怪的问题。当我从命令行使用它时,像这样:
php -r '$mc = new MyClass("foo"); echo $mc->getField();'
它按预期打印出“foo”。
但是,如果我尝试在我的 index.php 中做同样的事情,我会得到一个类未找到的错误。
Fatal error: Class 'MyClass' not found in /var/www/html/index.php on line 12
这怎么会发生?我什至将 httpd 设置为在运行 php -r 命令时以与我相同的用户身份运行。
我的 index.php 看起来像这样:
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<p>
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
$mc = new MyClass("foo");
echo $mc->getField();
?>
</p>
</body>
</html>
我的 httpd.conf 的 php 部分如下所示:
# PHP Configuration for Apache
#
# Load the apache module
#
LoadModule php5_module modules/libphp5.so
#
# Cause the PHP interpreter handle files with a .php extension.
#
<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 9524288
</Files>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
显然我的 php.ini 设置正确,因为我的 php -r 命令有效。什么可能导致此问题?
最佳答案
您在命令行上运行的 php
可执行文件与您通过 Apache 运行的 libphp5.so
库不同。
将以下内容放入一个文件中,将其上传到您的服务器并通过网络查看它,您可能会看到您的模块尚未加载:
<?php phpinfo(); ?>
此文件将告诉您加载了哪些模块、正在使用哪个 php.ini
文件以及许多其他信息。它应该可以帮助您诊断问题。您可能需要设置 Apache 配置参数以加载正确的 php.ini 文件或直接加载模块的 .so
文件。
关于apache - PHP 扩展 : Works from command line, 但不在 httpd (Apache) 服务器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038141/