PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   datei (text/xml) von einem anderen server laden (http://www.selfphp.de/forum/showthread.php?t=3416)

fly 20.02.2003 12:30:14

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

Greg G 20.02.2003 12:38:31

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

fly 20.02.2003 23:04:38

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?

Greg G 20.02.2003 23:14:05

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

fly 21.02.2003 01:26:25

sorry irgendwie funkt das nicht:

Code:

$getfile = "http://www.google.de/index.html";
$putfile = "output.txt";

$tmpfile = fopen($getfile, "r");

$tmpdata = fread($tmpfile, filesize($getfile));
fwrite($putfile,$tmpdata);
fclose($putfile);
fclose($getfile);

krieg bei fopen nen fehler:

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?

Greg G 21.02.2003 09:09:58

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

fly 24.02.2003 15:16:43

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>
ServerName www.xxxxxxxxxxx.de
ServerPath /home/cu
DocumentRoot /home/cu/htdocs
ScriptAlias /cgi-bin/ /home/cu/cgi-bin/
ErrorLog /home/cu/logs/error.log
LogLevel crit
TransferLog /home/cu/logs/access.log
php_admin_value open_basedir /home/cu/htdocs/daoc/agaa/
</VirtualHost>

fehler krieg ich trotzdem:

Code:

Warning: fopen("festver", "w") - Permission denied in /home/cu/htdocs/daoc/agaa/testdl2.php on line 5
das phpscript is recht simpel -zum testen-

Code:

$fp = fopen("festver","w");
fwrite($fp, "test999");
fclose($fp);


fly 24.02.2003 15:25:32

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!

Ben20 24.02.2003 15:27:46

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?

fly 24.02.2003 15:48:48

;-)))) 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 10:56:19 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.