Проблема:
Apache2 отказывается запускать мои сценарии CGI, говоря мне, что не может найти файл.
Образец журнала:
[Wed Jul 14 09:22:19 2010] [error] [client 192.168.111.1] (2)No such file or directory: exec of '/home/pnathan/public_html/ajax.pl' failed
[Wed Jul 14 09:22:19 2010] [error] [client 192.168.111.1] Premature end of script headers: ajax.pl
Точки:
ajax.pl - это chmod 755. Дерево каталогов, в котором он находится, - это chmod 755. У меня есть другой сценарий в том же каталоге, который выполняется.
LS из ajax.pl:
-rwxr-xr-x 1 pnathan pnathan 534 2010-07-14 09:12 ajax.pl
В моем конфигурационном файле Apache2 есть этот блок:
<Directory /home/pnathan/public_html>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
Options +ExecCGI
AddHandler cgi-script .pl .py
</Directory>
Понятия не имею, что происходит.
Я предполагаю, что первая строка вашего скрипта содержит имя интерпретатора, которого нет на вашем компьютере.
Теперь разница может быть столь же тонкой, как тот факт, что если вы переместили сценарий с машины Windows на машину UNIX, строка оканчивается символом ^ M.
Я предлагаю открыть файл в vi и посмотреть, не написано ли что-то вроде «[dos]» внизу экрана. Если это так, то мое предположение верное.
Самый простой способ исправить это - dos2unix.