2010-05-11 2 views
2

У меня есть PHP-скрипт, который запускает bat-файл на компьютере с помощью окнаЧто такое Linux эквивалент запуска файла .bat на окна из PHP с использованием системы()

$ результат = система ("CMD/C nameOfBatchFile.bat ");

Это устанавливает некоторые переменные окружающей среды и используется для вызова API Amazon EC2 из командной строки.

Как мне сделать то же самое с сервера Linux? Я переименовал свой .bat-файл в оболочку (.sh) и изменил скрипт на использование «export» при настройке env vars. Я протестировал, выполнив код из терминала шпатлевки, и он делает то, что должен. Поэтому я знаю, что команды в скрипте хороши. Как запустить это из PHP? Я попытался выполнить ту же команду, что и выше, с новым именем файла, и я не получаю никаких ошибок, или файл не найден и т. Д., Но он не работает.

С чего начать, чтобы решить эту проблему?

---------------------------------- ОБНОВЛЕНИЕ ----------- --------------------

Вот PHP скрипт, который вызывает файл оболочки -

function startAmazonInstance() { 
$IPaddress = "1.2.3.4" 
    $resultBatTemp = system("/cmd /C ec2/ec2_commands.sh"); 
    $resultBat = (string)$resultBatTemp; 
    $instanceId = substr($resultBat, 9, 10);   
    $thefile = "ec2/allocate_address_template.txt"; 
    // Open the text file with the text to make the new shell file file 
    $openedfileTemp = fopen($thefile, "r"); 
    contents = fread($openedfileTemp, filesize($thefile)); 
    $towrite = $contents . "ec2-associate-address -i " . $instanceId . " " . $IPaddress; 
    $thefileSave = "ec2/allocate_address.sh"; 
    $openedfile = fopen($thefileSave, "w"); 
    fwrite($openedfile, $towrite); 
    fclose($openedfile); 
    fclose($openedfileTemp); 
    system("cmd /C ec2/mediaplug_allocate_address_bytemark.sh");  
} 

А вот .sh файл - ec2_commands.sh

#!/bin/bash 
export EC2_PRIVATE_KEY=$HOME/.ec2/privateKey.pem 
export EC2_CERT=$HOME/.ec2/Certificate.pem 
export EC2_HOME=$HOME/.ec2/ec2-api-tools-1.3-51254 
export PATH=$PATH:$EC2_HOME/bin 
export JAVA_HOME=$HOME/libs/java/jre1.6.0_20 
ec2-run-instances -K $HOME/.ec2/privateKey.pem -C $HOME/.ec2/Certificate.pem ami-###### -f $HOME/.ec2/aws.properties 

я смог запустить этот файл из командной строки, так что я знаю, что команды работают нормально. Когда я работал над окнами, при запуске экземпляра произошла задержка, и я мог бы эхо результатов на экране. Теперь нет задержек, как будто ничего не происходит.

ответ

2
$result = system("/bin/sh /path/to/shellfile.sh"); 
+0

Я не знаю, что вам нужно разрешение на выполнение, если вы передаете его прямо в оболочку? – paxdiablo

+0

ok Я попробовал это, но он все еще не запускает файл. Является ли путь к файлу относительно PHP-скрипта? Я проверял права доступа к файлам, и они 777 – undefined

+0

Скрипт не нуждается в разрешениях на выполнение, потому что вы его не выполняете - вы выполняете '/ bin/sh' и передаете ему сценарий для запуска. – meagar

4

Положите хеширование в первую строку вашего сценария оболочки.

#!/bin/bash 

Тогда дайте ему исполняемый флаг.

$ chmod a+x yourshellscript 

Затем вы можете позвонить ему из PHP с помощью системы.

$result = system("yourshellscript"); 
1

Выполняется ли сценарий? Если нет, то сделать это так:

$ chmod a+x script.sh   # shell 

system ("/path/to/script.sh"); // PHP 

или запустить его с помощью переводчика:

system("sh /path/to/script.sh");  // PHP 

ли интерпретатор, указанный в сценарии оболочки (т.е. #!/bin/sh линии.)?

 Смежные вопросы

  • Нет связанных вопросов^_^