• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP Warnung durch Crontab

noxx2

Neues Mitglied
Hallo

ich habe auf meinem Webserver folgenden Crontab eingerichtet:
Code:
/usr/bin/php -f /var/www/web99/files/mysql.php

Ich bekomme nun per Mail immer folgende Fehlermeldung, anscheinend
ist der Pfad oder etwas anderes verkehrt:
PHP Warning: file(html/Archive/ARC-24.10.2012.txt): failed to open stream: No such file or directory in /var/www/web99/files/mysql.php on line 12
<u><b>Temperaturen vom 24.10.2012:</b></u><br>Min =<br>Max =<br>Mittelwert =0.00<br><br><u><b>Luftfeuchtigkeit vom 24.10.2012:</b></u><br>Min =<br>Max =<br>Mittelwert =0.00<br><br><u><b>Windgeschwindigkeiten am 24.10.2012:</b></u><br>Max =<br>Mittelwert =0.00<br><br><u><b>Böhen am 24.10.2012:</b></u><br>Max =<br>Mittelwert =0.00<br><br><u><b>Regenmenge am 24.10.2012:</b></u><br>Gesamt =0PHP Warning: mysql_query(): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /var/www/web99/files/mysql.php on line 168
PHP Warning: mysql_query(): A link to the server could not be established in /var/www/web99/files/mysql.php on line 168
<p>Abfrage erfolgreich!</p>

Der CRONTAB läuft so ab: CRONTAB --> MYSQL.PHP --> ARC-2012-10-24.TXT --> MYSQL-DATENBANK

Also Crontab ruft mysql.php auf, diese liest eine TXT Datei ein und trägt Daten in eine mySQL Datenbank.

Der Anfang der PHP Datei sieht so aus, 3 Pfade habe ich nun getestet, Änderungen bringe alle nichts.

PHP:
<?php
// ##################################
// # Daten aus ARC-***.txt auslesen #
// ##################################

set_time_limit(0);
$row = 1;

$datum = date("d.m.Y", strtotime("-1 days"));                        // Datum gestern

// $inhalt = file("../html/Archive/ARC-".$datum.".txt");
// $inhalt = file($_SERVER["DOCUMENT_ROOT"] ."html/Archive/ARC-".  $datum . ".txt");

$inhalt  = file("/var/www/web99/Archive/ARC-".$datum.".txt");
....
..
.

Evtl kann mir einer einen Tipp geben wie es geht.

Danke
 
PHP Warning: file(html/Archive/ARC-24.10.2012.txt): failed to open stream: No such file or directory in /var/www/web99/files/mysql.php on line 12
Ist ja eigentlich eine sehr eindeutige Fehlermeldung, oder?

Ich bezweifele auch, dass html/Archive/ARC-24.10.2012.txt der richtige Pfad ist. Außderdem passt die Fehlermeldung nicht zu dem Script. Wenn der richtige Pfad benutzt wird und es immer noch nicht klappt, könnte aus auch an den Dateirechten liegen.
 
Habe ja auch die anderen Pfade probiert

PHP:
$inhalt = file("../html/Archive/ARC-".$datum.".txt");
PHP:
$inhalt = file($_SERVER["DOCUMENT_ROOT"] ."html/Archive/ARC-". $datum . ".txt");
PHP:
$inhalt = file("/var/www/web99/Archive/ARC-".$datum.".txt");

Bin da echt ratlos :?: :-( :?:

Hier mal ein Bild aus der Struktur:
 
1. Versuch kann nicht gehen, weil per Crontab relative Pfade nicht brauchbar sind
2. Versuch kann nicht gehen, weil per Crontab keine $_SERVER-Variablen existieren
3. Versuch sollte eigentlich gehen, wenn die Datei existiert und die Dateirechte in Ordnung sind
 
Also, die Datei ist definiv dort, siehe Bild.


Versuch 3 hatte ich zuletzt probiert, ging nicht.

Dateirechte auf die *.txt (/html/Archive/ARC-2012-10-24.txt) und (/files/mysql.php): 644


Edit

Sehe gerade einen Fehler.... grr

Mal gucken obs dann geht

/ARC-2012-10-24.txt
/ARC-2012.10.24.txt
 
:)

Daten bzw Datei wird nun gefunden.

Auf ein Problem folgt dann das nächste

Habe vorher das php-script lokal getestet mit, XAMPP lief ohne
Probleme. Daten wurden eingelesen und sauber in meine mySQL-DB
eingetragen. Gleichzeitig folge zur Prüfung auch eine Ausgabe im Browser:

Temperaturen vom 2012-10-24:
Min =10.5
Max =13.1
Mittelwert =11.91

Luftfeuchtigkeit vom 2012-10-24:
Min =90
Max =96
Mittelwert =93.97

Windgeschwindigkeiten am 2012-10-24:
Max =0
Mittelwert =0.00

Böhen am 2012-10-24:
Max =0
Mittelwert =0.00

Regenmenge am 2012-10-24:
Gesamt =6.3

Abfrage erfolgreich!


Nun habe ich die selbe php Datei (nur mit anderem Zugangsdaten/Verzeichnissen) auf meinem
Webserver probiert. Dort gibt dann auf einmal keine Werte :?:.

Browserausgabe sieht so aus:

Temperaturen vom 2012-10-24:
Min =
Max =
Mittelwert =0.00

Luftfeuchtigkeit vom 2012-10-24:
Min =
Max =
Mittelwert =0.00

Windgeschwindigkeiten am 2012-10-24:
Max =
Mittelwert =0.00

Böhen am 2012-10-24:
Max =
Mittelwert =0.00

Regenmenge am 2012-10-24:
Gesamt =0

Abfrage erfolgreich!

und in der mySQL-DB (Webserver) stehen nur Nullen :?:


PHP:
// ##################################
// # Daten aus ARC-***.txt auslesen #
// ##################################

set_time_limit(0);
$row = 1;

$datum = date("Y-m-d", strtotime("-1 days"));                        // Datum gestern

// $inhalt = file("../html/Archive/ARC-".$datum.".txt");
//$inhalt = file($_SERVER["DOCUMENT_ROOT"] ."html/Archive/ARC-".  $datum . ".txt");

$inhalt  = file("/var/www/web99/Archive/ARC-".$datum.".txt");

unset($inhalt[0]);                                // Lösche Zeile 1
unset($inhalt[1]);                                // Lösche Zeile 2

$match1 = "/\t/";
$match2 = "/ /";

$inhalt = preg_replace($match1,',',$inhalt);    // Ersetze TAB durch Komma
$inhalt = preg_replace($match2,',',$inhalt);    // Ersetze Leerzeichen durch Komma

$num = count($inhalt);                            // Grösse vom Array $inhalt

for ($i=0; $i <= $num-1; $i++)                    // 1-Dim Array $inhalt --> 2-Dim Array $data
    {
    $data[$i] = explode (",", $inhalt[$i+2]);    
    }

for ($j=0; $j <=$num-1; $j++)
    {
      $tab_temp[$j]     = $data[$j][2];            // Temp
      $tab_feuchte[$j]     = $data[$j][5];            // Feuchte
      $tab_wind[$j]     = $data[$j][7];            // Wind
      $tab_wind_hi[$j]     = $data[$j][8];            // Wind
      $tab_regen[$j]     = $data[$j][10];        // Regen
    }
    
// #######################
// # MIN MAX MITTELWERTE #
// #######################

// Temperaturen
echo "<u><b>Temperaturen vom ".$datum.":</b></u><br>";

$min_temp = min($tab_temp);
echo "Min =".$min_temp;

echo "<br>";

$max_temp = max($tab_temp);
echo "Max =".$max_temp;

echo "<br>";

$mittel_temp = (array_sum ($tab_temp) - min ($tab_temp) - max ($tab_temp)) / (count($tab_temp) - 2);
$mittel_temp = sprintf("%01.2f", round($mittel_temp , 2));  
echo "Mittelwert =".$mittel_temp; 

// Luftfeuchtigkeit
echo "<br><br>";
echo "<u><b>Luftfeuchtigkeit vom ".$datum.":</b></u><br>";

$min_feuchte = min($tab_feuchte);
echo "Min =".$min_feuchte;

echo "<br>";

$max_feuchte = max($tab_feuchte);
echo "Max =".$max_feuchte;

echo "<br>";

$mittel_feuchte = (array_sum ($tab_feuchte) - min ($tab_feuchte) - max ($tab_feuchte)) / (count($tab_feuchte) - 2);
$mittel_feuchte = sprintf("%01.2f", round($mittel_feuchte , 2)); 
echo "Mittelwert =".$mittel_feuchte;
 
// Wind
echo "<br><br>";
echo "<u><b>Windgeschwindigkeiten am ".$datum.":</b></u><br>";
$max_wind = max ($tab_wind);
$mittel_wind = (array_sum ($tab_wind) - min ($tab_wind) - max ($tab_wind)) / (count($tab_wind) - 2);;
$mittel_wind = sprintf("%01.2f", round($mittel_wind , 2));
echo "Max =".$max_wind;
echo "<br>";
echo "Mittelwert =".$mittel_wind;

// Böhen
echo "<br><br>";
echo "<u><b>Böhen am ".$datum.":</b></u><br>";
$max_wind_hi = max ($tab_wind_hi);
$mittel_wind_hi = (array_sum ($tab_wind_hi) - min ($tab_wind_hi) - max ($tab_wind_hi)) / (count($tab_wind_hi) - 2);;
$mittel_wind_hi = sprintf("%01.2f", round($mittel_wind_hi , 2));
echo "Max =".$max_wind_hi;
echo "<br>";
echo "Mittelwert =".$mittel_wind_hi;

// Regen
echo "<br><br>";
echo "<u><b>Regenmenge am ".$datum.":</b></u><br>";
$ges_regen = array_sum ($tab_regen);
echo "Gesamt =".$ges_regen;

// ############################
// # Daten in mySQL eintragen #
// ############################

// Zugangsdaten
$datenbank = "db";
$tabelle = "tabelle";

$host = "db_xx_server.de";
$user = "user";
$pass = "1234567890";

// Datenbank verbinden
$db = @mysqli_connect($host, $user, $pass) or die("Verbindung zu MySQL gescheitert");
mysqli_set_charset($db, "utf8");
@mysqli_select_db($db, $datenbank) or die("Datenbankzugriff gescheitert!");


// Bezeichnung der Spalten

$name_spalte_0 = "Datum";

$name_spalte_a = "Temp_Min";
$name_spalte_b = "Temp_Max";
$name_spalte_c = "Temp_Mittel";

$name_spalte_d = "Feuchte_Min";
$name_spalte_e = "Feuchte_Max";
$name_spalte_f = "Feuchte_Mittel";

$name_spalte_g = "Wind_Max";
$name_spalte_h = "Wind_Mittel";

$name_spalte_i = "Boehe_Max";
$name_spalte_j = "Boehe_Mittel";

$name_spalte_k = "Regen_Ges";


// Werte der Spalten

$wert_spalte_0 = $datum;

$wert_spalte_a = $min_temp;
$wert_spalte_b = $max_temp;
$wert_spalte_c = $mittel_temp;

$wert_spalte_d = $min_feuchte;
$wert_spalte_e = $max_feuchte;
$wert_spalte_f = $mittel_feuchte;

$wert_spalte_g = $max_wind;
$wert_spalte_h = $mittel_wind;

$wert_spalte_i = $max_wind_hi;
$wert_spalte_j = $mittel_wind_hi;

$wert_spalte_k = $ges_regen;


// Daten eintragen
$sql  = "INSERT INTO $tabelle";
$sql .=    "($name_spalte_0,$name_spalte_a,$name_spalte_b,$name_spalte_c,$name_spalte_d,$name_spalte_e,$name_spalte_f,$name_spalte_g,$name_spalte_h,$name_spalte_i,$name_spalte_j,$name_spalte_k)";
$sql .= " VALUES ('$wert_spalte_0','$wert_spalte_a', '$wert_spalte_b', '$wert_spalte_c', '$wert_spalte_d', '$wert_spalte_e', '$wert_spalte_f', '$wert_spalte_g', '$wert_spalte_h', '$wert_spalte_i', '$wert_spalte_j', '$wert_spalte_k')";
mysql_query ($sql);

// Daten auf Eintrag prüfen
if (mysqli_query($db, $sql)) {
echo "<p>Abfrage erfolgreich!</p>";
} else {
echo "<p>Abfrage nicht erfolgreich!</p>";
}

// Verbindung beenden
mysqli_close($db);
 
Was sollen wir jetzt dazu sagen? Wir kennen das Script nicht, weiß der Geier, wo da was schiefläuft. Wird den überhaupt was in die DB geschrieben? Fehlermeldungen?

Nachtrag: Mache dich mal schlau über den Parameter -c, also nicht nur -f. Ich vermute, es stehen dir nicht wirklich alle erforderlichen Extension zur Verfügung. Siehe http://www.php.net/manual/de/features.commandline.options.php

Noch ein Tipp:
/usr/bin/php -i > info.txt
eingeben und dann mal in die info.txt reinsehen, ob auch die MySQL-Extension enabled ist
 
Zuletzt bearbeitet von einem Moderator:
@bdt600
die php datei ist auf dem server, die habe ich manuell ausgeführt, nicht per cronjob.
das script ist am ende der ersten seite.

@Sentence
var_dump($inhalt) ergibt --> bool(false)
 
@bdt600
die php datei ist auf dem server, die habe ich manuell ausgeführt, nicht per cronjob.
Ist doch wurscht, auf jeden Fall nicht über den Webserver.

var_dump($inhalt) ergibt --> bool(false)
Und was sagt dir das? Muss man jetzt hier wirklich die Doku zitieren????
Gibt die Datei in einem Array zurück. Jedes Element des Arrays entspricht einer Zeile in der Datei, ohne dass das Zeilenende entfernt wird. Im Fehlerfall gibt file() FALSE zurück.
Ich werde das Gefühl nicht los, dass du dir hier alles vorkauen lässt und nicht selber mal mitarbeitest
 
War ein Fehler im Pfad, obwohl keine Fehlermeldung kam. Nunja, nun gehts.
Danke

Falsch:
$inhalt = file("/var/www/web99/Archive/ARC-".$datum.".txt");

Richtig:
$inhalt = file("/var/www/web99/html/Archive/ARC-".$datum.".txt");
 
Kam wirklich keine Fehlermeldung.
Die Daten werden nun sauber aus der TXT ausgelesen, der Cronjon läuft und die Daten landen auch in meiner mySQL-DB.

Er spuckt aber trotzdem eine Warnung aus:

PHP Warning: mysql_query(): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /var/www/web99/files/mysql.php on line 170PHP Warning: mysql_query(): A link to the server could not be established in
/var/www/web99/files/mysql.php on line 170<p>Abfrage erfolgreich!

Kann man das ignorieren? Laufen tut's ja! In Zeile 170 steht: mysql_query ($sql);
 
Kann man das ignorieren?
Natürlich kann man jede Fehlermeldung ignorieren, man muss nur den Mut zur Lücke haben.

PHP:
mysql_query ($sql);

// Daten auf Eintrag prüfen
if (mysqli_query($db, $sql)) {
echo "<p>Abfrage erfolgreich!</p>";
} else {
echo "<p>Abfrage nicht erfolgreich!</p>";
}
Da fällt dir wirklich nichts auf????

Nachtrag: Was versprichst du dir eigentlich von den echo-Ausgaben bei einem Script, dass per Cron laufen soll? Ich würde mir da eher ein Log-File schreiben und/oder eine Mail an mich senden.
 
Zuletzt bearbeitet von einem Moderator:
Ohne Kommentar und Leerzeile:
PHP:
mysql_query ($sql);
if (mysqli_query($db, $sql))
Wenn dir jetzt immer noch nichts auffällt, ist dir nicht mehr zu helfen.
 
Ja, ich weiss es nicht. Ich sehe anscheinend den Wald vor lauter Bäumen nicht.
Ich weiß auch nicht warum da etwas verkehrt ist, weil dieser Fehler NUR auftritt
wenn das Script per Cronjob auftaucht. Führe ich das Script auf dem Webserver
manuell aus, läufts so durch.

Evtl ist die Abfrage falsch, könnte vielleicht auch so sein...
PHP:
if($sql == true)
   {
   echo "Abfrage erfolgreich!";
   }
else
   {
   echo "Abfrage nicht erfolgreich!";
   }
... aber ich weiß es wirklich nicht.

Werde die echos nun erstmal löschen.

Gruss und sorry fürs nerven.
 
Zurück
Oben