Windows/php pclose и popen проблема
Вот мой код:
<?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)."</pre>";
header('Refresh: 3; url=index.php');
die('running queries...');
}
else {
die('PLEASE SET DATE');
}
?>
Я использую машину 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 ответ
$handle = popen("start /B ". $cmd, "r");
if ($handle === FALSE) {
die("Unable to execute $cmd");
}
pclose($handle);
popen возвращает false, если возникла проблема, которую вы вслепую передаете в pclose, отсюда и вторая ошибка.
Что касается первой ошибки, проверьте, что PHP находится в пути вашей среды - вам может потребоваться указать абсолютный путь к php.exe.