2011-11-08 8 views
3

後にPHPで画像のサイズを変更すると、誰もが、私は次の問題を解決できる方法を教えてもらえます:のfile_get_contents

include('php/resizeImage.php'); 

if($_POST['uploadlink']){ 
    $url = $_POST['uploadlink']; 
    $urlImage = file_get_contents($url); 

    if ($_POST['filename']){ 
     $filename = $_POST['filename'].".jpg"; 
    } else { 
     $urlinfo = parse_url($url); 
     $filename = basename($urlinfo['path']); 
    } 

    $image = new ResizeImage(); 
    $image->load($filename); 
    $image->resizeToWidth(300); 
    $image->save($filename); 

    file_put_contents("images/upload/".$filename, $urlImage); 

    } 

私は私resizeImageスクリプトそこを通ってサイズを変更したいURLからのfile_get_contentsから画像データを受信した後画像のファイル名をパラメータとして取ります。

編集:ResizeImage機能の負荷とresizeToWidth:

function load($filename) { 

     $image_info = getimagesize($filename); 
     $this->image_type = $image_info[2]; 
     if($this->image_type == IMAGETYPE_JPEG) { 

     $this->image = imagecreatefromjpeg($filename); 
     } elseif($this->image_type == IMAGETYPE_GIF) { 

     $this->image = imagecreatefromgif($filename); 
     } elseif($this->image_type == IMAGETYPE_PNG) { 

     $this->image = imagecreatefrompng($filename); 
     } 
    } 

function resizeToWidth($width) { 
     $ratio = $width/$this->getWidth(); 
     $height = $this->getheight() * $ratio; 
     $this->resize($width,$height); 
    } 

、ユーザが入力タイプ=「ファイル」を介してローカルの画像を選択したとき、私は何の問題それをやってを持っていません。

if (isset($_FILES["uploadedfile"])){ 
     $ufilename = $_FILES["uploadedfile"]["name"]; 
     $ufiletmpname = $_FILES["uploadedfile"]["tmp_name"]; 

     $image = new ResizeImage(); 
     $image->load($ufiletmpname); 
     $image->resizeToWidth(300); 
     $image->save($ufiletmpname); 
} 

もう一つの問題: 私は、ユーザーごとに個別のフォルダを作成したいので、私は私のスクリプトにユーザーの名前を転送するので、彼らは唯一、自分のアップロードした画像を見ることができます。

$admin = $_GET['admin']; 
file_put_contents("images/upload/".$admin."/".$filename, $urlImage); 

なぜ私にとってはうまくいかないのですか?

ありがとうございました。

答えて

1

ResizeImageとは

それは私だったら、私がやるだろう:

$data = file_get_contents($name); 

$image = imagecreatefromstring($data); 

// resize the image 
+0

私はそれを試みます。ありがとう。 ResizeImageは "私自身の"クラスです。私は、元のmsg –

+0

にloadとresizeToWidth関数を挿入しましたが動作しません。私はimagecreatefromstringを作成した後にイメージのサイズを変更できますが、$ imageをパラメータとしてfile_put_contentsを使用することはできません。 –

+0

'file_put_contents()'を使う必要はありません。代わりに、 'imagepng($ image、$ filename);を使用してください。また、この拡張モジュールのPHPドキュメントを読むべきです... – Christian

2

簡単。
あなたのコードを変更する ResizeImageクラスを使用すると、ファイル名に加えて画像のバイナリコンテンツを操作できるようになります。

あなたの2番目の質問も非常に簡単です。
PHPインストールをセットアップして画面にエラーを表示させるようにしてください(開発サーバーの場合はもちろんです)、あなたの質問に対する正確な答えが表示されます。

error_reporting(E_ALL); 
ini_set('display_errors',1); 

通常役立ちます。
(あなたのコードは、あなたからのエラーメッセージを隠す可能性のあるHTTPリダイレクトを行わないようにしてください)

+0

ありがとうございます。自分でresizeImageクラスを作成していないが、私は試してみる。 –

1

最初の質問では、ResizeImageは自分のクラス、またはネットからダウンロードしたものです。あなたを助けるために、私たちはそれを見る必要があります。

2番目の部分では、file_put_contentsはディレクトリを作成しないため、mkdir関数を使用する必要があります。

+0

さて、私はすでに$ adminと同じ名前のフォルダをサーバーにあらかじめ作成しようとしていましたが、どちらも動作しませんでした –

+0

mkdirを試しました。フォルダを作成することさえできません。 FTPにいくつかの制限がありますか? –

+0

それはおそらく許可問題です - あなたのPHPスクリプト(Webサーバー)のユーザーは、ターゲットディレクトリを書き込むことはできません。これはftpプロトコル/サーバとは関係ありません。フォルダの権限を変更する必要があります。 – Dutow