PHP扩展:在命令行中工作,但不在httpd(Apache)服务器中工作

PHP扩展:在命令行中工作,但不在httpd(Apache)服务器中工作,apache,php-extension,Apache,Php Extension,我的PHP扩展遇到了最奇怪的问题。当我从命令行使用它时,如下所示: php -r '$mc = new MyClass("foo"); echo $mc->getField();' 它按预期打印出“foo” 但是,如果我尝试在index.php中执行相同的操作,就会得到一个类not found错误 Fatal error: Class 'MyClass' not found in /var/www/html/index.php on line 12 这怎么会发生?我甚至将httpd设置

我的PHP扩展遇到了最奇怪的问题。当我从命令行使用它时,如下所示:

php -r '$mc = new MyClass("foo"); echo $mc->getField();'
它按预期打印出“foo”

但是,如果我尝试在index.php中执行相同的操作,就会得到一个类not found错误

Fatal error: Class 'MyClass' not found in /var/www/html/index.php on line 12
这怎么会发生?我甚至将httpd设置为在运行php-r命令时以与我相同的用户身份运行

My 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>
# 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测试

我的httpd.conf的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>
# 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
Apache的PHP配置 # #加载apache模块 # LoadModule php5_module modules/libphp5.so # #导致PHP解释器处理扩展名为.PHP的文件。 # SetOutputFilter PHP SetInputFilter PHP LimitRequestBody 9524288 AddType应用程序/x-httpd-php.php AddType应用程序/x-httpd-php-source.phps # #将index.php添加到将用作目录的文件列表中 #索引。 # DirectoryIndex.php
显然,我的php.ini设置正确,因为我的php-r命令可以工作。什么可能导致此问题?

您在命令行上运行的
php
可执行文件与
libphp5不同。因此,您通过Apache运行的
库不同

将以下内容放入文件中,将其上载到服务器并通过web查看,您可能会看到您的模块尚未加载:

<?php phpinfo(); ?>


该文件将告诉您加载了哪些模块,使用了哪个
php.ini
文件,以及许多其他信息。它应该能帮助你诊断你的问题。您可能需要设置一个Apache配置参数来加载正确的php.ini文件或直接加载模块的
。因此
文件。

事实证明,问题是由SELinux引起的。如果是这样关闭的:

echo 0 >/selinux/enforce
一切都神奇地运转着