Моя веб-страница html вызывает php-скрипт для загрузки файлов на сервер с локального компьютера следующим образом.
<form enctype="multipart/form-data" action="upload.php" method="POST"> <p><b><h3> <font color="#003366"> (1) Upload your reading text file. </font> </h3> </b> </p> <INPUT type="file" name="uploaded" size="50" > <br/> <input type="submit" name="files" value="upload"> </form>
Для обработки с загруженным файлом мой php-скрипт вызывает сценарий оболочки
$output=system('/bin/sh connector_0.sh');
и мой сценарий оболочки состоит из серии скриптов python / perl.
#!/bin/sh python main_senselearner_final_0.py senseLearner.pl -i Uploaded_Files/slinput_0.txt -o Uploaded_Files/presloutput_0 .txt -model modelNNCollocations -model modelJJCollocations -model modelVBColloc ations -pos python smutngslout_0.py python genhtml_0.py
Теперь проблема заключается в следующем: все скрипты python в сценарии оболочки отлично работали через php. Но скрипт perl не работал.
Когда я запускаю сценарий оболочки сам на своем сервере, все четыре скрипта в оболочке работали отлично. Однако, когда я запускаю сценарий оболочки из php, только скрипт perl не работает.
Не могли бы вы дать мне какие-либо советы по решению этой проблемы?
Большое спасибо!!!
Вероятно, это проблема с разрешениями. Попробуйте настроить файлы, которые perl-скрипт читает на + rw, и посмотреть, работает ли он тогда. Если это так, то вам нужно выяснить, что пользователь работает php (вероятно, пользователь Apache) и убедитесь, что они могут читать / записывать соответствующие файлы. Также убедитесь, что скрипт Perl является исполняемым пользователем php (apache).
Существует вероятность, что пользователь, у которого Apache / PHP работает как (обычно apache), не имеет разрешений для Uploaded_Files/slinput_0.txt
или Uploaded_Files/presloutput_0.txt
.
Просто угадать, но apache потребуется прочитать для файла slinput_0.txt
, прочитать / записать для presloutput_0.txt
и read / write / exec для каталога Uploaded_Files
Причина, по которой она работает, когда вы ее пытаетесь, заключается в том, что вы работаете как пользователь и, скорее всего, имеете права писать на веб-сайт.
Я бы попробовал
senseLearner.pl -i Up … -pos> /var/log/senseLearner.log 2> & 1
(и посмотрите на этот файл журнала после)
и, возможно, вы можете попытаться указать интерпретатор, как
/ path / to / perl senseLearner.pl -i Up … -pos> /var/log/senseLearner.log 2> & 1