Proc_Open в PHP и Pipes - PullRequest
       22

Proc_Open в PHP и Pipes

1 голос
/ 31 мая 2011

Это исходный код для управления minecraftserver через веб-интерфейс с сервером MySQL. Все работает нормально, кроме строки 29, которая, кажется, не выполняется. там просто ничего не появляется в серверах cin. Также ничего не происходит ... У кого-нибудь есть идея, почему это так?

<?php
    echo("Successfully Loaded.\n");
    include("../src/func.php");
    $descriptorspec = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("file", "../log/server.log", "a"));
    $cwd = '';
    $outpt = "../log/server.log";
    $ru_file = "runlevel.state";
    echo("Starting Server...\n");
    $process = proc_open('java -Xincgc -Xmx640M -jar craftbukkit.jar', $descriptorspec, $pipes, $cwd, $_ENV);
    $log_handle = fopen($outpt,"w");
    echo("Starting Daemon...\n");
    $run = 1;
    while($run == 1)
    {
        $handle = fopen($ru_file,"r");
        $run = (int)fread($handle, filesize($ru_file));
        fclose($handle);
        $mysqli = mopen();
        $query = $mysqli -> prepare("SELECT ID, Command, Urheber FROM tbl_cmds WHERE passed = '0'");
        echo($mysqli->error);
        $query -> execute();
        $query -> store_result();
        $query -> bind_result($id, $command, $who);
        while($query -> fetch())
        {
            fwrite($pipes[0], $command);
            $datum = date("d.m.Y H:i:s",time());
            echo("[$datum] Executed command '$command' by User with ID ($who)\n");
            $mysqli2 = mopen();
            $query2 = $mysqli2 -> prepare("UPDATE tbl_cmds SET passed = 1 WHERE ID = ?");
            echo($mysqli2->error);
            $query2 -> bind_param("i", $id);
            $query2 -> execute();
        }
    }
    echo("Daemon Stopped...\n");
    fclose($pipes[0]);
    fclose($log_handle);
    proc_close($process);
    echo("Server Stopped...\n");
    echo("Exiting with code 0x0...\n");
?>
...