1

PHP経由で画像をIMGURにアップロードしようとしています。これはコードです:

<?
$filename = "image.jpg";
$handle = fopen($filename, "r");
$data = fread($handle, filesize($filename));

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

curl_setopt($curl, CURLOPT_URL, 'http://api.imgur.com/2/upload.xml');
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);

curl_close ($curl);

?>

これは私が受け取るエラーメッセージです:

警告: fopen(image.jpg) はストリームを開くことができませんでした: そのようなファイルまたはディレクトリはありません

$filename = "image.jpg"; の部分がわかりません。base64で生成された文字列なので、ファイル名はどこから来たのですか? ありがとう、ボブ

4

2 に答える 2

2

この警告は、スクリプトが実行されているディレクトリから fopen がファイル image.jpg を読み込もうとしているためです。curl を介してファイルを転送する方法の良い例は、ここで見ることができます

PHP のフォーム POST から cURL 経由でファイルを送信する

$localFile = $_FILES[$fileKey]['tmp_name']; がある場所 $localFile = '/path/to/image.jpg'; とします。サーバー情報を変更し、imgur に渡す必要があるその他の変数を追加します。

于 2011-04-12T19:20:54.820 に答える
0

行 1 を次のように変更します。

$filename = "image.jpg";

に:

$filename = $_FILES['uploaded_file']['tmp_name'];

次に、投稿するには...次のようなフォームをお勧めします。

    <form enctype="multipart/form-data" method="post" action="upload.php" target="my_iframe">
    Choose your file here:
    <input name="uploaded_file" type="file"/>
    <input type="submit" value="Upload It"/>
    </form>
<!-- when the form is submitted, the server response will appear in this iframe -->
<script language="JavaScript">
<!--
function autoResize(id){
    var newheight;
    var newwidth;

    if(document.getElementById){
        newheight=document.getElementById(id).contentWindow.document .body.scrollHeight;
        newwidth=document.getElementById(id).contentWindow.document .body.scrollWidth;
    }

    document.getElementById(id).height= (newheight) + "px";
    document.getElementById(id).width= (newwidth) + "px";
}
//-->
</script>

<IFRAME name="my_iframe" width="100%" height="200px" id="iframe1" marginheight="0" frameborder="0" onLoad="autoResize('iframe1');"></iframe>

すべての php を upload.php に入れ、そのフォームを同じディレクトリ内のページに配置すると、ほぼ機能します...ソースにまだ API_KEY がない場合を除きます。ここで API キーを取得できます: https://imgur.com/register/api_anon

最終的に、php は次のようになります。

    <?
    if( isset($_FILES['uploaded_file']) )
{
    $IMGUR_API_KEY = 'u432ewriuq3oirefuie'; //put your api key here
    $filename = $_FILES['uploaded_file']['tmp_name'];
    $handle = fopen($filename, "r");
    $data = fread($handle, filesize($filename));

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

    curl_setopt($curl, CURLOPT_URL, 'http://api.imgur.com/2/upload.xml');
    #curl_setopt($curl, CURLOPT_URL, 'http://api.imgur.com/2/gallery.xml');
    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);
    }
?>
于 2013-01-30T04:11:51.640 に答える