2010-08-25 2 views
0

Я пытаюсь подключить unix-сервер от php и выполнить .exe (язык C). Раньше я использовал phptelnet для этой цели, но теперь мне нужно перейти на phpseclib из-за проблем с безопасностью. У меня был коэффициент успешности 100%, когда я использую phptelnet. Я мог бы запускать некоторые из внешних программ, таких как «C» -программы с аргументами в качестве входных данных в php-скрипте. В phptelnet я используюphptelnet vs phpseclib

$telnet->DoCommand('cd public_html'); 
$telnet->DoCommand('cd abc'); 
$telnet->DoCommand('demo.exe'); 
$telnet->DoCommand("$inputs", $result); 
echo $result; 

Это работает отлично. Но теперь я использую phpseclib. Я мог подключиться к серверу unix через ssh и выполнять программы, в которых входы жестко закодированы в программе. Я использую

echo $ssh->exec('./demo.exe'); 

Теперь проблема заключается в том, как обеспечить входные данные для программы. Как я могу использовать exec() для принятия аргументов в качестве входных данных. Например, demo.exe - это программа для добавления двух чисел. так можно сказать

echo $ssh->exec("./demo.exe, '10 20'"); 

Также как я могу использовать exec() для выполнения нескольких строк кода за одно исполнение. Я немного смущен. Любые данные по этому поводу очень приветствуются.

Заранее спасибо.

+0

Вы пытались просто добавить к заданы параметры первого параметра, то есть эхо $ ssh-> Exec (»./ demo.exe 10 20 «); ? – Seidr

+0

Hey Seidr, Спасибо за комментарий. Да. Я добавил аргументы, как вы уже упоминали. Сценарий не реагировал, когда я пробовал этот путь. – Superted

ответ

0

Где у вас есть несколько вариантов команд, которые вы хотите использовать:

$ssh->exec("./demo.exe '10' '20'"); 

Оставьте из запятая, и ограждают индивидуальные параметры каждого. Или конвертируйте список с $opts = implode(" ", array_map("escapeshellarg", $opts)).

Если вы используете соединение SSH1, вы можете выполнять только одну команду за раз. Если вы подключаетесь к серверу Windows (как это выглядит), вы не можете иметь две команды в строке.

только для сервера/BSD Linux вы можете использовать:

$ssh->exec("cmd1 ; cmd2"); 
+0

Спасибо, Марио за предложения. Мой скрипт не отвечает, когда я использую $ ssh-> exec ("./ demo.exe '10' '20'"); Я попробую с помощью implode() и дам вам знать. BTW Я мог бы запускать несколько команд, как вам предложил $ ssh-> exec ("./ demo.exe; ./hello.exe") ;. Я должен искать варианты для принятия аргументов. Спасибо за ответ .. – Superted

+0

Implode() тогда не поможет. Если это сервер Win (?), То одинарные кавычки могут вообще не работать. Попробуйте двойные кавычки или пропустите экранирование, если это так. – mario

+0

Эй, марио. Я пытался использовать двойные кавычки и экранирование, не работает. Спасибо за ваши комментарии. – Superted

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

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