windows — проблема с выполнением командной строки php-скрипта

Я проверил все вопросы здесь и погуглил все доступные вопросы по этому вопросу. Однако ничто не помогло мне отладить это.

У меня есть php скрипт log.php, из которого я пытаюсь запускать локальные функции, такие как обновление базы данных и запись в файл log.txt. Я пытаюсь запустить это с планировщиком задач Windows из файла bat log.bat, расположенного в папке system32. Однако это нормально работает в браузере и обновляет базу данных и файл 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, а другой — через сторонний скрипт.

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 записей.

1

Другие решения

Других решений пока нет …