尝试使用php脚本将数据库从远程服务器自动下载和备份到本地服务器时,windows任务调度程序中出现错误



我正试图通过使用php file_get_contents并以ftp_connect频繁间隔连接到远程服务器来将远程数据库与本地机器自动同步。我正在使用本地机器上的windows任务调度程序。

我的php脚本在浏览器中运行得很好。但当任务调度器触发它时,命令提示符窗口会显示错误消息。

我的脚本是

<?php 
set_time_limit(0);
include('functions.php');
$root=$_SERVER['DOCUMENT_ROOT'];
$sitearr=array("indianchristians","mc","evaa","laveena","aita","kaazar","landshop");
$date=Date('Y-m-d H:i:s');
$vals="";
$msg="";
foreach($sitearr as $sa)
{
include('connnew.php');
if($sa=="landshop")
{
$remurl="dwggxtwa_landshoppe.sql";
$localurl="$root/$folder/Myadmin/download/sqlbackup/";

$backupserv=file_get_contents($url."/Myadmin/download/sqlbackup/backupserver.php");  
}
else{
$remurl="$db.sql";
$localurl="$root/$folder/admin/download/sqlbackup/";

$backupserv=file_get_contents($url."/admin/download/sqlbackup/backupserver.php");
}
$savedb=$db.".sql";
$localdb=$localurl.$savedb;
//          echo $localdb."<br>";
$conn = ftp_connect($ftp_server);
$login_result = ftp_login($conn, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn, true);
if($sa=="landshop"){
ftp_chdir($conn, '/public_html/Myadmin/download/sqlbackup/');
}else{
ftp_chdir($conn, '/admin/download/sqlbackup/');
}
if (ftp_get($conn, $localdb, $remurl, FTP_BINARY)) 
{
//                  echo "$sa saved locally<br>";
$query=$maindb->query("SHOW TABLES") or die("SHOW TABLES ERROR ".$maindb->error);

while($st=$query->fetch_array()){
$drop=$maindb->query("DROP TABLE $db.$st[0]");
//if($drop){echo "<br>$db.$st[0] DROPPED !<br>";}else{echo "<br>$db.$st[0] NOT DROPPED ! 
<br>";}
}
$templine = '';
// Read in entire file
$lines = file($localdb);
// Loop through each line
foreach ($lines as $line)
{
// Skip it if it's a comment
if (substr($line, 0, 2) == '--' || $line == '')
continue;
// Add this line to the current segment
$templine .= $line;
// If it has a semicolon at the end, it's the end of the query
if (substr(trim($line), -1, 1) == ';')
{
// Perform the query
if(!empty($templine)){
$maindb->query($templine) or die('Error performing query 
'<strong>' . $templine . '': ' . $maindb->error . '<br /><br />');
}
// Reset temp variable to empty
$templine = '';
}
}
ftp_close($conn);

$vals.="('$date','$sa'),";
$msg .="Updated $sa<br>";
}
}
if(!empty($vals)){
$vals=rtrim($vals,",");
$date=Date('Y-m-d H:i:s');
$link = mysqli_connect('127.0.0.1','admin','admin') or die ("Error connecting to 
mysql : " . mysqli_connect_errno($link).'rn');
$connect=new mysqli('127.0.0.1','admin','admin','admin') or die("Database error 
:".$connect->error);

$checktab=$connect->query("SELECT * FROM backuptimeline");
if(!$checktab)
{
$createsql = "CREATE TABLE backuptimeline
(
id int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
Date datetime,
site varchar(500)
)";
$createtab=$connect->query($createsql) or die($connect->error);
}
$butlsql="INSERT INTO backuptimeline (Date,site) VALUES $vals";
//              echo $butlsql."<br>";
$insbu=$connect->query($butlsql)or die($connect->error);
if($insbu){
//sendEmailAlerts("anitgopinath@gmail.com","anitgopinath@gmail.com","DB 
$sa Backed Up","All DB $sa backed up at $date");
$msg.="<br>Timeline Updated<br>";
}       
else{
$msg.= "<br>Timeline Not Updated<br>";
}   
echo $msg."<br>";
sendEmailAlerts("anitgopinath@gmail.com","anitgopinath@gmail.com","DBs Back Up 
Results",$msg);
}else{
echo $msg."<br>";
sendEmailAlerts("anitgopinath@gmail.com","anitgopinath@gmail.com","DBs Back Up 
Failed",'DBs Back Up Failed');
}
?>

任务调度器条目;

行动中的程序/脚本字段:

"C: \Program Files(x86(\EasyHP-DevServer-14.1VC9\bilitation\php\php_runningversion\php.exe">

参数字段

"C: \Program Files(x86(\EasyHP-DevServer-14.1VC9\data\localweb\Admin\download\autobackup_task_scheduler.php">

一些错误消息

警告:ftp_get(/mariary/admin/download/sqlbackup/rotiraa1_mc.sql\EasyHP-DevServer-14.1VC9\data\localweb\Admin\download\autobackup_task_scheduler.php,第35行

警告:ftp_get((:打开时出错/C:\Program中的marriay/admin/download/sqlbackup/rotiraa1_mc.sql文件(x86(\EasyHP-DevServer-14.1VC9\data\localweb\Admin\download\autobackup_task_scheduler.php在第35行PHP警告:file_get_contents((:SSL操作失败代码为1。OpenSSL错误消息:错误:1407742E:SSL例程:中的SSL23_GET_SERVER_HELLO:tlsv1警报协议版本C: \程序文件(x86(\EasyHP-DevServer-14.1VC9\data\localweb\Admin\download\autobackup_task_scheduler.php在线21

警告:file_get_contents((:SSL操作失败,代码为1。OpenSSL错误消息:错误:1407742E:SSL例程:中的SSL23_GET_SERVER_HELLO:tlsv1警报协议版本C: \程序文件(x86(\EasyHP-DevServer-14.1VC9\data\localweb\Admin\download\autobackup_task_scheduler.php在第21行PHP警告:file_get_contents((:无法启用加密在C:\Program文件中(x86(\EasyHP-DevServer-14.1VC9\data\localweb\Admin\download\autobackup_task_scheduler.php在线21

警告:file_get_contents((:无法在C:\Program中启用加密文件(x86(\EasyHP-DevServer-14.1VC9\data\localweb\Admin\download\autobackup_task_scheduler.php在第21行PHP警告:文件集内容(https://www.evaa-ethnix.com/admin/download/sqlbackup/backupserver.php):无法打开流:C:\Program Files中的操作失败(x86(\EasyHP-DevServer-14.1VC9\data\localweb\Admin\download\autobackup_task_scheduler.php在线21

警告:文件集内容(https://www.evaa-ethnix.com/admin/download/sqlbackup/backupserver.php):f

我也尝试过使用批处理文件(.bat(。我把它放在system32文件夹中并尝试了一下。仍然会出现同样的错误。

我无法确定这是路径问题还是其他问题。我在这件事上已经崩溃了很长时间了。

任何帮助都将不胜感激。

经过多次谷歌搜索和头脑风暴,我发现我有两个问题:

  1. PHP file_get_contents正在创建SSL错误。所以我用Curl替换了它,如下所示;

    function file_get_contents_curl( $url ) {
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_AUTOREFERER, TRUE );
    curl_setopt( $ch, CURLOPT_HEADER, 0 );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, TRUE );
    $data = curl_exec( $ch );
    curl_close( $ch );
    return $data;
    }
    
  2. 路径本地url路径ftp_get((以变量$root开头,该变量具有

$root=$_SERVER['DOCUMENT_root'];

Windows任务计划程序没有看到这一点。所以我简单地将$root替换为完整路径

C:\Program Files(x86(/EasyPHP-DevServer-14.1VC9/data/localweb/$folder

我所有的问题都消失了!我的系统正在按设定的时间表将远程数据库自动同步到本地数据库。我现在是个快乐的人!:(

最新更新