我在ubuntu上使用php工作。当我在拒绝访问的网页上使用任何图像时,页面上会出现警告。我想在显示之前检查它,如果它没有权限打开,那么给它打开的权限。正如我们在终端命令中所做的那样。
chmod 777 myimage.jpg
如何检查并在php中完全访问文件。
由于
答案 0 :(得分:8)
检查功能is_readable()和is_writable()。
示例:
$filename = '/home/myuser/example.txt';
if (is_readable($filename) && is_writable($filename))
{
echo "File has read and write permissions.";
}
答案 1 :(得分:2)
使用is_readable()检查文件是否可由PHP进程读取。
使用chmod()更改文件的权限。
此外,您可以使用is_writable()来测试是否可以写入文件,并使用file_exists()来检查文件是否存在。
答案 2 :(得分:2)
您可以做的一件事是使用fileowner
函数(和posix_getpwuid
)并与您的PHP用户进行比较(通常是www-data
)。
如果用户相同,您可以根据需要更改权限。但首先要检查文件是否可写。
更新:chmod
和chown
函数在成功时返回TRUE,在失败时返回FALSE,因此将它们放在if子句中是个好主意。您可以通过在脚本开头设置error_reporting(0);
或使用@
符号来抑制错误输出:
if ( @chmod($filename, 0666) ) {
// do whatever with file
}
else if ( @chown($filename, 1000) ) {
chmod($filename, 0666);
// do whatever with file
}
else {
// can't change permissions
}
答案 3 :(得分:1)
每次引用文件时都会从PHP中执行此操作是管理文件的一种非常低效的方法。它还要求通过PHP脚本调解所有文件访问权限。此外,从安全的角度来看,允许内容是世界可写的是相当混乱的。
我会先运行一个管理脚本来整理现有文件的权限,然后在新文件进入系统时解决问题。
当然,如果你没有像webserver uid那样获得shell访问/ shell访问权限,那么你必须使用PHP(因此readdir / is_readable / is_writeable)来实现它。
如果不知道文件在网络服务器上的显示方式,很难推荐具体的解决方案。
下进行。
答案 4 :(得分:0)
要使文件可读/写可执行的一件事是在创建文件/文件夹时调用此函数而不使用第二个参数:
function AutoChmod($path, $chmod = null)
{
if (file_exists($path) === true)
{
if (is_null($chmod) === true)
{
$chmod = (is_file($path) === true) ? 644 : 755;
if (in_array(get_current_user(), array('apache', 'httpd', 'nobody', 'system', 'webdaemon', 'www', 'www-data')) === true)
{
$chmod += 22;
}
}
return chmod($path, octdec(intval($chmod)));
}
return false;
}
示例:
AutoChmod('/path/to/file/you/just/created.txt');
无论您是否使用SuPHP / SuExecPHP,此功能都将给予适当的许可。
要检查权限,您只需使用is_readable()
和is_writable()
。