2013-07-22 64 views
0

我有这样的:在脚本运行EXEC

<?php 
if ($_GET['run']) { 
    # This code will run if ?run=true is set. 
    exec("./check_sample.sh"); 
} 
? 

<!-- This link will add ?run=true to your URL, myfilename.php?run=true --> 
<button type="button" onclick="?run=true">Click Me!</button> 

shell脚本check_sample.sh有一定的O/P,它打印用printf /呼应 当我点击“点击我”我不明白那些o/p。还有关于如何使其 接受文本输入并将其作为$ 1参数传递的任何指针。脚本也将有助于

+0

有没有什么办法可以做到这一点,而不使用shell脚本/传递参数?没有正确地转义输入而使用shell命令会导致严重的安全漏洞。 –

回答

1

EXEC只会给你的最后一行...您可能需要使用中继

<?php 
if ($_GET['run']) { 
    # This code will run if ?run=true is set. 
    passthru("./check_sample.sh"); 
} 
? 

传递参数,你可以只形成它添加到这样的命令。 (escapeshellarg将处理逃逸,为你的价值的报价)

passthru("./check_sample.sh ".escapeshellarg($_POST["fieldname"])); 

如果需要输出作为一个字符串你的选择是使用popen或围绕通路中的输出缓冲块:即:

ob_start(); 
/* passthru call */ 
$data = ob_get_clean(); 
+0

+1好回答:) – jnrbsn

1

exec()不输出任何东西。您可以使用passthru()

非常注意将用户输入传递给外部程序。如果你确实使用escapeshellarg()来逃避它。

像这样的:

passthru('./check_sample.sh '.escapeshellarg($your_user_input)); 
+0

+1好回答:) – Orangepill

+0

哈哈。是啊。在我发布我的信息后,我注意到了你的答案。 – jnrbsn

0

exec()只抓住了最后一行,似乎你最好使用一个变量来抓住它。请参阅手册。其他选择是system()shell_exec()passthru(),你可以通过PHP手册找到哪一个适合。

+0

其实它没有帮助。我有这样写:<?php if($ _GET ['run']){ #如果设置了?run = true,则此代码将运行。 ob_start(); passthru(“./ check_sample.sh”.escapeshellarg($ _ POST [“iCSCui21515”])); $ data = ob_get_clean(); } > < - !此链接将增加运行= true以您的网址,myfilename.php运行=真 - ? “?运行= TRUE”> <按钮类型= “按钮” 的onclick = >点击我! 当我执行脚本时,屏幕上还没有任何东西出现 –