datei (text/xml) von einem anderen server laden
hi ich stehe vor vorlgendem problem:
ich habe einen xml parser, der funkt, nur arbeitet er nur mit lokalen datein. das ist mir aus gründen der geschwindigkeit auch ganz lieb, nur ist die xml datei immer etwas älter als das orginal, und ich muss die von hand kopieren. ich möchte nun automatiesieren, das gecheckt wird wie alt die datei ist (krieg ich hin) und dann älter als sagen wir 6h neu auf den webserver (von dem anderen) geladen wird (das krieg ich nicht hin). ich brauch also nur ein paar code zeilen, die eine xml (oder eine beliebige datei) von einer URL laden und dann lokal speichert.. $dl = "url"; $lokal = "test.xml"; mehr vars bräuchte ich nicht. kann mir da einer helfen, ich hab grad 90min damit verbracht eswas fertiges zu finden, das ich nur anpasse, aber nix gefunden! danke |
Je nachdem, wie dein PHP konfiguriert ist, kann es direkt mit fopen("http://.....", "r");
auch URLS statt lokaler Dateien öffnen. Etwas umfangreichere Lösungen gibt es mit curl. http://www.selfphp.com/funktionsrefe...onen/fopen.php |
also ich hab einweig rumprobiert und folgendes funkt
function load($getfile, $putfile){ $data = implode("n",file($getfile)); if($data){ $fp = fopen($putfile,"w"); fwrite($fp, "$data"); fclose($fp); } } //und dann halt aufrufen load("http://blabla...","/writefile.txt"); das prob ist das geht zwar für meinen zweck (xml datei holen), aber wie ist das mit allgemeinen (binäre-datein). ne allgemeinere lösung wäre mir lieber, mir gehts also nicht ums öffnen (das macht der parser später) sondern nur ums downloaden vom anderen rechner. hat jemand für den reihen download ne lösung? |
Schau mal in der Beschreibung zu fread:
http://www.selfphp.com/funktionsrefe...onen/fread.php Zitat: Mit fread() kann man Binärdaten aus einer Datei (fp) lesen. Der zweite Parameter für die Länge (length) bestimmt, wie viel der Datei gelesen werden soll (max. bis zum Dateiende). Im Beispiel: $fp = fopen ($zaehler_anmelden, "r"); $str = fread ($fp, filesize ($zaehler_anmelden)); Und bei fopen: http://www.selfphp.com/funktionsrefe...onen/fopen.php Zitat: Für die Bearbeitung von Binärdateien können Sie an jede dieser Modusdefinitionen ein "b" anhängen. Also beim Beispiel dann: $fp = fopen ($zaehler_anmelden, "rb"); Sollte eigentlich auch gehen, wenn du es mit file geschafft hast. GG |
sorry irgendwie funkt das nicht:
Code:
$getfile = "http://www.google.de/index.html"; Warning: stat failed for http://www.google.de/index.html (errno=2 - No such file or directory) in testdl.php ich entwickle auf ner windows kiste und der server ist linux. is sowas wirklich so kompleziert, oder stell ich mich nur doof an? |
Morgen
Das könnte an den PHP-Einstellungen liegen. Hast du es auf dem Linux-Server schon mal ausprobiert? Du kannst dir einfach mal die geladene google.de/index.html ausgeben lassen. Das war der erste Test, den ich mal gemacht hatte, und es ging (aber auf dem Server, unter Windows hatte ich es gar nicht probiert, glaub ich). http://www.php.net/manual/en/function.fopen.php Cite: If PHP has decided that filename specifies a registered protocol, and that protocol is registered as a network URL, PHP will check to make sure that allow_url_fopen is enabled. If it is switched off, PHP will emit a warning and the fopen call will fail. /Cite Und dann für die Einstellungen der php.ini: http://www.php.net/manual/en/ref.fil...llow-url-fopen Cite: Runtime Configuration The behaviour of these functions is affected by settings in php.ini. Table 1. Filesystem and Streams Configuration Options Name Default Changeable allow_url_fopen "1" PHP_INI_ALL user_agent NULL PHP_INI_ALL default_socket_timeout "60" PHP_INI_ALL from NULL ?? auto_detect_line_endings "Off" PHP_INI_ALL Here is a short explanation of the configuration directives. allow_url_fopen boolean This option enables the URL-aware fopen wrappers that enable accessing URL object like files. Default wrappers are provided for the access of remote files using the ftp or http protocol, some extensions like zlib may register additional wrappers. Note: This option was introduced immediately after the release of version 4.0.3. For versions up to and including 4.0.3 you can only disable this feature at compile time by using the configuration switch --disable-url-fopen-wrapper. /Cite GG |
hm, also ich versuche es jetzt erstmal nur auf der linux kiste:
da krieg ich fehler meldungen, der schreibende zugriff aufs dateisystem ist unter sagt. in php.ini ist der eintrag open_basedir auskommentiert, in meinem schlauen php buch steht, man könnte es in die apache http.conf eintragen, mit hilfe der php_admin_value variable. ok das hab ich getan: Code:
<VirtualHost xxx.xxx.xxx.xxx> Code:
Warning: fopen("festver", "w") - Permission denied in /home/cu/htdocs/daoc/agaa/testdl2.php on line 5 Code:
$fp = fopen("festver","w"); |
ah also der eintrag hat schon wirkung:
Warning: open_basedir restriction in effect. File is in wrong directory in Unknown on line 0 nur nicht die die ich wollte! ich vermute nen "fehler" in der apache http.conf mal sehn ob ich was finde! |
Blöde Frage, aber hat die Datei in die Du schreiben willst die richtigen Rechte? Sprich darf der User den Apache verwendet bzw. die Gruppe überhaupt die Datei bearbeiten?
|
;-)))) hehe
jo daran hatte ich auch schon gedacht, gut das ich das zuerst versucht habe und nicht erst die ganze http.conf durchgesehn habe. daran lags auf jedenfall, das ich nicht öffnen (rw) konnte. problem das bleibt (oder jetzt neu ist): er speichert jetzt natürlich als user: apache gruppe: apache ab, wie kann ich das unter dem user speichern. sollte das nicht gehn, ist auch nicht schlimm. aber vieleicht weiss ja jemand obs da nen weg gibt..... |
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:46:33 Uhr. |
Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.