2010-12-12 7 views
3

画像を取り込み、それを.jpgに変換するスクリプトがあります。PHP:imagemagickは空の画像を変換で作成します

$uploadDir = $_SERVER['DOCUMENT_ROOT'] . "/blogimages/"; 
$tempFile = ereg_replace("'", "_", basename($_FILES['newsImg']['name'])); 
$uploadFile = $uploadDir . $tempFile; 
move_uploaded_file($_FILES['newsImg']['tmp_name'], $uploadFile); 
$newPic = $uploadDir . $blogID . ".jpg"; 
if(file_exists($newPic)){ 
unlink($newPic); 
} 
$convertString = "$IM -strip $uploadFile $newPic"; 
echo "<!-- $convertString -->"; 
exec($convertString); 

私が最終的な文字列をHTMLコメントに入れて、何が実行されているかを確認することができます。変換されたイメージは作成されますが、0バイトのイメージです。したがって、ファイルには実際にデータは書き込まれません。ちょうど変換が本当に正常に動作していることを確認するために、変換文字列をHTMLコメントからコマンドラインにコピーして貼り付けてください。それはPHPのexecの中で問題を抱えているようです。これがなぜ起こったのかについての考えはありますか?

+2

$ IMとは何ですか$ _FILES ['newsImg'] ['tmp_name']でエラーチェックをしましたか? –

+0

PHP imagick拡張機能を使用すると、エラーをデバッグするのが簡単になります(通常のPHPエラーチェッカーを使用して問題が報告されるため)、パフォーマンスが向上します(画像を変換する新しいプロセスを起動する必要がないため)。あなたの問題を直接解決するわけではありませんが、デバッグが役に立ちます。 –

+0

私は残念なことにPHPに拡張機能を追加できません。共有ホスティングなので、php.iniにアクセスすることはできません。 – LoneWolfPR

答えて

1

まず、$_FILES['newsImg']['name']で何らかのエラーチェックを行い、それに続いてmove_uploaded_file(...)が成功したことを確認してください。

+0

私は多くの措置を講じました。 $ IMは、imagemagickの単なるパスです。それ以外の場合は、空白のファイルを作成しない場合もあります。私もmove_uploaded_fileが成功したと確信しています。私はフォルダをチェックした。私はそれを2つのステップに分けた。私はこのスクリプトを単純にアップロードを処理しました。それから、それが終わったとき。私は完全にアップロードされた画像で作業していることを知っているので、変換を処理する別のスクリプトを実行しました。私は同じ空白の画像を取得します。私はちょうどそこに働くことからこれを保っているPHPのいくつかの奇妙な設定があるのだろうかと思っています。おそらく – LoneWolfPR

+0

パーミッション?ファイルを移動しているフォルダにexec()を実行しているユーザーへの書き込み権限がありますか? –

+0

すべての権限をダブルチェックしました。 – LoneWolfPR

2

コマンドを実行しようとすると、アップロードファイルハンドルが閉じられていない可能性がありますか?そうすれば、Imagemagickは不完全なファイルを見るでしょう。

コードを見ると、特にファイルが移動しているので、どのように起こるのかわかりませんが、動作を説明します。