Salvare una immagine che si trova su porta TCP 8080 di altro sito

Stex1967

Nuovo Utente
23 Giu 2021
7
0
1
Buongiorno a tutti,
sto cercando di salvare sul mio webserver una immagine che viene presentata su una porta (8080 e 8081) di un indirizzo web remoto .
Ho provato diversi metodi ma sembra che il fatto che si debba usare una porta diversa dalla 80, quindi dichiarandola nel URL li mandi in crisi tutti; viene salvato un file di dimensioni pari a 0.
Se la stessa immagine viene salvata in modo tale da essere disponibile sulla porta 80 allora non ci sono problemi.
Ho utilizzato sia
curl
sia
file_put_contents
ma il problema permane. Ho tentato anche a inserire degli
sleep
tra varie linee pensando che fosse necessario più tempo per creare e salvare il file, ma neppure con tempi di 5 secondi è cambiato nulla.
Qualche idea ?
Grazie e ciao
 
Controlla l'header della risposta con curl...
Sarebbe consono specificare e/o caricare parte dello script per controllare, quindi evidenziare eventuali errori...
 
Controlla l'header della risposta con curl...
Sarebbe consono specificare e/o caricare parte dello script per controllare, quindi evidenziare eventuali errori...
Ciao macus_adi, grazie per la considerazione.
L'header della risposta è normale, il file salvato però è di zero byte.
Ho il dubbio che l'immagine generata dal restreming della webcam e presentata sulla porta 8080 abbia qualche problema, se prelevo un'altra immagine (jpg statico non generato "al volo") salvata su un altro mio sito tutto funziona.

Questo il semplice codice di test:
Codice:
<?php
// creo un file JPG in locale sul quale salverò l'immagine remota
$fp = fopen('./images/webcam/Ovada-webcam-2.jpg', 'wb');

// inizializzo cURL
$ch = curl_init();

// imposto la URL della risorsa remota da scaricare
curl_setopt($ch, CURLOPT_URL, 'http://superasso.homepc.it:8080/images/live.jpg');
//curl_setopt($ch, CURLOPT_URL, 'https://www.sestri.it/images/2020/05/01/810px-Genoa_airport__Cristoforo_Colombo_large.jpg');

// imposto che non vengano scaricati gli header
curl_setopt($ch, CURLOPT_HEADER, 0);

// imposto che il contenuto del file remoto venga scritto nel file locale (di cui specifico il puntatore)
curl_setopt($ch, CURLOPT_FILE, $fp);

// eseguo la chiamata
curl_exec($ch);

// chiudo cURL
curl_close($ch);

// chiudo il puntatore al file locale
fclose($fp);
?>


<!DOCTYPE html>
<html>
<head>
    <title><?php echo "Test.php"; ?></title>
</head>
<body>
    Sono le ore <?php echo date('H:i'); ?> del giorno <?php echo date('d/m/Y'); ?>.
    
<img src="<?= $imgUrl; ?>"/>
    Foto
    <img src='http://www.ovada.it/images/webcam/Ovada-webcam-2.jpg'/>
    
</body>
</html>
 
Ciao macus_adi, grazie per la considerazione.
L'header della risposta è normale, il file salvato però è di zero byte.
Ho il dubbio che l'immagine generata dal restreming della webcam e presentata sulla porta 8080 abbia qualche problema, se prelevo un'altra immagine (jpg statico non generato "al volo") salvata su un altro mio sito tutto funziona.

Questo il semplice codice di test:
Codice:
<?php
// creo un file JPG in locale sul quale salverò l'immagine remota
$fp = fopen('./images/webcam/Ovada-webcam-2.jpg', 'wb');

// inizializzo cURL
$ch = curl_init();

// imposto la URL della risorsa remota da scaricare
curl_setopt($ch, CURLOPT_URL, 'http://superasso.homepc.it:8080/images/live.jpg');
//curl_setopt($ch, CURLOPT_URL, 'https://www.sestri.it/images/2020/05/01/810px-Genoa_airport__Cristoforo_Colombo_large.jpg');

// imposto che non vengano scaricati gli header
curl_setopt($ch, CURLOPT_HEADER, 0);

// imposto che il contenuto del file remoto venga scritto nel file locale (di cui specifico il puntatore)
curl_setopt($ch, CURLOPT_FILE, $fp);

// eseguo la chiamata
curl_exec($ch);

// chiudo cURL
curl_close($ch);

// chiudo il puntatore al file locale
fclose($fp);
?>


<!DOCTYPE html>
<html>
<head>
    <title><?php echo "Test.php"; ?></title>
</head>
<body>
    Sono le ore <?php echo date('H:i'); ?> del giorno <?php echo date('d/m/Y'); ?>.
   
<img src="<?= $imgUrl; ?>"/>
    Foto
    <img src='http://www.ovada.it/images/webcam/Ovada-webcam-2.jpg'/>
   
</body>
</html>
Specifico che l'immagine "statica" jpg caricata sull'altro server (funzionamento dello script corretto) è presentata sulla porta 80 e non sulla 8080.
 
Provato or ora... funziona....
prova a vedere cosa ti salva nel file.json che genera....
_Snap_venerdì 25 giugno 2021_17h31m59s_001_.png

PHP:
$files=[
    [
        'source'=>'http://superasso.homepc.it:8080/images/live.jpg',
        'result'=>[],
    ],
    [
        'source'=>'https://www.sestri.it/images/2020/05/01/810px-Genoa_airport__Cristoforo_Colombo_large.jpg',
        'result'=>[]
    ]
];
foreach ($files as $k=>$file){
    $cnt=file_get_contents($file['source']);
    $files[$k]['result']['get_content']=base64_encode($cnt);
}
file_put_contents('file.json',json_encode($files,128));
 
Ciao macus_adi, ho creato il file ovada.it/test.php inserendo il codice che hai suggerito, purtroppo ricevo il seguente errore:

Schermata del 2021-06-25 21-39-05.jpg


A questo punto mi sorge il dubbio che ci sia un firewall lato server che pone delle limitazioni, cosa ne pensi ?

Codice:
Test.php

<?php

$files=[
    [
        'source'=>'http://superasso.homepc.it:8080/images/live.jpg',
        'result'=>[],
    ],
    [
        'source'=>'https://www.sestri.it/images/2020/05/01/810px-Genoa_airport__Cristoforo_Colombo_large.jpg',
        'result'=>[]
    ]
];
foreach ($files as $k=>$file){
    $cnt=file_get_contents($file['source']);
    $files[$k]['result']['get_content']=base64_encode($cnt);
}
file_put_contents('file.json',json_encode($files,128));

?>

 
<!DOCTYPE html>
<html>
<head>
    <title><?php echo "Test.php"; ?></title>
</head>
<body>
    <br/>
    Sono le ore <?php echo date('H:i'); ?> del giorno <?php echo date('d/m/Y'); ?>.
    
<img src="<?= $imgUrl; ?>"/>
    Foto
    <img src='http://www.ovada.it/images/webcam/Ovada-webcam-2.jpg'/>
    
</body>
</html>
 
Ho avuto conferma dal provider che ospita in hosting il il sito che sono chiuse tutte le porte in ingresso e uscita, tranne quelle classiche (80, 443, 21 etc.)
Quindi direi che il problema era dovuto a questa limitazione.
Chiudo il tread.
Grazie per l'aiuto.
Ciao
 

Discussioni simili