【问题标题】:PHP Extension: Works from command line, but not in httpd (Apache) serverPHP 扩展:从命令行工作,但不在 httpd (Apache) 服务器中
【发布时间】:2012-01-27 18:21:33
【问题描述】:

我的 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 命令有效。什么可能导致此问题?

【问题讨论】:

    标签: apache php-extension


    【解决方案1】:

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

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

    <?php phpinfo(); ?>
    

    这个文件会告诉你哪些模块已经被加载,哪个@​​987654324@文件正在被使用,以及许多其他信息。它应该可以帮助您诊断问题。您可能需要设置 Apache 配置参数来加载正确的 php.ini 文件或直接加载模块的 .so 文件。

    【讨论】:

      【解决方案2】:

      原来问题是由 SELinux 引起的。如果它像这样关闭:

      echo 0 >/selinux/enforce
      

      一切都很神奇。

      【讨论】:

        猜你喜欢
        • 2017-12-01
        • 2020-12-24
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-19
        • 2012-07-20
        相关资源
        最近更新 更多