Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无止境循环问题$var未设置或未更新_Php_Variables_While Loop_Infinite Loop - Fatal编程技术网

Php 无止境循环问题$var未设置或未更新

Php 无止境循环问题$var未设置或未更新,php,variables,while-loop,infinite-loop,Php,Variables,While Loop,Infinite Loop,我通过HTTP调用该脚本,稍后将使用PHPCLI完成。第一个视频编码我得到了正确的持续时间,正确的数据被输入到数据库中,但是当脚本得到第二个视频时,所有工作正常,只有持续时间是错误的,从最后一次插入中获取数据,如果我取消设置变量,我会得到这个错误 PHP Notice: Undefined variable: duration 我知道这是一个无休止的循环,我在脚本中还有一个sleep命令,这样db就不会一直被调用。我怎样才能让$duration得到真正的值。第一道工序是工作,第二道工序是除工

我通过HTTP调用该脚本,稍后将使用PHPCLI完成。第一个视频编码我得到了正确的持续时间,正确的数据被输入到数据库中,但是当脚本得到第二个视频时,所有工作正常,只有持续时间是错误的,从最后一次插入中获取数据,如果我取消设置变量,我会得到这个错误

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]。这里有不止一个问题,这些问题可能不是全部。