ftp Verbindung über PHP

danielwissemann

New Member
Guten Tag,
Ich habe auf meinen Entwicklungsserver ein Script entwickelt, welches eine Datei von einem FTP Server abruft. Als ich das Script aber auf meinen Server im Rechenzentrum gespiegelt habe funktioniert es auf einmal nicht mehr.

Bei dem Entwicklungsserver handelt es sich um Windows Server 2008 R2 und bei dem Server im Rechenzentrum um Windows 2008 Web Edition.

Mit Filezilla konnte ich erfolgreich eine FTP Verbindung zu dem Server aufbauen. (aktives Verfahren)

Also kann es ja eigentlich nicht an der Firewall liegen.
Kann man in PHP noch etwas einstellen?
Oder jemand eine Idee, woran es liegen könnte?

Hier das Script:

PHP:
function save($host, $port, $file, $user, $pw){
	$fehler = 0;
  $sock	= ftp_connect($host,$port, 180) or die("FTP Verbindung fehlgeschlagen: $host:$port/$file");
	
	// Anmelden am FTP Server
	if($user <> '' && $pw <> '')
	  @ftp_login($sock,$user,$pw) or die("FTP Authentifizierung fehlgeschlagen");
	else
	  @ftp_login($sock,'anonymous','') or die("FTP Authentifizierung fehlgeschlagen");
	
	ftp_pasv($sock, true);
	
	// Datei herunterladen und in den files Ordner verschieben
	if(!ftp_get($sock, "files/zip.zip", $file, FTP_BINARY)){
	  echo '<p style="color:red">Beim herunterladen der Zip Datei ist ein Fehler aufgetreten.</p>';
		$fehler++;
	};
	
	$zip_id = zip_open("files/zip.zip") or die ('Das öffnen des Zip Archives ist fehlgeschlagen.');
	if (!is_integer($zip_id)){ // überprüfen ob beim öffnen der Zip Datei ein Fehler aufgetreten ist
	  $zip_handler = zip_read($zip_id);
		$filesize = zip_entry_filesize ($zip_handler);
		$file = zip_entry_read($zip_handler,$filesize);
		$file_handler = fopen('files/tmp.csv','w');
		fwrite($file_handler,$file);
		fclose($file_handler);
	  zip_close($zip_id);
	}else{
	  echo '<p style="color:red">Beim entpacken des Zip Archives ist ein Fehler aufgetreten.<br>Fehlercode: ' .$zip_id .'</p>';
		$fehler++;
	}
	if ($fehler == 0)
	  return TRUE;
	else
	  return FALSE;
}
 
Um die FTP-Funktionen zu verwenden, muss die Option --enable-ftp bei der Installation von PHP verwendet werden.
Die Windowsversion von PHP enthält diese Erweiterung. Um diese Funktionen zu verwenden, müssen Sie keine zusätzlichen Erweiterungen aktivieren.


Oder aber bei Debian zum Beispiel einfach das FTP Paket mitladen und auch noch die php.ini überprüfen nach weiteren FTP Einstellungen. Eine falsche Konfiguration kann auch das Problem sein.
 
Was funktioniert denn dann nicht?

Werden die() Befehle nicht ausgeführt?

Außerdem macht dein @ vor allem überhaupt keinen Sinn, weil dies einen Fehler unterdrückt. Du solltest die @ weg nehmen und dann nochmal laufen lassen. Fehlermeldungen sollten dann wohl zu genüge kommen.
 
Vielen Dank für den Hinweis mit den @ Zeichen.

Leider gibt es auch ohne die @ Zeichen keine Fehlermeldung.
Im Fehlerlog steht jetzt:
[03-May-2011 13:37:05] PHP Warning: ftp_get(): php_connect_nonb() failed: No error (0) in D:\vhosts\CSV\httpdocs\functions.php on line 105
[03-May-2011 13:37:05] PHP Warning: ftp_get(): Transfer mode set to BINARY in D:\vhosts\CSV\httpdocs\functions.php on line 105

Die Zip Datei wird zwar angelegt aber nicht mit Inhalt gefüllt.
Evtl. doch ein Firewall Problem.
Ich habe den Port 21 geöffnet.
Müssen noch weitere Port offen sein?
 
Last edited by a moderator:
was mich allerdings wundert, das die Verbindung über Filezilla funktioniert.
Wenn es ein Firewall Problem ist dürfte es darüber ja eigentlich auch nicht gehen.
 
PHP:
fopen('files/tmp.csv','w');

Bitte überprüfen ob du überhaupt Schreibrechte auf diese Datei hast. Wenn hierbei ein Fehler auftaucht wird dieser nähmlich nicht abgefangen
 
Ich habe die Schreibrechte für den Ordner gerade noch einmal überprüft.
Stimmen soweit.
Die Dateien werden ja auch angelegt, nur halt eben nicht mit Inhalt gefüllt.
Detet darauf hin, dass er vom FTP Server keinen Dateiinhalt abrufen kann.
Mir ist nur noch nicht klar, warum. Denn mit dem Filezilla klappt es ja problemlos.
 
Back
Top