0

縮小してファイルにキャッシュしたいJavaScriptファイルがたくさんあります。このファイルは、引数として指定した場所に保存されます。

場所がWebからアクセス可能であることを確認するにはどうすればよいですか?

私がこれまでに試したこと:

$test = array
(
    '/Users/www/htdocs/test/nhecos/cache/test.js',
    '/Users/www/foo.js'
);
$host = 'http://localhost/';

foreach($test as $t) {
    $url = str_replace($_SERVER['DOCUMENT_ROOT'], $host, $t, $count);
    $perms = substr(sprintf('%o', fileperms($t)), -4);
    $p = substr($perms, -1);

    if ($count > 0 && $p >= 4) 
        print $url;
    else 
        throw new \Exception(sprintf("File %s not accessible from Web!", $t));
}

これはほとんどの場合機能しますが、たとえば、そのファイルが仮想ホストディレクトリまたはリンクされたフォルダにある場合は失敗します。より良い方法はありますか?

注:私の問題は、

「私が生成するファイルは、Webサーバーに認識されており、URLにマップされている場所にあります。」

4

2 に答える 2

2

Webからアクセスできることと、「パブリック読み取りアクセス」を持つことは別のことです。片方がもう片方をする必要はありません。

通常、「パブリック読み取りアクセス」とは、OS固有のファイルシステムのアクセス許可を意味します。Webからアクセスできるということは、次のことを意味します。

  1. これは、Webサーバーに認識されているディレクトリにあります。つまり、ファイルシステムの場所はWebサーバーによってURLにマップされます。

  2. ファイル(およびそれを囲むディレクトリ)のアクセス許可は、Webサーバープロセスがファイルを読み取り(静的ファイルの場合)、ファイルを実行できるようにします(Webと同じユーザーとして実行されるハンドラーから実行されるスクリプトの場合)。サーバ)。

したがって、あなたの場合、次のことを確認する必要があります。

  1. スクリプトはWebサーバーと同じユーザーとして実行されます。これは通常の場合ですが、状況によっては、スクリプトが別のシステムユーザーとして実行されている場合があります。

  2. 生成するファイルは、Webサーバーに認識されている場所にあり、URLにマップされています。

  3. 最後に、生成したファイルのアクセス許可(特に、スクリプトを実行するユーザーがWebサーバープロセスと同じでない場合)には、システムのレイアウトに基づいた正しいアクセス許可があります。

ほとんどのUNIXライクなシステムでは、Webサーバーはwwwまたはとして実行されますapache。Debianではそのwww-data

一般に、静的ファイルには8進数のアクセス許可が必要です644。つまり、の所有者rwであり、残りは読み取り専用です。ls -lリストでは、これは、-rw-r--r--ディレクトリがサーバープロセスによって所有されていない場合のファイル用です。

アクセス許可のトラブルシューティングについては、apachewikiにヒントがあります。

于 2012-10-14T03:55:25.783 に答える
0

おそらく、「is_readable」を使用したこの簡単なチェックが役立つでしょう。これは単なる例です。

<?php
    if (is_readable('../../../www')) echo "www is readable"; 
        else echo "www is unaccessible";
    echo '<br/>';
    if (is_readable('../../htdocs')) echo "htdocs is readable"; 
        else echo "htdocs is unaccessible";
?>

指定されたURLを使用してファイルをチェックできるように更新します(file_get_contentsを使用するか、PHPから関数/メソッドをコピーします)。

<?php
    if (@copy('http://.../file.js', 'dummy.file')) echo "file is readable"; 
        else echo "file is unaccessible";
    echo '<br/>';
    if (@file_get_contents('http://.../file.js'))  echo "file is readable"; 
        else echo "file is unaccessible";
?>

乾杯、

于 2012-10-14T04:05:36.840 に答える