php脚本命令行执行问题

php script command line execution issue

我已经检查了这里的所有问题并用谷歌搜索了所有可用的问题。但是,没有任何帮助我调试它。

我有一个 php 脚本 log.php,我尝试从中 运行 本地功能,例如更新数据库和写入文件 log.txt。我正在尝试 运行 使用位于 system32 文件夹中的 bat 文件 log.bat 中的任务 windows 任务调度程序。但是,这个 运行 在浏览器上没问题,并更新了数据库和 log.txt 文件,但是在 bat 文件/命令行中,它执行了 php 文件,但数据库都没有更新log.txt 也没有更新。

log.php

<?php
    ini_set('display_errors', true);
    error_reporting('E_All');
    $date = date("Y-m-d H:i:s");
    $conn=mysqli_connect('localhost','root','')  or die("CONNECT Error : ".$conn->error);

    $chkuser=mysqli_query($conn,"SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'username')") or die("CHECK USER ERROR : ".$conn->error);

    if($chkuser){
        echo "<p>USER 'username'@'localhost' EXISTS";
    } else {
        $user=mysqli_query($conn,"CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';");
        ///  or die("CREATE USER Error : ".$conn->error);
        if($user) {
            echo "<p>USER 'username'@'localhost' with PASSWORD 'password' CREATED Successfully !</p>";
        } else {
            echo "<p>USER 'username'@'localhost' with  PASSWORD 'password' CREATION FAILED !!!</p>"; 
        }
    }

    $grant = mysqli_query($conn,"GRANT ALL ON db1.* TO 'username'@'localhost'"); 
    //     or die("GRANT PRIVILEGES Error : ".$conn->error);

    if($grant) {
        echo "<p>GRANT ALL PRIVILEGES TO 'avion'@'localhost' EXECUTED Successfully !</p>";
    } else {
        echo "<p>GRANT ALL PRIVILEGES TO 'username'@'localhost'   FAILED !</p>";
    }

    $dbase=mysqli_query($conn," CREATE DATABASE login"); 
    // or die("Table DATABASE Error : ".$conn->error);

    if($dbase) { 
        echo "<p>DATABASE login CREATED Successfully !</p>";
    } else {
        echo "<p> Database Create Error : ".$conn->error."</p>";
    }

    if(mysqli_query($conn,"SHOW DATABASES LIKE 'login'")) {
        mysqli_select_db($conn,'login');
        $table=mysqli_query($conn, "CREATE TABLE login (Date DATETIME, id INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(id))");
        // or die("Table Create Error : ".$conn->error);

        if($table) {
            echo "<p>TABLE login CREATED Successfully !</p>";
        } else {
            echo "<p> Table Create Error :".$conn->error."</p>";
        }

        $addlog=mysqli_query($conn,"INSERT INTO login (Date) VALUES('$date')");

        if($addlog) {
            echo "<p>TABLE log UpDATED !</p>";
        } else {
            echo "<p> Add Log Error :".$conn->error."</p>";
        }

        $msg=$date.PHP_EOL;

        if(is_file("log.txt")) {
            $fh=fopen("log.txt","a");
        } else {
            $fh=fopen("log.txt","w");
        }

        $fw=fwrite($fh, $msg);

        if($fw) {
            echo "<p>Log file Updated !</p>";
        } else {
            echo "<p> Log file Not Updated !</p>";
        }

    } else {
        echo "<p>Table Not Created Bcoz DATABASE login DOES NOT EXIST !</p>";   
    }

    mysqli_close($conn);
?>

log.bat

"C:\Program Files\EasyPHP-DevServer-14.1VC11\binaries\php\php_runningversion\php.exe" -f "C:\Program Files\EasyPHP-DevServer-14.1VC11\data\localweb\log\log.php" 

当 log.bat 显示所有成功消息时,控制台 window 中的输出。但数据库或 log.txt 未更新。

我做错了什么?

PS : 我还有其他两个 bat 文件 运行 在任务调度程序上运行良好。一个通过 Gmail 发送电子邮件,另一个通过第三方脚本发送短信。

我决定测试您的代码并发现了一些奇怪的地方。 但首先,这一行:

error_reporting('E_All');

实际上是这样的:

error_reporting(0);

是的,您正在禁用错误报告。 应该是:

error_reporting(E_ALL);

现在,奇怪的是 log.txt 文件实际上是在 C:\Users\RRadin\AppData\Local\VirtualStore 中创建的。 要解决此问题,请将 __DIR__ 添加到文件名。 像这样:

if(is_file(__DIR__."/log.txt")) {
    $fh=fopen(__DIR__."/log.txt","a");
} else {
    $fh=fopen(__DIR__."/log.txt","w");
}

很遗憾,我无法重现您的数据库更新问题。 我数据库中的 login table 更新得很好。 我执行了 6 次脚本,现在它有 6 条记录。