【发布时间】:2011-07-20 10:33:38
【问题描述】:
我通过 HTTP 调用该脚本,稍后将使用 php-cli 完成。第一个视频编码我得到了正确的持续时间,并且在数据库中输入了正确的数据,但是当脚本获取第二个视频时一切正常,只有持续时间是错误的,从上次插入中获取数据,如果我取消设置变量我得到这个错误
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)是一个无限循环,据我所知,唯一的break-statements 位于if-blocks 内,可能永远不会执行。旁注:($check = true)-->=是 assignment,而不是 compare-operator。 -
如果现在已修复,上面是一个错字,是的,循环应该运行不定式并且应该获取最新的视频进行编码,中断在 foreach 循环中,如果 preg_match 得到它,它将停止 foreach 循环.
标签: php variables while-loop infinite-loop