我有一堆JavaScript文件,我想缩小,然后将其缓存到文件中。此文件将保存到我提供的位置作为参数。
如何确保可以从网络访问该位置?
到目前为止我尝试过:
$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));
}
这大部分时间都有效,但是例如,如果该文件位于虚拟主机目录或链接文件夹中,则会失败。有没有更好的方法?
注意:我的问题是确保
“我生成的文件位于网络已知的位置 服务器并映射到URL。“
答案 0 :(得分:2)
可以从网络访问是一回事,拥有“公共读取权限”是另一回事。你不需要一个人去做另一个。
通常,“公共读取访问”是指特定于操作系统的文件系统权限。可从网上访问意味着:
它位于Web服务器已知的目录中 - 也就是说,Web服务器将文件系统位置映射到URL。
文件(和封闭目录)的权限使得Web服务器进程可以读取文件(对于静态文件),并且可以执行文件(对于从作为运行的处理程序运行的脚本)与Web服务器相同的用户。)
因此,在您的情况下,您需要确保:
该脚本作为与Web服务器相同的用户运行 - 通常就是这种情况,但在某些情况下,您的脚本可能以不同的系统用户身份运行。
您生成的文件位于Web服务器已知的位置,并映射到URL。
最后,您生成的文件的权限(特别是如果执行脚本的用户与Web服务器进程不同),具有基于系统布局的正确权限。
在大多数类Unix系统上,Web服务器以www
或apache
运行。关于debian的www-data
。
通常,静态文件需要八进制权限644
,即rw
的所有者,其余只能读取。在ls -l
列表中,如果目录不属于服务器进程,则文件为-rw-r--r--
。
为了解决访问权限问题,apache wiki有提示。
答案 1 :(得分: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";
?>
干杯,