【问题标题】:php script command line execution issuephp脚本命令行执行问题
【发布时间】:2016-12-20 17:38:18
【问题描述】:

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

我有一个 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 显示所有成功消息时,控制台窗口中的输出。但数据库或 log.txt 没有更新。

我在这里做错了什么?

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

【问题讨论】:

  • 你检查当前工作目录了吗?
  • 是的@RayRadin。目录很好。 log.php 和 log.txt 位于 /path/log/ 文件夹中,批处理文件 (log.bat) 位于 windows/system32/ 文件夹中。我正在 system32 文件夹内的命令行上运行 log.bat 文件

标签: php windows batch-file command-line-arguments taskscheduler


【解决方案1】:

我决定测试你的代码,发现有些奇怪。 但首先,这一行:

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 表更新得很好。 我执行了 6 次脚本,现在它有 6 条记录。

【讨论】:

  • 你成功了@Ray Radin。是 DIR 做的。至于 E_ALL,如果我不使用引号,它会在 cmd 窗口中引发错误“使用未定义的常量 E_ALL 假设为 'E_ALL'”。现在数据库正在更新。我不知道我在这之间尝试了什么,它开始工作了。非常感谢 log.txt 更新的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2013-01-14
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 2017-12-07
相关资源
最近更新 更多