0

9Lessons tutorialを使用して、PHP で画像のサイズを変更する方法を学びません。これらのサイズ変更されたファイルを、帯域幅が高価な Web サーバーに保存する代わりに、S3 クラスを使用して、S3 のバケットである CDN にアップロードしたいと考えています。

これが私のコードです(すべてのエラーチェックとファイル処理を削除しました。JPEGのみを処理でき、ファイルは任意のサイズにできるなどとコメントしないでください):

<?php

if($_FILES["file"]["name"]) {

    $filename = stripslashes($_FILES['file']['name']);
    $uploadedfile = $_FILES['file']['tmp_name'];
    $src = imagecreatefromjpeg($uploadedfile);

    list($width,$height)=getimagesize($uploadedfile);
    $newwidth=200;
    $newheight=($height/$width)*$newwidth;
    $tmp=imagecreatetruecolor($newwidth,$newheight);

    imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);

    $filename = "small/".time().'.'.trim($_FILES['file']['name']);

    if(imagejpeg($tmp,$filename,100)) {
        imagedestroy($src);
        imagedestroy($tmp);
    }

    require('/path/to/S3.php');  

    if (!defined('awsAccessKey')) define('awsAccessKey', '');  
    if (!defined('awsSecretKey')) define('awsSecretKey', '');  

    $s3 = new S3(awsAccessKey, awsSecretKey);

    $put = S3::putObject(
        S3::inputFile($tmp),
        "bucket",
        $uploadFilename,
        S3::ACL_PUBLIC_READ,
        array(),
        array(
            "Cache-Control" => "max-age=315360000",
            "Expires" => gmdate("D, d M Y H:i:s T", strtotime("+5 years"))
        )
    );
    var_dump($put);
}

?>

このスクリプトを実行すると、S3 クラスは$tmp、ファイルではなくリソースであるというエラーを返します。ファイルを作成するために必要なことは理解してimagejpeg()いますが、この時点でどのように S3 にアップロードできますか? イメージを作成してローカルに保存し、S3 にアップロードしてから削除する必要がありますか? または、私の問題に対するより良い解決策はありますか? 私はこれを完全に間違った方法で行っていますか?

4

1 に答える 1

1
$put = S3::putObject(
    S3::inputFile($filename), //<- Here changes $tmp for $filename
    "bucket",
    $uploadFilename,
    S3::ACL_PUBLIC_READ,
    array(),
    array(
        "Cache-Control" => "max-age=315360000",
        "Expires" => gmdate("D, d M Y H:i:s T", strtotime("+5 years"))
    )
于 2012-09-03T20:06:02.830 に答える