Назад | Перейти на главную страницу

Попытка установить php-cgi / Apache / Ubuntu 14.04

Я пытаюсь использовать "обратную оболочку Php" для школьных целей на моем чистом установленном Ubuntu 14.04. Я настроил свой Apache / PHP / MySQL как обычно.

Мне нужно заставить работать php-функцию pcntl_fork (). Чтобы заставить его работать, мне нужно использовать PHP-CGI, но я не могу заставить его работать после 6 часов попыток.

Это последний урок, которому я следовал: http://www.binarytides.com/setup-apache-php-cgi-ubuntu/

У меня были проблемы, и теперь я пытаюсь их решить. Вот так сейчас выглядит мой .conf-файл:

<VirtualHost *:80>
            # The ServerName directive sets the request scheme, hostname and port t$
            # the server uses to identify itself. This is used when creating
            # redirection URLs. In the context of virtual hosts, the ServerName
            # specifies what hostname must appear in the request's Host: header to
            # match this virtual host. For the default virtual host (this file) this
            # value is not decisive as it is used as a last resort host regardless.
            # However, you must set it for any further virtual host explicitly.
            #ServerName www.example.com

            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html
            ScriptAlias /cgi-bin/ /usr/bin/

            Action cgi-handler /cgi-bin/php-cgi
            AddHandler cgi-handler .php

            <Directory /usr/bin>
                    Require all granted
                    Options FollowSymLinks
            </Directory>

            <Directory /var/www/html/>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride All
                    Order Allow,Deny
                    Allow from all
            </Directory>

            # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
            # error, crit, alert, emerg.
            # It is also possible to configure the loglevel for particular
            # modules, e.g.
            #LogLevel info ssl:warn

            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined

            # For most configuration files from conf-available/, which are
            # enabled or disabled at a global level, it is possible to
            # include a line for only one particular virtual host. For example the
            # following line enables the CGI configuration for this host only
            # after it has been globally disabled with "a2disconf".
            #Include conf-available/serve-cgi-bin.conf
    </VirtualHost>

Я получаю такую ​​ошибку:

404 Не Найдено

Запрошенный URL /cgi-bin/php-cgi/test.php не найден на этом сервере.

Кто-нибудь, кто может мне помочь? Заранее спасибо.

Изменить: я уже пробовал FastCGI, но pcntl_fork () по-прежнему отказывался работать.

Укороченная версия:

Предположим, запрошенный URL был http://some.host/test.php, с вашей конфигурацией apache исполняемый файл php-cgi должен быть помещен в папку / usr / bin и должен быть исполняемым пользователем Apache. Также скрипт test.php должен находиться в / var / www / html

Полная / полная версия:

В зависимости от конфигурации, которую вы указали, при запросе URL http://some.host/test.php , среди прочего, ваш Apache будет:

  • убедитесь, что это запрос, заканчивающийся на «.php», и, следовательно, из-за директивы AddHandler и связанного с ней действия решить, что ему необходимо запустить приложение CGI «/ cgi-bin / php-cgi»;

  • Что касается директивы ScriptAlias, решите, что приложение CGI "/ cgi-bin / php-cgi" сопоставлено в базовой файловой системе с полным путем "/ usr / bin / php-cgi". Следовательно ...

  • Apache запустит «/ usr / bin / php-cgi» (который должен существовать и быть исполняемым Apache), позаботившись о добавлении ссылки на реальный сценарий, который будет выполняться (PHP; в вашем случае «test.php») определение нескольких переменных среды (PATH_INFO, PATH_TRANSLATED, QUERY_STRING, SCRIPT_NAME и другие).

В связи с вышеизложенным предположим, что "/ usr / bin / php-cgi" существует в ваших файловых системах и может выполняться вашим Apache:

  • следующие переменные среды определены (Apache):

SCRIPT_NAME: /cgi-bin/php-cgi
PATH_INFO: /test.php
PATH_TRANSLATED: /var/www/html/test.php

  • с указанной выше средой запускается / usr / bin / php-cgi;

  • после запуска php-cgi будет искать сценарий для выполнения, как указано в переменной окружения PATH_TRANSLATED;

  • php-cgi попытается открыть и прочитать "/var/www/html/test.php" и ...

  • выполнить это.

Поскольку ваш Apache выполняет поиск /cgi-bin/php-cgi/test.php, я подозреваю, что он не распознает исполняемый файл php-cgi в папке / usr / bin.

Я предлагаю дважды проверить всю вашу конфигурацию, чтобы убедиться, что:

  • php-cgi - это исполняемый файл в / usr / bin. Обратите внимание, что обычный Ubuntu действительно использует двоичный файл / usr / bin / php5-cgi (с добавленной цифрой "5");
  • ваши скрипты PHP хранятся в / var / www / html
  • ваш URL имеет вид: http://some.host/test.php
  • в случае возникновения дополнительных проблем проверьте свой файл журнала, обычно расположенный по адресу /var/log/apache/error.log

Заключительное примечание

я сильно не согласны с тем, чтобы весь / usr / bin был доступен для приложений CGI: пожалуйста, подумайте о том, чтобы хранить ваши CGI где-нибудь в другом месте (/ var / www / cgi-bin или / usr / lib / cgi-bin или что-то еще), особенно если ваш - общедоступный " веб сервер.