Witam,
Dostało mi się "w spadku" zadanie (w sumie tylko dokończenie). Muszę stworzyć skrypt który będzie pobierał z różnych serwerów pliki XML, a następnie zapisywał je na swoim "domowym" serwerze. Udało mi się napisać taki skrypt który pobiera z różnych wcześniej zdefiniowanych miejsc pliki XML, pobiera je i zapisuje u siebie. Kolejnym krokiem jest zapis do bazy (MySQL). Skrypt ogólnie dział, ale czaasami mu się zdarzy nawalić (najczęściej kiedy pliki XML mają jakieś błędy).
Kod mojego skryptu wygląda tak:
<?
set_time_limit(60000000000000000);
include"funkcje.php";
function pobierz_xml($co, $filename){
echo "Pobieranie pliku: ".$co."<br>--- zapis w: ".$filename."<br>";
$filename2=$filename.".tmp";
$data=file_get_contents($co);
$fp2=@fopen($filename2, 'w');
$result=fwrite($fp2, $data);
fclose($fp2);
if ($result) {
echo "Zakończono pobieranie pliku.Trwa formatowanie pliku...<br>";
$fp2=@fopen($filename2, 'r');
$fp1=@fopen($filename, 'w');
while (!feof($fp2)) {
$data=fgets($fp2, 1024);
$data = str_replace(">Go&Play<", "><![CDATA[Go&Play]]><", $data); // olimp.sklep.pl
$data = str_replace(">http://www.proomo.pl/grafika/produkty/bc1400v&m.jpg<", "><![CDATA[http://www.proomo.pl/grafika/produkty/bc1400v&m.jpg]]><", $data); // proomo.eu
if ($data==chr(13).chr(10)) $data=""; //proomo.eu
$data = str_replace("V&M<", "V and M<", $data);
$data = str_replace("V&S<", "V and S<", $data);
$data = str_replace("C&C<", "C and C<", $data);
$data = str_replace("Wet&Dry<", "Wet and Dry<", $data);
$data = str_replace("Bed&Sofa<", "Bed and Sofa<", $data);
$data = str_replace("Click&Go", "Click and Go", $data);
//$data = str_replace("\"", """, $data);
$data = str_replace("&", " ", $data);
//$data = str_replace(" < ", " ", $data);
//$data = str_replace(" > ", "", $data);
$data = str_replace("´", " ", $data);
$data = str_replace("'", " ", $data);
$data = str_replace("‘", " ", $data);
$data = str_replace("’", " ", $data);
$data = str_replace("“", " ", $data);
$data = str_replace("”", " ", $data);
$data=ascii_only($data);
$data6zn=substr(trim($data), 0, 6);
if ($data6zn!="<pasaz" && $data6zn!="<loadO" && $data6zn!="</pasa" && $data6zn!="</load")
fwrite($fp1, $data);
}
fclose($fp2);
fclose($fp1);
unlink($filename2);
echo "Zakonczono formatowanie pliku...<br>";
return true;
} else {
echo "Błąd: Nie udalo sie pobrać: ".$co." !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1<br>";
return false;
}
}
$czas = explode(" ",microtime());
$poczatek = $czas[1] + $czas[0];
echo "<head>";
echo "<title>UPDATE Krok 1</title>";
echo "</head><body>";
echo "Praca wre....<br>";
echo "<br>";
$lockfile="/var/www/sc/tmp/aktualizacja_lockfile.tmp";
if (file_exists($lockfile)) {
$fmdate=filemtime($lockfile);
$diff=time()-$fmdate;
if ($diff>43200) {
echo "<B>Błąd: DZIAŁANIE SKRYPTU NA INNEJ KONSOLI ZOSTAŁO PRZERWANE!</B><br>Było to możliwe, ponieważ skrypt został uruchomiony ponad 12 godz. temu....<br><br>";
unlink($lockfile);
}
}
if (file_exists($lockfile)) {
$fmdate=filemtime($lockfile);
$diff=time()-$fmdate;
echo "<b>Błąd: SKRYPT OD ".$diff." SEKUND PRACUJE NA INNEJ KONSOLI! </b><br>Spróbuj ponownie za kilka minut!!! <br><br>";
die;
}
$fp_lock=@fopen($lockfile, 'w+');
if ($fp_lock) {
$ip = getenv('REMOTE_ADDR');
$data=date('Y/m/d H:i:s')." IP:".$ip."\n";
fwrite($fp_lock, $data);
fclose($fp_lock);
}else{
echo "<b>Błąd: NIE UDAŁO SIĘ UZYSKAĆ DOSTĘPU DO DYSKU w celu utworzenia pliku! </b><br><br>";
die;
}
set_time_limit(90000000);
echo "Maksymalny czas pracy skryptu: ";
$max=ini_get('max_execution_time');
echo "$max s.<br>";
flush();
$id = (int)$_GET["id"];
include"config.php";
if ($kkkkkkk=="") {
if ($id)
$result_sklep=mysql_query("SELECT id, nazwa, login, xml_url, xml_typ FROM t_sklep WHERE id = '$id' AND dostepny='1'", $db);
else
$result_sklep=mysql_query("SELECT id, nazwa, login, xml_url, xml_typ FROM t_sklep WHERE dostepny='1'", $db);
while ($row_sklep=mysql_fetch_assoc($result_sklep)) {
$sklep_id=$row_sklep['id'];
$sklep_nazwa=$row_sklep['nazwa'];
$sklep_login=$row_sklep['login'];
$sklep_xmlurl=$row_sklep['xml_url'];
$sklep_xmltyp=$row_sklep['xml_typ'];
echo "<br>**** SKLEP: ".$sklep_login."<br>";
flush();
$dir="/var/www/p/s/data/".$sklep_login."/";
if (!is_dir($dir)) {
mkdir($dir, 0777);
echo "*** Utworzono katalog ".$dir."<br>";
}
if (is_dir($dir)) {
$filename=$dir."update.xml";
pobierz_xml($sklep_xmlurl, $filename);
}else{
echo "*** UWAGA: BRAK KATALOGU: ".$dir."<br>";
}
$czas = explode(" ",microtime());
$koniec = $czas[1] + $czas[0];
echo sprintf("%0.5f",$koniec-$poczatek)." s.<br>";
flush();
}
echo "<br>Zakończono etap 1<br>";
}else{
echo "UWAGA: Nie udało się nawiązać połączenia z bazą danych!<br>";
}
unlink($lockfile);
?>
</body></html>
plik funkcje.php znajduje się pod tym adresem: http://scanerwww.pl/funkcje.txt
a skrypt zapisujący plik XML do bazy danych tutaj: http://scanerwww.pl/2.txt
wygenerowany plik XML: http://www.scanerwww.pl/update.xml
działanie skryptu wgrywającego można zobaczyć tutaj: http://scanerwww.pl/2.php
jak widać po błędach (skrypt 2.php) jest problem z plikiem XML :/
w firefoxie w źródle strony pokazuje mi się momentami różne dziwne rzeczy:(
i plik XML nie zapisuje mi się w bazie :(
Pomożecie mi z tym?? bo ja już nie wiem co z tym zrobić:(((
Z góry WIELKIE dzięki za pomoc :)