1

ディスク上のフォルダーにあるファイルを Web ブラウザーから表示したくない

だから私は、ファイル名を取り、画像のブラウザに「エコーを行う」必要があるimage.phpファイルを作成します。

例:

mysite.com/image.php?name=selection.png

ブラウザでユーザーに画像を表示する必要があります。

実際、ブラウザは保存するように求めます。ダウンロードを要求するのではなく、表示したい...

私はこのスニペットを使用しています

header("Content-Type: image/png");
header('Content-Length: ' . filesize($full_file_name));
header("Content-Disposition: inline; filename='$image'");
readfile($full_file_name);
exit(0);

保存して開くと、imgは完璧です。ダウンロードを依頼しない方法は?

編集

  • はい、イメージタグに使用するものが必要です

あなたのほとんどは、画像の作成について教えてくれる私の質問に返信していますが、私の質問はすべて、ブラウザーに何かを表示するように指示し、ユーザーに何かを保存するように依頼するためのさまざまなモードに関するものです。画像の作成についてはもう返信しないでください - あなたはトピックから外れています!

おそらく私の質問、私のタイトルは明確ではありませんが、私の質問は簡単です:

- ユーザーに保存を求めるために画像を表示するようにブラウザに指示する方法

画像作成は機能しています

imag src による画像の使用は機能しています

**しかし、ユーザーが画像をクリックすると、ブラウザにフルサイズの画像を表示する必要があるため、リンクとして画像 src を含む新しいタブが開きます。この状況では、ブラウザは私に保存するように求めます!

編集:

削除する

header("Content-Disposition: inline; filename='$image'");

Firefox の動作は変わりません

4

5 に答える 5

2

試す:

header("Content-type: image/png");
passthru("cat $full_file_name");

この関数は渡されたものをすべて実行するため、ユーザー入力を使用している場合は passthru コマンドに十分注意してください。

https://www.php.net/manual/en/function.passthru.php

ユーザー提供のデータをこの関数に渡すことを許可する場合は、escapeshellarg() または escapeshellcmd() を使用して、ユーザーがシステムをだまして任意のコマンドを実行させないようにします。

于 2013-03-15T15:36:32.043 に答える
1

これを行うには、画像を base64 でエンコードしてから、結果を出力する必要があります。次のような関数を使用できます。

<?php

/**
 * Base64 encodes an image..
 *
 * @param [string] $filename [The path to the image on disk]
 * @param [string] $filetype [The image file type, (jpeg, png, gif, ...)]
 */
function base64_encode_image($filename, $filetype) 
{
    if ($filename) 
    {
        $imgBinary = fread(fopen($filename, "r"), filesize($filename));

        return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
    }
}

そして、次のように結果を画像のソースとして出力します。

$image = base64_encode_image('...name of file', '... file type');
echo "<img src='$image' />';

編集:私はここで棒の端が間違っていると思いますが、まあ!

于 2013-03-15T15:33:13.863 に答える
1

PHP の GD ライブラリを使用できます。

あなたのimage.phpで。

<?php
    header('Content-type: image/png');
    $file_name = $_GET['name'];
    $gd = imagecreatefrompng($file_name);
    imagepng($gd);
    imagedestroy($gd);
?>
于 2013-03-15T15:35:55.247 に答える
0

または、PHP のimagepngを使用することもできます。

imagepng — PNG 画像をブラウザまたはファイルに出力する

<?php
$im = imagecreatefrompng("test.png");

header('Content-Type: image/png');

imagepng($im);
imagedestroy($im);
?>
于 2013-03-15T15:35:33.593 に答える
0

画像のパスがデータベースに保存されている場合、この方法は問題ありません。(MySQLi を使用した例を示しました。これをデータベース API に適合させます)

CREATE TABLE IF NOT EXISTS `PicturePath` (
  `ID` int(255) NOT NULL AUTO_INCREMENT,
  `Path` varchar(255) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0;

    --
INSERT INTO `PicturePath` (`ID`, `Path``) VALUES
(1, 'img/picture.png')
//End DB
// Start script


    $PictureID = $_GET['Name'];

    $Get_Picture = $Conn->prepare("SELECT PicturePath FROM pictures WHERE ID=?");
    $Get_Picture->bind_param('i', $PictureID);
    $Get_Picture->execute();
    $Get_Picture->bind_result($Path);
    $Get_Picture->close();
    echo "<img src='$Path'></img>";

URL パラメータを使用して画像を選択する場合は、上記の方法が最適です。

さもないと:

$Picture = $_Get['Name'];

$Image = imagecreatefrompng($Picture);

header('Content-Type: image/png');

imagepng($Image);

解決策かもしれません

マニュアルはこちら:

http://php.net/manual/en/function.imagepng.php

于 2013-03-15T15:37:35.910 に答える