Php 无止境循环问题$var未设置或未更新
我通过HTTP调用该脚本,稍后将使用PHPCLI完成。第一个视频编码我得到了正确的持续时间,正确的数据被输入到数据库中,但是当脚本得到第二个视频时,所有工作正常,只有持续时间是错误的,从最后一次插入中获取数据,如果我取消设置变量,我会得到这个错误Php 无止境循环问题$var未设置或未更新,php,variables,while-loop,infinite-loop,Php,Variables,While Loop,Infinite Loop,我通过HTTP调用该脚本,稍后将使用PHPCLI完成。第一个视频编码我得到了正确的持续时间,正确的数据被输入到数据库中,但是当脚本得到第二个视频时,所有工作正常,只有持续时间是错误的,从最后一次插入中获取数据,如果我取消设置变量,我会得到这个错误 PHP Notice: Undefined variable: duration 我知道这是一个无休止的循环,我在脚本中还有一个sleep命令,这样db就不会一直被调用。我怎样才能让$duration得到真正的值。第一道工序是工作,第二道工序是除工
PHP Notice: Undefined variable: duration
我知道这是一个无休止的循环,我在脚本中还有一个sleep命令,这样db就不会一直被调用。我怎样才能让$duration得到真正的值。第一道工序是工作,第二道工序是除工期外的所有工作
现在我正在windows LAMP上工作,还没有在centos上测试脚本
while(10) {
// GET DATA FROM DB
// CHECK STATUS
if($check == true) {
exec("$mencoder $temp_upload_dir$post_filename -o $temp_upload_dir$r_post_id.mp4 2>&1", $output);
foreach($output as $error) {
if(preg_match('/============ Sorry, this file format is not recognized\/supported =============/', $error)) {
$error1 = "error";
break;
}
}
if(!isset($error1)) {
exec("$mp4box $temp_upload_dir$r_post_id.mp4");
exec($mplayer . " " . $temp_upload_dir . $r_post_id . ".mp4 2>&1", $video);
foreach($video as $vidlenght) {
if(preg_match('/ID_LENGTH=/', $vidlenght)) {
$duration = $vidlenght;
$duration = explode("=",$duration);
$duration = $duration['1'];
break;
}
}
// MOVE FILES
// UPDATE DB
}
}
当你这样做的时候
while(10)
你告诉节目的是
while(10==10)
While正在查找布尔值ie(true或false)。因为10将等于10,并且总是等于10,所以这句话总是正确的。退出的唯一方法是:
break;
在foreach循环中只有断点。因此,您没有什么可以打破while循环。至于你的变量没有被正确设置的原因,看起来你只是在foreach循环结束之前过早地中断了它们。是的,
,而(10)
是一个无限循环,据我所知,只有break
-语句在if
-块中,可能从未执行过。旁注:($check=true)
-->=是赋值,而不是比较运算符。如果上面的是一个拼写错误,那么循环应该运行不定式,并且应该得到最新的视频进行编码,断点在foreach循环中,如果preg_match得到它,它将停止foreach循环。您所描述的正是,OP想要什么。问题是,break
不起作用(至少不像他预期的那样)。顺便说一下,while(10)
相当于while((布尔)10)
,而不是while(10==10)
。甚至php也不猜测运算符。当我读到他的评论//从db获取数据时,我以为他在谈论从db获取数据的while循环,但现在我意识到这实际上就是他进行数据调用的地方。foreach循环在第二次+运行后不起作用,foreach的变量仍然是从第一次运行开始设置的,如果我在脚本结束时取消设置它们,那么我会得到PHP注意:Undefined variable:duration,我今天晚上会在我的linux服务器上尝试,也许这只是一个windows错误,它们是从第一次运行时设置的,只是因为您正在打破循环。因此,他们永远不会在第二轮比赛中上场,因为没有第二轮比赛。但是,当您暂停时,它们将不再从第一次运行开始设置,因为您没有将它们放入阵列中,它们将被设置为您找到的最后一个视频。此外,您总是在执行持续时间['1'],您需要保持运行计数并执行持续时间[x]。这里有不止一个问题,这些问题可能不是全部。