13

販売後のカスタマーサービス企業向けのイントラネットを作成しています。従業員はイントラネットのサーバーにimgファイルをアップロードできる必要があり、私はそれらをBEFORE www(Webサイトのルートディレクトリ)のあるディレクトリに保存する必要があります。

phpを使用してこれを行うのは非常に簡単ですが、アップロードされたこれらのimgをWebサイトに含めるにはどうすればよいですか?このコードを試しました

<img src="../img/img.png"/>

サーバーのディレクトリの外にあるとファイルを送信できないため、これは機能しませんwww...

それを行う適切な方法はありますか?

現在のツリービュー:

server root directory
           |www
               |(all server files)
           |img
               |(all img files)

(サーバーのindex.phpはにwwwあり、ファイルはにありますimg

4

5 に答える 5

18

Webディレクトリ外のファイルに直接アクセスすることはできません。あなたの質問にはPHPというタグも含まれているので、それを使用したいと思うかもしれません。

あなたができることは次のとおりです。

wwwディレクトリ内に、次のような内容の「image.php」ファイルを作成します。

<?php
  header('Content-Type: image/png');
  readfile("../img/" . $_GET['img']);
?>

そして、あなたの画像を

<img src="image.php?img=myimage.png" />

PHPファイルはそれほど単純であってはならないことに注意してください:)複数の画像形式に対処したい(そしてそれらに正しいヘッダーを提供したい)ので、悪意のあるファイルパス/インクルージョンをチェックします($を使用したくない_入力を検証/サニタイズせずにGET)、追加のキャッシングなどなど。

しかし、これにより、問題をどのようにターゲットにできるかについてのアイデアが得られるはずです。

于 2012-11-13T09:26:39.657 に答える
7

それはあなたが何を達成しようとしているのか、そしてどのように達成しようとしているのかによります。「単純な」htmlコマンドを使用すると、ご存知のとおりです。wwwルートの外部のディレクトリに移動することはできません。(たとえば、C上のxamppアプリケーションの場合、ほとんどの場合c:\ xampp \ htdocsです)。

サーバーサイドコマンドを使用して達成したいことを実行することに問題がない場合は、PHPを使用して、PHPを介して適切なファイルを読み取ることにより、回避策を実行できます。たとえば、ファイルの名前が「myimg.gif」で、「c:\pics」にある場合

<img SRC="data:image/gif;base64,<?php echo base64_encode(file_get_contents("c:\pics\myimg.gif"));?>">

これで、ファイルの内容を読み取り、それをimgタグに直接書き込むことになります。image/gifを本当に必要なものに変更する必要があることに注意してください。

于 2012-11-13T09:29:05.803 に答える
5

ルートディレクトリ(wwwまたはpublic_html)の外/上にあるファイルに直接アクセスすることはできません。

Apacheサーバー構成で仮想ディレクトリを作成できます。詳細については、Googleの「apache仮想ディレクトリ」を参照してください。

仮想ディレクトリの構成例:

<IfModule alias_module>
  Alias /uploaded_images/ "/home/someuser/somewhere"
  <Directory "/home/someuser/somewhere">
    Allow from all
  </Directory>
</IfModule>

uploaded_imagesディレクトリは、wwwディレクトリの通常のディレクトリと同様にWebから利用できます。そこから別の場所にファイルをコピーできます(一種のバッファリング)。

apacheで何も変更せずに、phpレベルからftpでそのファイルを開いたりコピーしたりすることもできますが、これは非常に遅い場合があります(apache configを制御できない場合にのみ使用してください。仮想ディレクトリの方がはるかに優れています)。

php.net:FTP

于 2012-11-13T09:17:51.213 に答える
1

仮想ディレクトリの作成に関する@kamilの考えに同意します。ただし、phpルートを使用する場合は、WWWの前のディレクトリにある画像を開いてwww/imagesフォルダーにコピーするコードを記述しました。

<?php 
$imagepath = "../images/";
define('IMGPATH', realpath($imagepath).DIRECTORY_SEPARATOR);
$cachewwwimg = "images/";
$imagename = 'image.jpg';
copy(IMGPATH.$imagename, $cachewwwimg.$imagename)
?>

<img src="<?php echo $cacheimg.$imagename;?>"/>
于 2012-11-13T09:49:20.413 に答える
0

ホスティング上のグローバル物理フォルダーを指すシンボリックリンクを作成するだけで、これを解決しました。ルートアクセス権がなかったので、symbolic_link.phpという名前の単純なPHPファイルを作成しました。これをWebサイトのルートに配置すると、シンボリックリンクが作成されます。ここにあります:

<?php
$target = '/home/<user>/images/';   // hosting physical directory
$link = 'images';                   // symbolic link inside root of web site
unlink($link);
symlink($target, $link); 

シンボリックリンクを作成した後、ファイルを削除しました。

これはホスティングディレクトリの構造です。

/home/<user>                        // hosting root   
|
+--/images                          // hosting global dir
|  |
|  +--/logo.png                     // global image
|
+--/www.website.com                 // hosting website dir
   |
   +--/images                       // symbolic link

これで、画像をWebサイトフォルダにあるかのように使用できます。

<img src="https://www.website.com/images/logo.png" alt="..."> 
于 2021-01-27T15:56:51.930 に答える