Avatar billede Slettet bruger
09. oktober 2012 - 13:59 Der er 8 kommentarer og
1 løsning

Forskel på afvikling af PHP ved cron og bruger.

Hej Alle,

Jeg har et backup-script til min database, som inkluderes i en PHP-fil, som køres vha. af cron en gang i timen.

Scriptet gemmer en .sql med hele databasen. Mit problem er så, at når det køres vha. crontab stopper mit script ved inkluderingen og kører ikke backup-scriptet, mens det kører ganske glimrende når jeg kører det manuelt vha. min browser.

Er der nogle som kan give en god forklaring på dette, og hvorfor der er forskel på kørsel via. browser og crontab?

Hilsen Rasmus
Avatar billede arne_v Ekspert
10. oktober 2012 - 04:00 #1
Kan du vise lidt kode?
Avatar billede Slettet bruger
10. oktober 2012 - 07:08 #2
Dette er koden som bliver inkluderet, og som udelukkende virker hvis det er en browser der kører det:
<?php

error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', 'On');

backup_tables('localhost','',','');
backup_tables('localhost','','','');



function backup_tables($host,$user,$pass,$name,$tables = '*')
{
 
  $link = mysql_connect($host,$user,$pass);
  mysql_select_db($name,$link);
 
  //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);
  }
 
  //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.= "\n\n".$row2[1].";\n\n";
   
    for ($i = 0; $i < $num_fields; $i++)
    {
      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] = str_replace("\n","\\n",$row[$j]);
          if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
          if ($j<($num_fields-1)) { $return.= ','; }
        }
        $return.= ");\n";
      }
    }
    $return.="\n\n\n";
  }
 
  //save file
  $handle = fopen('../../admin/inc/backup/' . $name . "_" .time() . '.sql','w+');
  fwrite($handle,$return);
  fclose($handle);
}
echo "Saved DB backup";
?>
Avatar billede arne_v Ekspert
10. oktober 2012 - 18:13 #3
backup_tables('localhost','',','');  <------ mangler der ikke en ' her
backup_tables('localhost','','','');
Avatar billede Slettet bruger
10. oktober 2012 - 18:16 #4
Jo, men det er blot fordi jeg lige har slettet login-info før jeg postede. I koden er parametrene udfyldt, og står rigtigt.
Avatar billede arne_v Ekspert
11. oktober 2012 - 01:30 #5
er default dir anderledes saaledes at '../../admin/inc/backup/' peger forskelligt i de to sammenhaenge.
Avatar billede arne_v Ekspert
11. oktober 2012 - 01:31 #6
det var egentligt et ?
Avatar billede Slettet bruger
11. oktober 2012 - 08:08 #7
Det burde det ikke, jeg har netop forsøgt mig med en absolut sti, med samme resultat.
Avatar billede arne_v Ekspert
12. oktober 2012 - 03:58 #8
Hvis du er 112% sikker paa det, saa har jeg ikke flere ideer.
Avatar billede Slettet bruger
23. november 2012 - 06:17 #9
Fik ikke løst problemet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester