Расширение PHP: работает из командной строки, но не на сервере httpd (Apache) - PullRequest
2 голосов
/ 27 января 2012

У меня самая странная проблема с моим расширением PHP.Когда я использую его из командной строки, вот так:

php -r '$mc = new MyClass("foo"); echo $mc->getField();'

выводит «foo», как и ожидалось.

Однако, если я пытаюсь сделать то же самое из моего индекса.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>

Часть php моегоhttpd.conf выглядит так:

# 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 работает.Что может быть причиной этой проблемы?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Исполняемый файл php, который вы запускаете в командной строке, отличается от библиотеки libphp5.so, которую вы запускаете через Apache.

Поместите в файл следующее, загрузите его на свой сервер и просмотрите его через Интернет, и вы, вероятно, увидите, что ваш модуль не был загружен:

<?php phpinfo(); ?>

Этот файл сообщит вам, какие модули были загружены, какой файл php.ini используется, и много другой информации. Это должно помочь вам диагностировать вашу проблему. Возможно, вам потребуется установить параметр конфигурации Apache, чтобы либо загрузить правильный файл php.ini, либо напрямую загрузить файл .so вашего модуля.

1 голос
/ 04 февраля 2012

Оказывается, проблема была в SELinux. Если он выключен так:

echo 0 >/selinux/enforce

Все волшебно работает.

...