Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][XML] pobieranie i formatowanie błędnego pliku
Forum PHP.pl > Forum > Przedszkole
northwest
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:
  1. <?
  2. set_time_limit(60000000000000000);
  3.  
  4. include"funkcje.php";
  5. function pobierz_xml($co, $filename){
  6. echo "Pobieranie pliku: ".$co."<br>--- zapis w: ".$filename."<br>";
  7. $filename2=$filename.".tmp";
  8. $data=file_get_contents($co);
  9. $fp2=@fopen($filename2, 'w');
  10. $result=fwrite($fp2, $data);
  11. fclose($fp2);
  12. if ($result) {
  13. echo "Zakończono pobieranie pliku.Trwa formatowanie pliku...<br>";
  14. $fp2=@fopen($filename2, 'r');
  15. $fp1=@fopen($filename, 'w');
  16. while (!feof($fp2)) {
  17. $data=fgets($fp2, 1024);
  18. $data = str_replace(">Go&Play<", "><![CDATA[Go&Play]]><", $data); // olimp.sklep.pl
  19. $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
  20. if ($data==chr(13).chr(10)) $data=""; //proomo.eu
  21. $data = str_replace("V&M<", "V and M<", $data);
  22. $data = str_replace("V&S<", "V and S<", $data);
  23. $data = str_replace("C&C<", "C and C<", $data);
  24. $data = str_replace("Wet&Dry<", "Wet and Dry<", $data);
  25. $data = str_replace("Bed&Sofa<", "Bed and Sofa<", $data);
  26. $data = str_replace("Click&Go", "Click and Go", $data);
  27. //$data = str_replace("\"", "&quot;", $data);
  28. $data = str_replace("&", " ", $data);
  29. //$data = str_replace(" < ", " ", $data);
  30. //$data = str_replace(" > ", "", $data);
  31. $data = str_replace("´", " ", $data);
  32. $data = str_replace("'", " ", $data);
  33. $data = str_replace("‘", " ", $data);
  34. $data = str_replace("’", " ", $data);
  35. $data = str_replace("“", " ", $data);
  36. $data = str_replace("”", " ", $data);
  37.  
  38. $data=ascii_only($data);
  39. $data6zn=substr(trim($data), 0, 6);
  40. if ($data6zn!="<pasaz" && $data6zn!="<loadO" && $data6zn!="</pasa" && $data6zn!="</load")
  41. fwrite($fp1, $data);
  42. }
  43. fclose($fp2);
  44. fclose($fp1);
  45. unlink($filename2);
  46. echo "Zakonczono formatowanie pliku...<br>";
  47. return true;
  48. } else {
  49. echo "Błąd: Nie udalo sie pobrać: ".$co." !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1<br>";
  50. return false;
  51. }
  52. }
  53. $czas = explode(" ",microtime());
  54. $poczatek = $czas[1] + $czas[0];
  55. echo "<head>";
  56. echo "<title>UPDATE Krok 1</title>";
  57. echo "</head><body>";
  58. echo "Praca wre....<br>";
  59. echo "<br>";
  60. $lockfile="/var/www/sc/tmp/aktualizacja_lockfile.tmp";
  61. if (file_exists($lockfile)) {
  62. $fmdate=filemtime($lockfile);
  63. $diff=time()-$fmdate;
  64. if ($diff>43200) {
  65. 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>";
  66. unlink($lockfile);
  67. }
  68. }
  69. if (file_exists($lockfile)) {
  70. $fmdate=filemtime($lockfile);
  71. $diff=time()-$fmdate;
  72. echo "<b>Błąd: SKRYPT OD ".$diff." SEKUND PRACUJE NA INNEJ KONSOLI! </b><br>Spróbuj ponownie za kilka minut!!! <br><br>";
  73. }
  74. $fp_lock=@fopen($lockfile, 'w+');
  75. if ($fp_lock) {
  76. $ip = getenv('REMOTE_ADDR');
  77. $data=date('Y/m/d H:i:s')." IP:".$ip."\n";
  78. fwrite($fp_lock, $data);
  79. fclose($fp_lock);
  80. }else{
  81. echo "<b>Błąd: NIE UDAŁO SIĘ UZYSKAĆ DOSTĘPU DO DYSKU w celu utworzenia pliku! </b><br><br>";
  82. }
  83. set_time_limit(90000000);
  84. echo "Maksymalny czas pracy skryptu: ";
  85. $max=ini_get('max_execution_time');
  86. echo "$max s.<br>";
  87. $id = (int)$_GET["id"];
  88. include"config.php";
  89. if ($kkkkkkk=="") {
  90. if ($id)
  91. $result_sklep=mysql_query("SELECT id, nazwa, login, xml_url, xml_typ FROM t_sklep WHERE id = '$id' AND dostepny='1'", $db);
  92. else
  93. $result_sklep=mysql_query("SELECT id, nazwa, login, xml_url, xml_typ FROM t_sklep WHERE dostepny='1'", $db);
  94. while ($row_sklep=mysql_fetch_assoc($result_sklep)) {
  95. $sklep_id=$row_sklep['id'];
  96. $sklep_nazwa=$row_sklep['nazwa'];
  97. $sklep_login=$row_sklep['login'];
  98. $sklep_xmlurl=$row_sklep['xml_url'];
  99. $sklep_xmltyp=$row_sklep['xml_typ'];
  100. echo "<br>**** SKLEP: ".$sklep_login."<br>";
  101. $dir="/var/www/p/s/data/".$sklep_login."/";
  102. if (!is_dir($dir)) {
  103. mkdir($dir, 0777);
  104. echo "*** Utworzono katalog ".$dir."<br>";
  105. }
  106. if (is_dir($dir)) {
  107. $filename=$dir."update.xml";
  108. pobierz_xml($sklep_xmlurl, $filename);
  109. }else{
  110. echo "*** UWAGA: BRAK KATALOGU: ".$dir."<br>";
  111. }
  112. $czas = explode(" ",microtime());
  113. $koniec = $czas[1] + $czas[0];
  114. echo sprintf("%0.5f",$koniec-$poczatek)." s.<br>";
  115. }
  116. echo "<br>Zakończono etap 1<br>";
  117. }else{
  118. echo "UWAGA: Nie udało się nawiązać połączenia z bazą danych!<br>";
  119. }
  120. unlink($lockfile);
  121. ?>
  122. </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: 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 sad.gif(

Pomożecie mi z tym?? bo ja już nie wiem co z tym zrobić:(((

Z góry WIELKIE dzięki za pomoc smile.gif)))
erix
Kiedyś miałem podobny problem (nieprawidłowe pliki XML) i jedyne wyjście, jakie z kumplem ustaliliśmy, to było potraktowanie całości pregami...

Partyzanckie, ale chyba jedyne wyjście...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.