Я пытаюсь использовать "обратную оболочку 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:
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.
Я предлагаю дважды проверить всю вашу конфигурацию, чтобы убедиться, что:
я сильно не согласны с тем, чтобы весь / usr / bin был доступен для приложений CGI: пожалуйста, подумайте о том, чтобы хранить ваши CGI где-нибудь в другом месте (/ var / www / cgi-bin или / usr / lib / cgi-bin или что-то еще), особенно если ваш - общедоступный " веб сервер.