【问题标题】:How to know a code in php run sucessfully or not如何知道php中的代码是否成功运行
【发布时间】:2013-08-07 13:51:52
【问题描述】:

我有闲置代码

<html>
<body>
<?php
if ($_GET['run']) {
  # This code will run if ?run=true is set.
 echo "Hello";
  exec ("chmod a+x ps.sh");

  exec ("sh ps.sh");
}
?>

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

现在我想知道exec ("chmod a+x ps.sh") 是否正确执行。我该怎么办??

【问题讨论】:

标签: php


【解决方案1】:

看看the documentation:

string exec ( string $command [, array &$output [, int &$return_var ]] )

...

return_var

如果 return_var 参数与输出参数一起出现, 然后执行命令的返回状态将写入此 变量。

所以只要检查返回码是否不等于零:

exec ("chmod a+x ps.sh", $output, $return);
if ($return != 0) {
    // An error occured, fallback or whatever
    ...
}

【讨论】:

  • 这里$return的值不为零。现在程序出了什么问题??我应该怎么办。请给我一些建议。
【解决方案2】:
exec(..., $output, $return);

if ($return != 0) {
    // something went wrong
}

通过为第三个参数提供变量名来捕获返回代码。如果该变量之后包含0,那么一切都很好。如果不是0,那就是出错了。

【讨论】:

  • exec ("sh ps.sh");正在执行一个 shell 脚本。 is shell 脚本将创建一个 txt 文件作为输出。但实际上这并没有发生。如何解决这个问题呢。请给点建议。
  • 抱歉,我的水晶球暂时不可用。
  • 谢谢,但是我现在怎么能执行shell脚本呢?它没有执行。
  • @Bis 我不知道 为什么 脚本不起作用,我无法为您调试它。捕获所有输出并查看您可能需要调试它的所有日志。
【解决方案3】:

exec() 接受其他参数。第二个是输出,它可以让你看到你的命令的输出。

在 chmod 的情况下,正确的输出什么都不是。

exec() 的第三个参数是返回状态。如果成功,它应该是 0。

然后您应该执行以下操作:

exec ("chmod a+x ps.sh", $out, $value);

if(!empty($out) || $value != 0)
{
    #there was an error
}

注意:您不必事先初始化 $out 或 $value,PHP 会在您使用它们时创建它们。

【讨论】:

  • $out not 为空如何指向错误?如果我打电话给exec('ls -lta', $out, $value); 那么$out 是空的肯定是错误的。此外,exec 期望数组的引用作为第二个参数。是的,PHP 会为您创建一个数组,但最好自己初始化任何需要的变量。不确定这里是否是这种情况,但通常情况下,如果您不这样做,PHP 会发出警告
  • “在 chmod 的情况下,正确的输出什么都不是”,正如我在回答中所说的那样。他问的是这条精确的路线。对于 $out,php 不会在现有数组中添加值,它将替换该变量的所有内容。你可能已经在 $out 中有一个对象、一个字符串或其他东西,它将被替换。在这种情况下没有警告。
  • OP 的 sn-p 显示了 2 个 exec 调用,我认为最好不要使用像 empty($out) 这样的模糊检查。我知道 out 将被重新分配,这就是它通过引用传递的原因。您说没有发出警告,但您的 ini 设置是否正确 (E_STRICT | E_ALL)?
  • 是的,ini 设置是正确的,只是用 trigger_error() 验证了它们。如果您有疑问,只需测试示例代码。对于第二个 exec 调用,你是绝对正确的,他应该根据他的脚本应该做什么来测试 $out。
  • 如果您想知道该脚本应该做什么,请检查我标记为重复的问题(问题下方的自动评论)。 OP之前问过这个问题。他似乎不知道环境变量可能不同,运行脚本的用户可能没有到chmod 的路径,或者没有执行它的权限...添加所有这些,以及visudo 上的基本 tut对 SO 来说有点过分了
猜你喜欢
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 2011-08-10
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多