2013-06-24 15 views
15

sto progettando di caricare le immagini su Imgur in forma anonima utilizzando il suo api, ho registrato la mia domanda nella categoria caricamento anonimo e ottenuto id cliente e segreto cliente, Come usare php per caricare un'immagine imgur e recupera l'url diretto all'immagine? qualcuno può suggerire collegamenti a qualsiasi esempio? questo è ciò che ho cercato di fare, ma ottengo l'errore "Fatal error: tempo di esecuzione massimo di 30 secondi superato"utilizzando imgur API v3 per caricare le immagini in forma anonima utilizzando PHP

<?php 

$client_id = :client_id; //put your api key here 
$filename = "images/q401x74ua3402.jpg"; 
$handle = fopen($filename, "r"); 
$data = fread($handle, filesize($filename)); 

//$data is file data 
$pvars = array('image' => base64_encode($data), 'key' => $client_id); 
$timeout = 30; 
$curl = curl_init(); 

curl_setopt($curl, CURLOPT_URL, 'https://api.imgur.com/3/upload.json'); 
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); 
curl_setopt($curl, CURLOPT_POST, 1); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $pvars); 
$xml = curl_exec($curl); 
$xmlsimple = new SimpleXMLElement($xml); 
echo '<img height="180" src="'; 
echo $xmlsimple->links->original; 
echo '">'; 

curl_close ($curl); 

?> 
+1

Di fronte allo stesso problema, si prega di condividere se si è in grado di trovare una soluzione. – user434885

+0

Hai provato ad aprire l'immagine in modalità 'rb'? –

+0

Se si esegue nel limite massimo di tempo di esecuzione perché ci vuole a lungo per caricare l'immagine, allora si hanno due opzioni: o aumentare il limite sul server, se possibile, o trovare un altro modo per caricare l'immagine (forse da solo dando immagine URL e fare scaricare il servizio dal server stesso, se offrono tale opzione). A proposito, un caricamento di immagine "normale" con una dimensione dell'immagine ragionevole dovrebbe durare appena 30 secondi se il tuo server ha una connessione sufficiente. – CBroe

risposta

7

trovato l'errore, ho bisogno di inviare i dettagli di autorizzazione come intestazione, esempio di codice

<?php 
$client_id = 'xxxxxxxx'; 

$file = file_get_contents("test-image.png"); 

$url = 'https://api.imgur.com/3/image.json'; 
$headers = array("Authorization: Client-ID $client_id"); 
$pvars = array('image' => base64_encode($file)); 

$curl = curl_init(); 

curl_setopt_array($curl, array(
    CURLOPT_URL=> $url, 
    CURLOPT_TIMEOUT => 30, 
    CURLOPT_POST => 1, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_HTTPHEADER => $headers, 
    CURLOPT_POSTFIELDS => $pvars 
)); 

$json_returned = curl_exec($curl); // blank response 
echo "Result: " . $json_returned ; 

curl_close ($curl); 

?> 
+10

Penso che tu intenda che hai trovato l'errore dopo aver visto il mio codice. – h0tw1r3

+0

in realtà l'errore non è da nessuna parte, solo che inserire intestazioni tra virgolette e non utilizzare concatenazione di stringhe ha funzionato in modo strano;) la tua risposta mi ha aiutato e grazie per questo :) – scottydelta

+2

@ h0tw1r3 lol I appreacite il tuo duro lavoro :) l'ho trovato oggi e mi ha aiutato molto. la documentazione delle API di Imgur è scarsamente ricca di esempi, quindi speravo di trovare un thread Stack proprio come questo per iniziare. Complimenti. – Jake

26

invio del client_id in una variabile post è il problema. Deve essere inviato nell'intestazione della richiesta. Inoltre, stai richiedendo una risposta JSON, ma stai cercando di analizzarlo come XML.

<?php 

$client_id = "FILLMEIN"; 
$image = file_get_contents("img/cool.jpg"); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://api.imgur.com/3/image.json'); 
curl_setopt($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Client-ID ' . $client_id)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => base64_encode($image))); 

$reply = curl_exec($ch); 
curl_close($ch); 

$reply = json_decode($reply); 
printf('<img height="180" src="%s" >', $reply->data->link); 

aggiornamento 1

Live functional example con and source basato su questo codice con uscita di debug.

+0

Non sta andando in timeout, ma sto ricevendo un errore che dice" Cercando di ottenere la proprietà di non oggetto in C: \ xampp \ htdocs \ path \ imgur.php sulla riga 20 "e la linea 20 è la linea printf. – scottydelta

+0

Aggiungi 'error_reporting (E_ALL);' all'inizio dello script. La richiesta di arricciatura non riesce per qualche motivo. – h0tw1r3

+0

Verifica ** aggiornamento 1 ** collegamenti per un esempio dal vivo. Sembra che qualcosa non funzioni nel tuo ambiente locale. – h0tw1r3

5

Se avete problema con lo scritto sopra, provare il salto ricciolo SSL in questo modo verificare:

curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false);

Problemi correlati