Как запустить Perl скрипт с несколькими аргументами из php - PullRequest
3 голосов
/ 26 мая 2010

Моя 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 не работает.

Не могли бы вы дать мне какие-нибудь советы по решению этой проблемы?

Большое спасибо !!!

Ответы [ 3 ]

1 голос
/ 26 мая 2010

Это, скорее всего, проблема с разрешениями. Попробуйте установить файлы, которые perl-скрипт читает для + rw, и посмотрите, работает ли он тогда. Если это так, то вам нужно выяснить, кто запускает php (вероятно, пользователь apache) и убедиться, что он может читать / записывать соответствующие файлы. Также убедитесь, что скрипт Perl исполняется пользователем php (apache).

0 голосов
/ 26 мая 2010

Я бы попробовал
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

0 голосов
/ 26 мая 2010

Существует вероятность того, что пользователь, на котором запущен Apache / PHP (обычно apache), не имеет разрешений для Uploaded_Files/slinput_0.txt или Uploaded_Files/presloutput_0.txt.

Просто угадайте, но apache нужно будет прочитать файл slinput_0.txt, прочитать / написать для presloutput_0.txt и прочитать / написать / exec для каталога Uploaded_Files

Причина, по которой он работает, когда вы пытаетесь это сделать, заключается в том, что вы работаете как пользователь и, скорее всего, имеете права на запись в webroot.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...