volevo sapere se è possibile in qualche modo inviare un immagine al form di imageshack.us e ottenere come risultato il link del'immagine uploadata (o megli ancora un array con il link dall'immagine e i suoi relativi ridimenzionamenti);
volevo sapere se è possibile in qualche modo inviare un immagine al form di imageshack.us e ottenere come risultato il link del'immagine uploadata (o megli ancora un array con il link dall'immagine e i suoi relativi ridimenzionamenti);
Puoi inviare dati a un form usando file_get_contents() http://it.php.net/file_get_contents (guarda in particolare tra i commenti, trovi esempi su come inviare un POST).
Poi il parsing del risultato puoi farlo come meglio credi, con funzioni di manipolazioni delle stringhe.
Grazie!
Frugando nel manuale ho trovato quello che cercavo qui:stream_context_create.
Riporto la funzione chi ne avrà bisogno in futuro:
Codice PHP:
function do_post_request($url, $postdata, $files = null)
{
$data = "";
$boundary = "---------------------".substr(md5(rand(0,32000)), 0, 10);
//Collect Postdata
foreach($postdata as $key => $val)
{
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"".$key."\"\n\n".$val."\n";
}
$data .= "--$boundary\n";
//Collect Filedata
foreach($files as $key => $file)
{
$fileContents = file_get_contents($file['tmp_name']);
$data .= "Content-Disposition: form-data; name=\"{$key}\"; filename=\"{$file['name']}\"\n";
$data .= "Content-Type: image/jpeg\n";
$data .= "Content-Transfer-Encoding: binary\n\n";
$data .= $fileContents."\n";
$data .= "--$boundary--\n";
}
$params = array('http' => array(
'method' => 'POST',
'header' => 'Content-Type: multipart/form-data; boundary='.$boundary,
'content' => $data
));
$ctx = stream_context_create($params);
$fp = fopen($url, 'rb', false, $ctx);
if (!$fp) {
throw new Exception("Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
if ($response === false) {
throw new Exception("Problem reading data from $url, $php_errormsg");
}
return $response;
}
ho notato che così passo solo le variabili tramite post ma non i file;
Pongo un esempio nello specifico:
e la pagina di risposta:Codice PHP:
<?php
function do_post_request($url, $postdata, $files = null)
{
...
}
if(!empty($_FILES['fileupload']) && $_FILES['fileupload']['size']):
$files['image']=$_FILES['fileupload'];
$postdata = array(
'MAX_FILE_SIZE' => $_POST['MAX_FILE_SIZE']
);
echo do_post_request("http://127.0.0.1:8080/Php/PHP/Progetti/imageSuploader/risposta.php", $postdata, $files);
else:
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Imageshack Uploader</title>
</head>
<body>
<form action="#" method="post" enctype="multipart/form-data">
<input name="MAX_FILE_SIZE" value="1548576" type="hidden">
<input class="textfield" name="fileupload" size="30" type="file">
<input value="carica" type="submit">
</form>
</body>
</html>
<?php endif;?>
ovviamente l'output èCodice PHP:
<?php
if(!empty($_FILES['fileupload']) && $_FILES['fileupload']['size']):
$files['image']=$_FILES['fileupload'];
$postdata = array(
'MAX_FILE_SIZE' => $_POST['MAX_FILE_SIZE']
);
?>
bravo pesa <?php echo $files['image']['size'] ?>
<?php
else:
?>
nulla mi dispiace
<?php
if(!empty($_POST['MAX_FILE_SIZE']))
{
echo ", ma almeno il post non file è passato: ".$_POST['MAX_FILE_SIZE'];
}
endif;
?>
codice:nulla mi dispiace , ma almeno il post non file è passato: 1548576
Si ovvio che puoi mandare dei dati al form di un altro sito. Non sono sicuro tu possa inviare file.
la funzione l'ho presa dal manuale ma non capisco perchè non funzioni
PS. anche se non da alcun tipo errore