FTP-Upload funktioniert nur jedes zweite Mal

Hallo Zusammen,

ich möchte eine JSON-Datei in ein Web-Verzeichnis bei IONOS hochladen und nutze folgende Skriptzeilen:

$time  = time();
$datei = 'daten.json';
$data  = array(
  'Temp1' => GetValueFloat(52986),
  'Temp2' => GetValueFloat(31441),
  'Temp3' => GetValueFloat(40123),
  'Temp4' => GetValueFloat(11575),
  'Monitortext' => GetValueString(44185),
  'Timestamp' => $time
);
// FTP-Credentials
$host     = "home1008xxxxx.1and1-data.host";
$user     = "p3631xxxx";
$passwort = "********";

$adresse  = "ftp://".$user.":".$passwort."@".$host."/verzeichnis/".$datei;
$options  = array('ftp' => array('overwrite' => true));
$stream   = stream_context_create($options); 

// Daten abspeichern
$json = json_encode($data);             
file_put_contents($datei, $json);

// Datei übertragen
if ($fh = fopen($adresse, 'w', 0, $stream)) {      
  fputs($fh, $json);   // writes contents to the file    
  fclose($fh)     // closes the file handle
} else { 
  die('Could not open file.'); 
}

Grundsätzlich funktioniert es ein paarmal, aber nun nur jedes zweite Mal.
Es kommt folgende Fehlermeldung:

Warning: fopen(ftp://...@home1008xxxxx.1and1-data.host/verzeichnis/daten.json): 
Failed to open stream: 
Failed to set up data channel: 
Connection refused in /mnt/data/symcon/scripts/59403.ips.php on line 33
Could not open file.

Wie habt Ihr das gelöst?
Mache ich etwas grundsätzlich falsch?
Gibt es eine bessere Lösung eine JSON-Datei hochzuladen?

@paresy: Wie würdest Du das machen?

Mich irritiert das ostfriesische Blinker-Syndrom: geht - geht nicht - geht - geht nicht

Vielen Dank für Eure Unterstützung.

Viele Grüße aus dem Unterallgäu
Harry

Ich nutze folgenden Code, seit langer Zeit ohne Probleme. Die (HTML-)Datei wird erst lokal erstellt und dann hochgeladen.

	//ftp_connect ( string $host [, int $port = 21 [, int $timeout = 90 ]] )
	$connection = ftp_ssl_connect($ftpserver, 21, 15);
	$login_result = ftp_login($connection, $user, $password);
	// 1=Login OK
	//echo $login_result;
	if (!$connection || !$login_result)
	{
	 //Wenn Fehler
	 echo "\nError: creating FTP connection failed";
	}
	else{
	  //entering passive mode
		//ftp_pasv ( resource $ftp_stream , bool $pasv )
		ftp_pasv($connection, true);
		$upload = ftp_put($connection, $remotefile1, $filepath1, FTP_ASCII);
		if (!$upload)
		{
		 	 //Wenn Fehler
			 echo "\nError: FTP upload failed";
		}
		else
		{
      if (($_IPS['SENDER'] == "Execute") AND $debug)
        echo "Upload succesful!";
		}
	}
	ftp_quit($connection);
  

Hallo Ralf,

vielen Dank für Deine Zeilen, ich werde die auch ausprobieren.

Momentan habe ich mein Skript, nach einer Recherche im Internet so geändert:

// Variablen definieren
$time = time();
$data = array(
    'Temp1' => GetValueFloat(52986),
    'Temp2' => GetValueFloat(31441),
    'Temp3' => GetValueFloat(40123),
    'Temp4' => GetValueFloat(49685),
    'Monitortext' => GetValueString(44185),
    'Timestamp' => $time
);
$datei = "daten.json";

// Daten ins JSON-Format bringen und in einer Datei abspeichern
$json = json_encode($data);
file_put_contents($datei, $json);

// FTP-Credentials
$host = "home1008xxxxx.1and1-data.host";
$user = "p3631xxxx";
$pass = "*********";

// FTP-Verbindung aufbauen und Datei übertragen
$ftp = ftp_connect($host);
$login = ftp_login($ftp, $user, $pass);
$result = ftp_set_option($ftp, FTP_USEPASVADDRESS, false);
$result = ftp_pasv($ftp, true);
$result = ftp_put($ftp, "/verzeichnis/".$datei, $datei, FTP_BINARY);
$result = ftp_close($ftp);

Der Knackpunkt scheinen die Befehle ftp_set_option und der Passiv-Modus (ftp_pasv) gewesen zu sein. Nun muss ich auch wie bei Dir noch ein paar Fehlerabfragen einbauen, dann war es das hoffentlich. Und ich sollte wahrscheinlich auch auf SSL gehen und die Portnummer ergänzen. Danke nochmals für Deine Hilfe.

Viele Grüße aus dem Unterallgäu
Harry

Hallo zusammen,

leider kommt ab und zu noch immer einer Fehlermeldung bei meinem FTP-Skript:

Warning: ftp_put(): php_connect_nonb() failed: Operation now in progress (115) in /mnt/data/symcon/scripts/59403.ips.php on line 34

Warning: ftp_put(): Type set to I in /mnt/data/symcon/scripts/59403.ips.php on line 34

Da muss ich weiter recherchieren.

Viele Grüße aus dem heißen Unterallgäu
Harry