PHPでimagejpegを使用して画像を表示する際の問題

mysql php
PHPでimagejpegを使用して画像を表示する際の問題

私が持っている透かし入れスクリプトを使用して問題が発生しています。 スクリプトは次のとおりです。

if (isset($_GET['imgid'])) {
    include "../mysql_connect.php";
    $imgid = $_GET['imgid'];
    $query = "SELECT * FROM img_ref WHERE id='$imgid'";
    $result = mysql_query($query) or die(mysql_error());
    $row = mysql_fetch_array($result);
    $imagesource = "../ajax_uploads/$row[submitter_id]-uploads/$row[filename]";
} else {
    $imagesource =  "../ajax_uploads/" . $_GET['path'];
}
$info = pathinfo($imagesource);
$filetype = $info['extension'];
if($filetype == "gif")  $image = @imagecreatefromgif($imagesource);
if($filetype == "jpg")  $image = @imagecreatefromjpeg($imagesource);
if($filetype == "png")  $image = @imagecreatefrompng($imagesource);
if (!$image) die();
$watermark = @imagecreatefrompng('../images/watermark.png');
// This is the key. Without ImageAlphaBlending on, the PNG won't render correctly.
imagealphablending($image, true);
$imagewidth = imagesx($image);
$imageheight = imagesy($image);
$watermarkwidth =  imagesx($watermark);
$watermarkheight =  imagesy($watermark);
$startwidth = (($imagewidth - $watermarkwidth)/2);
$startheight = (($imageheight - $watermarkheight)/2);
imagecopy($image, $watermark,  $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);

ここで、「パス」変数を​​渡すと、すべてが正常に機能し、想像どおりに画像が正しく表示されます。 ただし、imgid値を渡してデータベースからパスを取得しようとすると、画像は画像としてではなく、画面上の生データで表示されます。

ヘッダーを指定してみました

header("Content-type: image/jpeg");

しかし、それは助けにはなりませんでした。 データベース内の参照を使用してパス名を指定する場合は問題なく動作するため、フォルダのアクセス許可に問題はないようです。 最初の「if」セクションを含めると出力が中断されるように思われますが、どうしてか迷っています。

誰かがこれについて私に何か光を当てることができますか?

どうもありがとう

Dan

更新

さて、「Header( “Content-type:image / jpeg”);」; PHPファイルの先頭に配置されているため、ファイルに直接移動してGET idを入力すると、画像が返されます-これは良いことです(何が変わったのかわかりません)。

しかし、この写真を他の場所に表示することにはまだ問題があるようです。 jqueryプラグインである「fancybox」を使用して画像を呼び出しています。 画像を表示するとき、それはまだ生データを表示しています。 パスを使用すると、問題なく表示されます。GETidオプションを使用すると、何らかの理由で生データが表示されます。 まだ検討中ですが、これまでの提案に感謝します。

  2  0


ベストアンサー

ヘッダーを使用しているようです

header("Content-type: image/jpeg");

画像として表示するように動作するように見えた-しかし、それは何らかの理由でfancyboxで動作しませんでした。 私はAPIを見て、それがイメージであることを実現するようにfancyboxを強制しました:

$.fancybox({
            'href':'processes/process_watermark.php?imgid=' + id,
            'type':'image'
        });

これにより、正しく表示されます。

皆さんの助けに感謝します-そして、SQL攻撃について私に思い出させるすべてのコメント。

3


  1. `mysql_fetch_array`の失敗をチェックしない
    何でも?

  2. たぶんあなたが `pathinfo`に与えるパスは正しくありません。

  3. スクリプトの先頭にあるべきデバッグスクリプト
    error_reporting(E_ALL)

  4. 変化する
    `$ imagesource =” ../ ajax_uploads / $ row [submitter_id] -uploads / $ row [filename] “;`から `$ imagesource =” ../ajax_uploads/ “へ。 $ row [‘submitter_id’]。 「-uploads /」。 $ row [‘filename’]; `

0


タイトルとURLをコピーしました