ERLEDIGT
NEIN
NEIN
ANTWORTEN
14
14
ZUGRIFFE
833
833
EMPFEHLEN
-
Hallo,
ich hab ein kleines Problem, und zwar versuch ich von meinem Webserver auf einem anderen Webserver durch ftp Zugriff in eine Datei zu schreiben.
Als Beispiel wollte ich erstmal nur das Datum in die Datei schreiben und darauf dann später aufbauen. Doch leider will es bei mir nicht klappen mit dem Script
Mein code sieht folgendermaßen aus:
Es kommt leider immer der fehler:PHP-Code:<?
if (!$con = ftp_connect("Domain")) {
die("Error: can't connect");
}
if (!ftp_login($con,"user","pass")) {
ftp_quit($con);
die("Error: can't login");
}
$handle = fopen = ("datei.txt", "a");
fputs($handle, date("dmY")."\n");
?>
Warning: fputs(): supplied argument is not a valid stream resource
Die Datei "datei.txt" ist auf dem anderen Webserver enthalten und hat die rechte 777.
Also ich kann mit dem Script auf den FTP Zugreifen nur leider nicht in der entsprechenden Datei reinschreiben.
ich weiss leider nicht mehr weiter ich hoffe ihr könnt mir helfen.
mfg.
-
11.04.07 17:41 #2
Du kannst die Datei nicht remote verändern, soweit ich weiß.
Lade sie per ftp_fget() herunter, ändere sie und per ftp_fput() wieder hochladen.KIDS Kinderbetreuungsdienst
Xing
"When you play the game of thrones, you win or you die. There is no middle ground."
by Cersei Lannister in "A Game Of Thrones"
-
Wenn Du eine Datei mit fopen() oeffnest dann wird diese lokal geoeffnet. Du verbindest zwar zuvor mit einem FTP-Server, aber davon weiss fopen() nichts, zumal dies auch eigentlich nur fuer lokale Dateien gedacht ist (auch wenn es, unter bestimmten Voraussetzungen, auch fuer Remote-Files zu gebrauchen ist).
Zusaetzlich ist das = nach fopen ueberfluessig.
Es heisst also nicht
sondernPHP-Code:$handle = fopen = ("datei.txt", "a");
Was aber eben immer noch auf eine lokale Datei verweist und nicht auf eine auf dem FTP-Server.PHP-Code:$handle = fopen("datei.txt", "a");
Die FTP-Funktionen von PHP koennen nur PUT und GET, also Dateien hoch oder runter laden.
Einen Schritt weiter geht meine FTP-Klasse, wo Dateien auch einfach gelesen oder geschrieben werden koennen, ohne dass eine lokale Datei dafuer erstellt/gelesen werden muss.
Ein Anhaengen von Daten ist hier aber auch nicht moeglich, liesse sich aber simulieren indem die Datei ausgelesen wird, der neue Content angehaengt und alles wieder geschrieben wird. Das erhoeht natuerlich den Traffic, duerfte aber die beste Loesung sein.
@Flex: Dein Vorschlag ist natuerlich auch machbar, aber aus 3 Gruenden finde ich die Nutzung meiner Klasse vorteilhafter:- Die Datei muss nicht (kann aber) lokal gespeichert werden.
- Die FTP-Verbindung wird mittels fsockopen() aufgebaut, es besteht also keine Abhaengigkeit von den FTP-Funktionen oder der schrecklichen Einstellung allow_url_fopen.
- Es ist meine Klasse.

PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
11.04.07 17:56 #4
- Registriert seit
- Apr 2007
- Ort
- Hildesheim (Niedersachsen)
- Beiträge
- 51
Manual Text 1:
fopen() bindet eine benannte Resource, welche mittels filename spezifiziert wurde, an einen Stream. Hat filename die Form "schema://..." wird angenommen, dass es sich hier um eine URL handelt und PHP sucht nach einem Protokollhandler (auch als Wrapper bekannt) für dieses Schema. Sind keine Wrapper für dieses Protokoll registriert, gibt PHP als Hilfe zum Verfolgen potentieller Probleme in Ihrem Skript einen Hinweis aus und setzt dann weiter fort, obwohl filename eine reguläre Datei spezifiziert.
Manual Text 2: Anhang N. List of Supported Protocols/Wrappers Weiter
FTP and FTPS
PHP 3, PHP 4, PHP 5. ftps:// since PHP 4.3.0
ftp://example.com/pub/file.txt
ftp://user
assword@example.com/pub/file.txt
ftps://example.com/pub/file.txt
ftps://user
assword@example.com/pub/file.txt
Conclusion
Klappt natürlich nur wenn hinreichendePHP-Code:
//$handle = fopen = ("datei.txt", "a");
$handle = fopen = ("ftp://user:password@serv.er/Directory/datei.txt", "a");
fputs($handle, date("dmY")."\n");
fclose($handle);
Dateirechte auf dem Server vorliegen...Any sufficiently advanced technology
is indistinguishable from magic.
(A. C. Clarke)
-
Danke euch allen für die Tipps.
Ich hab mir erstmal den Tipp vom rexxitall angeschaut. Weil das sah mir am einfachsten aus.
Habs so geändert wie du es vorgeschlagen hast:
Doch leider sagt er mir jetzt:PHP-Code:$handle = fopen = ("ftp://user:password@server/Directory/datei.txt", "a");
Parse error: syntax error, unexpected '=' in .... in der entsprechenden Zeile von oben.
Schade wenn das nicht geht das sah für mich als Anfänger am leichtesten aus es zu realisieren.
Wenn es so nicht geht werd ich dann mal die anderen netten vorschläge abarbeiten.
mfg.
-
11.04.07 18:41 #6Es muss ja auch immer noch so heißen, wodrauf Dennis Wronka ja auch schon hingewiesen hat.PHP-Code:
$handle = fopen("ftp://user:password@server/Directory/datei.txt", "a");
Und die Fehlermeldung hat doch auch genau das bemängelt
KIDS Kinderbetreuungsdienst
Xing
"When you play the game of thrones, you win or you die. There is no middle ground."
by Cersei Lannister in "A Game Of Thrones"
-
Und ich moechte auch nochmal darauf hinweisen, dass fopen() nur mit ueber Netzwerk funktioniert wenn allow_url_fopen aktiv ist, was durchaus ein Sicherheitsrisiko darstellen kann und somit tendenziell eher inaktiv sein duerfte.
PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
11.04.07 19:06 #8
- Registriert seit
- Apr 2007
- Ort
- Hildesheim (Niedersachsen)
- Beiträge
- 51
Das kommt davon wenn man in Eile copy and paste mit dem falschen Beispiel macht *lach* (sorry)
Der Hobbyprogrammierer hat mit seiner Zeile (mit nur einem = Zeichen) na klar Recht.
Hauptsache nun tut es
Any sufficiently advanced technology
is indistinguishable from magic.
(A. C. Clarke)
-
Habs jetzt geändert der Fehler verschwindet auch nur jetzt kommt der nächste:
Warning: fopen(ftp://...@Domain.de/datei.txt) [function.fopen]: failed to open stream: FTP does not support simultaneous read/write connections. in .....
Hab dann mal eben phpinfo durchgeführt um zu sehen ob allow_url_fopen aktiv ist.
Und es ist aktiv sowie bei Local Value als auch bei Master Value ist es aktiv.
Und die datei (datei.txt) auf dem anderen server hat die rechte 777.
Ich glaub ich muss das dann anders lösen wenn es so net geht
mfg.
-
11.04.07 20:04 #10
- Registriert seit
- Apr 2007
- Ort
- Hildesheim (Niedersachsen)
- Beiträge
- 51
OK ist aber auch nicht viel mehr aufriss
Praktisch Datei einmal holen und dann geändert wieder wegschreiben...PHP-Code:
//------------------------------------------------------------------------------
function fileput($file,$data){
//------------------------------------------------------------------------------
$fh=fopen($file,"w");
fwrite($fh,$data);
fclose($fh);
}
//------------------------------------------------------------------------------
function fileget($file){
//------------------------------------------------------------------------------
$fh=fopen($file,"r");
$data=fread( $fh,filesize($file));
fclose($fh);
return $data;
}
$URL="ftp://user:password@serv.er/Directory/datei.txt";
$temp=fileput($URL,fileget($URL).date("dmY")."\n"));
Any sufficiently advanced technology
is indistinguishable from magic.
(A. C. Clarke)
-
Hallo,
Winnis Problem finde ich nicht so trivial - zumindest nicht seine letzte Fehlermeldung:
"failed to open stream: FTP does not support simultaneous read/write connections"
Mir ist als Anfänger das gleiche passiert.
Komme deshalb nicht weiter und würde mich für schnelle Hilfe bedanken!
Der Fehler erscheint bei mir, weil ich - blöder Weise - eine "$handle=fopen($file,"w");
fwrite($handle,$data);" Kombination erfolgreich ausprobiert hatte (habe nämlich eine Stream-Id zurückbekommen
), dabei aber das:
fclose($handle); vergessen
Meine Frage: wie kann ich den Stream schliessen, ohne den $handle zu wissen?
Steht er etwa auch in einer GLOBAL?
Ich programiere schon ein paar Jahre, nur keine Servertechnologien (bisher), arbeite erstmals auf einem Virtual-Server mit allen Rechten und wollte "nur" eine log.datei einrichten.
-
17.05.07 11:01 #12
Folgende Methode ist sehr unsauber, meiner Meinung nach, und sollte eigentlich nicht benutzt werden, aber es wäre möglich:
$GLOBALS durchlaufen per Schleife und schauen welche Variable eine Ressource ist (is_resource()) und dann versuchen per fclose() zu schließen.
Allerdings finde ich, man sollte wissen welche Dateihandle offen sind und auch schließen...KIDS Kinderbetreuungsdienst
Xing
"When you play the game of thrones, you win or you die. There is no middle ground."
by Cersei Lannister in "A Game Of Thrones"
-
Danke Felix!
finde, dass ist eine gute Idee.... aber:
Bin alle GLOBALS rekursiv durchgegangen, ist keine is_resource() TRUE dabei (nur arrays und strings).
Alle direkten FTP Befehle verlangen ja die Resourcennummer, also, ftp_quit(); oder so funktionieren nicht.
Bleibt die Frage: wo wird das FTP-Protokoll eigentlich durchgeführt, bzw. wie läßt sich die aktuelle Resource herausfinden Und damit wohl beeinflussen - stoppen ...
Da ich wohl Zugriff auf den Server habe, leider aber wenig Ahnung von der Technologie, bräuchte ich einen Hinweis.
*** Warnung für andere FTP-Anfänger: fclose so absichern, dass er auch bei Abbruch noch ausgeführt wird
Hilft das weiter:
SERVER_SIGNATURE is: string ---> Apache/2.0.53 (Linux/SUSE) Server at www.nnnn.de Port 80
Danke im Voraus!!
-
17.05.07 19:42 #14Wenn ich das ausführe, habe ich unten stehen:PHP-Code:
<pre>
<?php
$fp = fopen("test.txt");
print_r($GLOBALS);
?>
</pre>
Und is_resource() gibt auch TRUE aus.[fp] => Resource id #3KIDS Kinderbetreuungsdienst
Xing
"When you play the game of thrones, you win or you die. There is no middle ground."
by Cersei Lannister in "A Game Of Thrones"
-
Danke Felix,
das Problem Fehler: "failed to open stream: FTP does not support simultaneous read/write connections"
ist doch ein ganz anderes.
Es geht garnicht um einen offene gelassenen FTP-Kanal wie angenommen, sondern allein darum , das ich in fopen(#..', 'a+') den Switch 'a+' = Read + Write gewählt hatte, und dies scheint meine Server-Version oder Einstellung nicht zu wollen. - Sagt die Fehlermeldung eigentlich ja auch deutlich: "not support simultaneous read/write connections".
Also, keine Panik, mit einem normalen fopen(#..', 'a') klappt's wunderbar.
Jetzt kann ich den Threat wohl endlich schließen.
Ciao.Geändert von biozen (25.05.07 um 16:41 Uhr) Grund: Falsche Vorannahme...
Ähnliche Themen
-
Formular in Tabulatorgetrennte Datei schreiben bzw. Datei vervollständigen
Von Muckel1986 im Forum PHPAntworten: 4Letzter Beitrag: 12.09.08, 14:08 -
[C#] Kanäle aus Stereo WAV Datei in je eine neue WAV Mono Datei schreiben
Von Webrat im Forum .NET Grafik und SoundAntworten: 2Letzter Beitrag: 12.02.08, 18:21 -
Zeilenweise aus Ini Datei lesen und in neue Datei schreiben
Von Putzwied im Forum C/C++Antworten: 2Letzter Beitrag: 27.04.07, 08:16 -
Aus Datei lesen und in eine andere Datei schreiben
Von Computerpinguin im Forum C/C++Antworten: 1Letzter Beitrag: 03.05.05, 14:29 -
viele errechnete werte sofort in datei schreiben oder sammeln und dann schreiben?
Von larss im Forum JavaAntworten: 4Letzter Beitrag: 25.04.05, 22:15





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren