Windows/php pclose og popen problem

Indlæg af Hanne Mølgaard Plasc

Problem



Her er min kode:


<?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');

    }
?>


Jeg bruger en Windows-maskine.


Jeg får følgende advarsler:



  Advarsel: popen (start/B php overnightQueries.php 2011\_08\_12, r): Ingen fejl i C: \ inetpub \ GTSA \ runOvernight.php på linje 5



OG:



  Advarsel: pclose () forventer, at parameter 1 er ressource, boolean givet i C: \ inetpub \ GTSA \ runOvernight.php på linje 5


Bedste reference


$handle = popen("start /B ". $cmd, "r");  
if ($handle === FALSE) {
   die("Unable to execute $cmd");
}
pclose($handle);


popen returnerer falsk, hvis der var et problem, som du blindt passerer til pclose, dermed den anden fejl.


Hvad angår den første fejl, skal du kontrollere, at PHP er i dit miljøs sti - du skal muligvis angive en absolut sti til php.exe.