Windows / php pclose и popen проблема - PullRequest
       18

Windows / php pclose и popen проблема

1 голос
/ 12 августа 2011

Вот мой код:

<code><?php
    require_once 'dbconnect.php';
    function execInBackground($cmd) { 
        if (substr(php_uname(), 0, 7) == "Windows"){ 
            pclose(popen("start /B ". $cmd, "r"));  
        } 
        else { 
            exec($cmd . " > /dev/null &");   
        } 
    } 

    if(isset($_GET['date'])){
        //CHECK LOCK
        $checkLock = "Select IS_FREE_LOCK('overnight') as `lock`;";
        $result = mysql_query($checkLock) or die(mysql_error());
        while($information = mysql_fetch_array($result)){
            if($information['lock'] == 0){
                die('Overnight is already running, please try again later.');
            }
        }
        execInBackground("php overnightQueries.php {$_GET['date']}");
        //echo "<pre>".print_r($output2, true)."
"; header ('Обновить: 3; url = index.php'); die ('выполнение запросов ...'); } еще { умереть («ПОЖАЛУЙСТА, УСТАНОВИТЬ ДАТУ»); } ?>

Я использую Windows-машину.

Я получаю следующие предупреждения:

Предупреждение: popen (start / B php overnightQueries.php 2011_08_12, r): нет ошибки в C: \ inetpub \ GTSA \ runOvernight.php в строке 5

И

Предупреждение: pclose () ожидает, что параметр 1 будет ресурсом, логическое значение указано в C: \ inetpub \ GTSA \ runOvernight.php в строке 5

1 Ответ

0 голосов
/ 12 августа 2011
$handle = popen("start /B ". $cmd, "r");  
if ($handle === FALSE) {
   die("Unable to execute $cmd");
}
pclose($handle);

popen возвращает false, если возникла проблема, которую вы слепо передаете в pclose, отсюда и вторая ошибка.

Что касается первой ошибки, проверьте, что PHP находится в пути вашей среды - вы можетенужно указать абсолютный путь к php.exe.

...