2014-11-25 3 views
-1

Я пытаюсь запустить php-файл через cron каждые 4 дня. Он пытается создать резервные копии файлов и базы данных.Ошибки в файле PHP во время выполнения задания cron

#!/usr/bin/php -q 
<?php 
if($filecount<=4) 
{ 
$host = "internal-db.host.gridserver.com"; //host name 
$username = "user"; //username 
$password = "Password"; // your password 
$dbname = "Dataabse"; // database name 

$dir = "/backup-all"; 
if(!(file_exists($dir))) { 

} 

$zip = new ZipArchive(); 
//backup_tables($host, $username, $password, $dbname); 


/* backup the db OR just a table */ 
function backup_tables1($host,$user,$pass,$name,$tables = '*') 
{ 
$con = mysql_connect($host,$user,$pass); 
mysql_select_db($name,$con); 

//get all of the tables 
if($tables == '*') 
{ 
$tables = array(); 
$result = mysql_query('SHOW TABLES'); 
while($row = mysql_fetch_row($result)) 
{ 
$tables[] = $row[0]; 
} 
} 
else 
{ 
$tables = is_array($tables) ? $tables : explode(',',$tables); 
} 
$return = ""; 

//cycle through 
foreach($tables as $table) 
{ 
$result = mysql_query('SELECT * FROM '.$table); 
$num_fields = mysql_num_fields($result); 
$return.= 'DROP TABLE '.$table.';'; 
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); 
$return.= "nn".$row2[1].";nn"; 

while($row = mysql_fetch_row($result)) 
{ 
$return.= 'INSERT INTO '.$table.' VALUES('; 
for($j=0; $j<$num_fields; $j++) 
{ 
$row[$j] = addslashes($row[$j]); 
$row[$j] = preg_replace("#n#","n",$row[$j]); 
if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; } 
if ($j<($num_fields-1)) { $return.= ','; } 
} 
$return.= ");n"; 
} 
$return.="nnn"; 
} 

//save file 
$handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); 
fwrite($handle,$return); 
fclose($handle); 
} 



if (glob("*.sql") != false) 
{ 
$filecount = count(glob("*.sql")); 
$arr_file = glob("*.sql"); 

for($j=0;$j<$filecount;$j++) 
{ 
$res = $zip->open($arr_file[$j].".zip", ZipArchive::CREATE); 
if ($res === TRUE) 
{ 
$zip->addFile($arr_file[$j]); 
$zip->close(); 
unlink($arr_file[$j]); 
} 
} 
} 



//get the current folder name-start 
$path = dirname($_SERVER['PHP_SELF']); 
$position = strrpos($path,'/') + 1; 
$folder_name = substr($path,$position); 
//get the current folder name-end 



$zipname = date('Y/m/d'); 
$str = "figata-".$zipname.".zip"; 
$str = str_replace("/", "-", $str); 


// open archive 
if ($zip->open($str, ZIPARCHIVE::CREATE) !== TRUE) { 
die ("Could not open archive"); 
} 
// initialize an iterator 
// pass it the directory to be processed 
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("/home/161441/users/.home/domains/growing-your-business.org/html/")); 
// iterate over the directory 
// add each file found to the archive 

foreach ($iterator as $key=>$value) { 
if(strstr(realpath($key), "figata") == FALSE) { 
$zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key"); 
} 

} 
// close and save archive 
$zip->close(); 


if(glob("*.sql.zip") != false) { 
$filecount = count(glob("*.sql.zip")); 
$arr_file = glob("*.sql.zip"); 

for($j=0;$j<$filecount;$j++) 
{ 
unlink($arr_file[$j]); 
} 
} 


//get the array of zip files 
if(glob("*.zip") != false) { 
$arr_zip = glob("*.zip"); 
} 

//copy the backup zip file to site-backup-figata folder 
foreach ($arr_zip as $key => $value) { // **Line 142** 
if (strstr($value, "figata")) { 
$delete_zip[] = $value; 
copy("$value", "$dir/$value"); 
} 
} 


for ($i=0; $i < count($delete_zip); $i++) { 
unlink($delete_zip[$i]); 
} 

$dir ="home/domains/growing-your-business.org/backup-growing/";//dir absolute path 
$interval = strtotime('-96 hours');//files older than 24hours 

foreach (glob($dir."*.zip") as $file) // **Line 157** 
    //delete if older 
    if (filemtime($file) <= $interval) unlink($file); 

echo '<script>alert("Archive created successfully.")</script>'; 
} 
else 
{ 
    echo '<script>alert("Archive Not created successfully.")</script>'; 
} 
?> 

Когда он работает через http, функция работает правильно. Но когда он проходит через Cron, я получаю следующие ошибки:

Warning: Invalid argument supplied for foreach() in /nfs/c05/h05/mnt/161441/domains/growing-your-business.org/html/backup-growing.php on line 142 

Warning: Invalid argument supplied for foreach() in /nfs/c05/h05/mnt/161441/domains/growing-your-business.org/html/backup-growing.php on line 157 
<script>alert("Archive created successfully.")</script> 

Может ли кто-нибудь помочь мне в этом?

Спасибо заранее.

+0

вы можете выделить какие линии 142 и 157 –

+0

Можете ли вы попробовать и выравнивал код ?. Мне очень трудно его прочитать ... –

+0

На первом сайте это выглядит как проблема с путями. Поскольку CLI запускается из другого «рабочего каталога», то веб-сервер. Вы должны запустить сценарий из CLI вручную и поместить некоторые отладочные операторы в соответствующие места, например. 'Print_r ($ итератор);'. – giorgio

ответ

0

Для линии 142

вы либо проверить, что $arr_zip Исеть первый, или определить его ..

$arr_zip = array(); //create an empty array 

//get the array of zip files 
if(glob("*.zip") != false) { 
    $arr_zip = glob("*.zip"); 
} 

//copy the backup zip file to site-backup-figata folder 
foreach ($arr_zip as $key => $value) { // **Line 142** 
    if (strstr($value, "figata")) { 
     $delete_zip[] = $value; 
     copy("$value", "$dir/$value"); 
    } 
} 

или

if(isset($arr_zip)) 
{ 
    foreach ($arr_zip as $key => $value) { // **Line 142** 
     if (strstr($value, "figata")) { 
      $delete_zip[] = $value; 
      copy("$value", "$dir/$value"); 
     } 
    } 
} 

я предпочел бы его определения, а не проверять его Исеть.

Для линии 157

Довольно много повторить, как вы линии 142:

$files = array(); 

if(glob($dir."*.zip") != false) { 
    $files = glob($dir."*.zip"); 
} 
foreach ($files as $file) // **Line 157** 
Смежные вопросы