我遇到的问题是PHP的explode()
功能对我不起作用。如果我对它进行了讨论,我会得到Array ( [0] => 17396 17400 17404 17408 17412 17416 17420 17424 17428 )
或类似的不同数字(这些数字是进程ID' s)。如果我vardump $temp
,那么我得到string(53) "17396 17400 17404 17408 17412 17416 17420 17424 17428"
。为什么explode()
会像这样将它们放入数组中?
<?php
function status($pid){
$command = 'ps -p '.$pid;
exec($command,$op);
if (!isset($op[1]))return false;
else return true;
}
function checkProcesses($pids) {
foreach ($pids as $i => $pid) {
if( !status($pid)) {
echo 'deleting value<br />';
unset($pids[$i]);
}
}
if( !empty($pids)) {
echo 'recursion<br />';
checkProcesses($pids);
}
}
?>
<?php
$cmd_array = array(291924,262437,231687,280261,229298,236197,230375,275225,230418);
$processes = array();
foreach($cmd_array as $i => $cmd) {
$processes[$i] = new Process();
$processes[$i]->command = 'wget -O ./files/'.$cmd.'.html http://www.example.com/'.$cmd;
$temp = $processes[$i]->runCom();
}
$pids = explode(" ", $temp); // This is where I'm having the issue
checkProcesses($pids);
foreach($cmd_array as $i => $cmd) {
echo 'wget for '.$cmd.' => PID: '.$pids[$i].'<br />';
}
?>
<?php
class Process
{
public $pid;
public $command;
public function runCom(){
$command = 'nohup '.$this->command.' > /dev/null &';
shell_exec($command);
$pid = shell_exec('ps -C wget -o pid=');
return $pid;
}
public function stop(){
$command = 'kill '.$this->pid;
exec($command);
if ($this->status() == false)return true;
else return false;
}
}
?>
答案 0 :(得分:1)
你需要在循环中进行爆炸。
$pids = array();
foreach($cmd_array as $i => $cmd) {
$processes[$i] = new Process();
$processes[$i]->command = 'wget -O ./files/'.$cmd.'.html http://www.example.com/'.$cmd;
$temp = $pprocesses[$i]->runCom();
$pids = array_merge($pids, explode("\n", $temp));
}
$pids = array_unique($pids);
我还改变explode
使用换行而不是空格。听起来你的Process
类只是返回命令的输出,如果它类似于ps -o pid=
,那么每个PID将在不同的行上,而不是以空格分隔。
答案 1 :(得分:0)
答案 2 :(得分:0)
感谢@AbraCadaver的建议。就是这样。
“你在一个空间爆炸。没有空间。看起来像空间的东西是其他东西,也许换行\ n?”