Datei per FTP bearbeiten ?

flandersX

Mitglied
Hallo,

und wieder, muss ich auf eure Hilfe zurückgreifen. :)

Ich möchte per FTP auf eine txt Datei zu greifen, und diese ändern und dann nqtürlich wieder dort speichern. In diesem Test, Name und Nachname !

Das habe ich bisher:

PHP:
<?

/********************************************/
/* Abgeschicktes Formular -> test.txt */
/********************************************/


if (isset($_POST['submit'])) {
	$handle = fopen ("ftp://username:password@IP/ordner/test.txt", "a");
	$somecontent = $_POST['name']." ".$_POST['nname']."\n";
      fputs($handle, $somecontent);
	fclose($handle);

}
/**************************************/
/*              Formular              */
/**************************************/
?>
<html>
<div align="center"><table bgcolor="#272727" style="border: 1px solid #000000;">
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
  <tr>
    <td style="border: 1px solid #000000;">Name</td><td bgcolor=#32383c style="border: 1px solid #000000;"><input name="name" type="text"></td>
  </tr>
  <tr>
    <td style="border: 1px solid #000000;">Nachname</td><td bgcolor=#32383c style="border: 1px solid #000000;"><input name="nname" type="text"></td>
  </tr>
  <tr><td style="border: 1px solid #000000;"></td><td bgcolor=#32383c style="border: 1px solid #000000;"><input type="submit" name="submit" value="senden"></td>
  </tr>
</form>
</table>
</html>

so, nutze ich bei fopen $mode "a" oder "a+", dann bekomme ich:
Warning: fopen(ftp://...@IP/ordner/test.txt) [function.fopen]: failed to open stream: FTP does not support simultaneous read/write connections......

was habe ich falsch gemacht.....?
Danke !
 
Ich habe nun mal "file_get_contents" anstelle von fopen genutzt.
Der obige Fehler ist nun weg, dafür:

Warning: fputs(): supplied argument is not a valid stream resource in /www/htdocs/kunde/ordner/test.php on line 12

Warning: fclose(): supplied argument is not a valid stream resource in /www/htdocs/kunde/ordner/test.php on line 13

Wo ist der Wurm ? :)
 
Zuletzt bearbeitet:
Der Tritt in die richtige Richtung kam doch bereits mit der von TchiboMann zitierten Fehlermeldung.
Diese besagt, mal frei uebersetzt, dass FTP es nicht unterstuetzt eine Datei gleichzeitig zum Lesen und zum Schreiben zu oeffnen. Entsprechend musst Du die Datei erst auslesen, dann den Inhalt aendern und diesen wieder zurueckschreiben.

Zudem wuerde ich zur Arbeit ueber FTP nicht fopen() empfehlen da dieses auf anderen Servern (eben mit anderen Einstellungen) durchaus zum Fehler fuehren kann. allow_url_fopen ist nicht ueberall on. PHP bietet, falls denn verfuegbar, eigene FTP-Funktionen, und ich hab mal eine Klasse geschrieben die mit fsockopen() arbeitet und somit den wenigsten Einschraenkungen unterliegen duerfte.
 
Danke für deine Erklärung !

Ich beschäftige mich erst seit kurzer Zeit mit PHP. Daher habe ich Deinen Text zwar gelesen, weiß aber nichts damit anzufangen ! :)

ich habe mal intuitiv ..:)

die beiden Befehel benutzt:

file_ get_ contents
file_ put_ contents

so das der obere Code nun so aussieht.
PHP:
$handle = file_get_contents ("ftp://username:password@IP/ordner/test.txt", "a");
	$somecontent = $_POST['name']." ".$_POST['nname']."\n";
      file_put_contents ($handle, $somecontent);
	fclose($handle);

Das will aber auch nicht so recht...

Fatal error: Call to undefined function: file_put_contents() in .......
 
Diese Funktionen geben Dir kein Handle zurueck, Du musst also sowohl bei file_get_contents() als auch bei file_put_contents() mit dem Dateinamen/Pfad zur Datei arbeiten.
fclose() kannst Du Dir dann entsprechend auch sparen.

Uebrigens, wenn Du mal nicht genau weisst wie eine Funktion einzusetzen ist nimm die Hilfe auf php.net zur Hand. Ueber http://www.php.net/funktionsname solltest Du was nuetzliches finden. Dort werden dann zumindest die Parameter der Funktion beschrieben und oft findest Du auch Beispiele zur Anwendung.
 
Natürlich bekommst du da einen Fatal error, wenn du zwischen file_put_contents und dem (); ein leerzeichen hast :rolleyes:

Eventuell solltest du Dennis' seinen Rat befolgen und dich gründlichst auf http://de.php.net unsehen... oder du nutzt, wie er sagte, die FTP-Klasse, die er erstellt hat, die findest du hier: http://php-classes.sourceforge.net/ unter dem Punkt FTPConnection. Aber ich bezweifle, dassde damit zurecht kommen wirst, wenn du schon Probleme bei Funktionen bzw. gar Probleme beim Verstehen von Dennis' Posts hast. Er redet schliesslich nicht Spanisch.
 
hmm ok, ich habe nun viele verschieden Möglichkeiten ausprobieret, die hier angegeben sind http://de.php.net/manual/de/function.file-put-contents.php.

PHP:
if (isset($_POST['submit'])) {
    file_get_contents("ftp://username:password@IP/ordner/test.txt", "a");
    $somecontent = $_POST['name']." ".$_POST['nname']."\n";
    file_put_contents("ftp://username:password@IP/ordner/test.txt", $somecontent "a");
}

bekomme aber immer wieder.
Fatal error: Call to undefined function: file_put_contents() in ......zurück

file_put_contents habe ich in meheren Variationen getestet.......

Könnt ihr mir evtl zeigen wie es aussehen muss, ich glaube sonst sitze ich hier noch nächstes Jahr ! :)

Danke !

wenn du schon Probleme bei Funktionen bzw. gar Probleme beim Verstehen von Dennis' Posts hast. Er redet schliesslich nicht Spanisch.

Sorry bitte aber solche Sätze kannst Du dir echt sparen.
Selbstverständlich habe ich damit Probleme, sonst wäre ich ja nicht Hier !
 
Zuletzt bearbeitet:
[...]
Fatal error: Call to undefined function: file_put_contents() in ......zurück
[...]

Arbeitest du mit PHP5? Wenn nicht steht dir diese Funktion nicht zur verfügung, was auch die Fehlermeldung besagt. Erstrebenswert wäre es, wenn du vor dem Posten einfach mal deine Fehlermeldung kopierst und bei Google danach suchst, dann wärst du von selber auf die Lösung gekommen. Oder du schaust im Manual, ab welcher PHP-Version die Funktion zur verfügung steht (ist in Klammern unter dem Funktionsnamen angegeben).
Abgesehen davon hast du einen Fehler im Funktionsaufruf, denn [phpf]file_put_contents[/phpf] erwartet keinen Modus (a,r,w...), so müsste es dann also aussehen:
PHP:
file_put_contents("ftp://username:password@IP/ordner/test.txt", $somecontent);

P.s: In den Kommentaren im Manual findest du meistens eine abwärtskompatible Version der Funktion.
 
Zuletzt bearbeitet:
Nö, das kann ich mir nicht sparen, denn Dennis hat sich klipp und klar ausgedrückt.

Nebenbei, scheints sogar berechtigt zu sein mein Satz... Besuche http://de.php.net/file_put_contents und schau was da steht:
file_put_contents
(PHP 5)
file_put_contents — Write a string to a file
Beschreibung
int file_put_contents ( string $filename, mixed $data [, int $flags [, resource $context]] )

Identical to calling fopen(), fwrite(), and fclose() successively.

You can also specify the data parameter as an array (not multi-dimension arrays). This is equivalent to file_put_contents($filename, implode('', $array)).

As of PHP 5.1.0, you may also pass a stream resource to the data parameter. In result, the remaining buffer of that stream will be copied to the specified file. This is similar with using stream_copy_to_stream().

Steht da was von PHP4? nein. Du hast wohl PHP4, denn sonst würde der Fatal error Call to undefined function: file_put_contents() nicht kommen. Undefined, englisch für nicht defininiert. Bedeutet, dass du keine Funktion dieses Namens hast. Und dass es verschiedene PHP Versionen gibt (4.0.1, 4.4.4, 5, 5.1, 5.2 usw...), die nicht komplett Identisch sind ist Grundwissen. Nicht umsonst kennzeichnen die PHP-Entwickler auf deren Seite die Funktionen mit der PHP-Version, auf dem diese Funktionen laufen.

Es ist Ratsam für dich, dass du erstmal recherchierst, welche PHP-Version du hast und dann darauf achtest, welche Funktionen du nutzen kannst. und das hat nix mit Problemen bei Funktionen zu tun, das ist schlichtes Basiswissen...

Zum Basiswissen gehört auch auf das zu hören, was dir PHP als Fehler (Fatal error) ausspuckt. Wenn du Probleme beim verstehen von Englisch hast - entweder Google zu Rate ziehen, oder scripten sein lassen.

Mag hart klingen, sorry, aber mir scheint als wenn du nur ein fünkchen Basiswissen besitzt. Das ist definitiv zu wenig.
 
Zurück