Avevo un codice PHP molto semplice per caricare un file su un server remoto; il modo in cui lo stavo facendo (come è stato suggerito qui in alcune altre soluzioni) è quello di usare cUrl per caricare il file.Qualcuno può darmi un esempio per la classe CURLFile di PHP?
Ecco il mio codice:
$ch = curl_init("http://www.remotesite.com/upload.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('fileupload' => '@'.$_FILES['Filedata']['tmp_name']));
echo curl_exec($ch);
Il server è in esecuzione PHP 5.5.0 e sembra che @nomefile è stato deprecato in PHP> = 5.5.0, come indicato here sotto la descrizione CURLOPT_POSTFIELDS
, e, quindi, sto ottenendo questo errore:
Deprecated: curl_setopt(): The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead in ...
è interessante notare che non c'è assolutamente nulla di questa classe su php.net a parte una panoramica di classe di base. Nessun esempio, nessuna descrizione di metodi o proprietà. È praticamente vuoto here. Capisco che è una nuova classe con poca o nessuna documentazione e un uso molto limitato del mondo reale, motivo per cui praticamente nulla di rilevante sta emergendo nelle ricerche su Google o qui su Stackoverflow in questa classe.
Mi chiedo se c'è qualcuno che ha usato questa classe CURLFile e può eventualmente aiutarmi o darmi un esempio di come usarlo al posto di @filename nel mio codice.
Edit:
ho voluto aggiungere il mio codice "upload.php" pure; questo codice dovrebbe funzionare con il metodo @nomefile tradizionale, ma non è più lavorare con il codice della classe CURLFile:
$folder = "try/";
$path = $folder . basename($_FILES['file']['tmp_name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
echo "The file ". basename($_FILES['file']['tmp_name']). " has been uploaded";
}
Modifica finale:
voluto aggiungere il codice finale/lavorare per gli altri in cerca di simile esempio di lavoro della classe CURLFile scarsamente documentata ...
curl.php (server locale)
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label> <input type="file" name="Filedata" id="Filedata" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
<?php
if ($_POST['submit']) {
$uploadDir = "/uploads/";
$RealTitleID = $_FILES['Filedata']['name'];
$ch = curl_init("http://www.remotesite.com/upload.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$args['file'] = new CurlFile($_FILES['Filedata']['tmp_name'],'file/exgpd',$RealTitleID);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
$result = curl_exec($ch);
}
?>
upload.php (server remoto)
$folder = "try/";
$path = $folder . $_FILES['file']['name'];
if(move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
echo "The file ". basename($_FILES['file']['name']). " has been uploaded";
}
Puoi var_dump ($ _ FILES)? – Danack
in upload.php? Se lo faccio, come faccio a restituire il risultato sulla mia pagina curl.php? Stavo provando a farlo in precedenza, ma in realtà non restituisce nulla una volta eseguito il codice di invio. – luci5r
OK - Doveva impostare RETURNTRANSFER su true; quindi ecco il risultato di var_dump ($ _ FILES) sotto upload.php: 'array (1) {[" file "] => array (5) {[" name "] => string (11)" phpC0F4.tmp "[ "type"] => string (24) "application/octet-stream" ["tmp_name"] => string (14) "/ tmp/phpj7C3Hv" ["error"] => int (0) ["size"] => int (483397)}} Il file phpj7C3Hv è stato caricato ' – luci5r