文件权限

exu*_*sum 6 permissions php symlink

我有一个运行符号链接的 PHP 脚本。

要确认它是哪个用户:

file_put_contents("testFile", "test");
$user = fileowner("testFile");
unlink("testFile");
echo "running as user '" . $user . "'";
var_dump( exec('whoami'));
Run Code Online (Sandbox Code Playgroud)

就这样跑...

$ php script.php
Run Code Online (Sandbox Code Playgroud)

正确运行所有符号链接,输出为:

running as user '999'string(5) "admin"
Run Code Online (Sandbox Code Playgroud)

通过 shell 脚本运行:

#!/bin/sh
php /path/to/script.php
Run Code Online (Sandbox Code Playgroud)

给出以下输出并且不起作用:

PHP 警告:symlink(): 权限被拒绝在第 8 行的 /path/to/script.php 中以用户 '999'string(5) "admin" 身份运行

我不确定两者之间的区别是什么,因为它们运行的​​用户是相同的。

关于如何使它们都具有正确的符号链接权限的任何建议?


cat /proc/version
Run Code Online (Sandbox Code Playgroud)

给出:

Linux version 2.6.39 (root@cross-builder) (gcc version 4.6.3 (x86 32-bit toolchain - ASUSTOR Inc.) ) #1 SMP PREEMPT Thu Oct 31 21:27:37 CST 2013
Run Code Online (Sandbox Code Playgroud)

这是我可以为任何类型的发布信息生成的唯一输出。


所有代码:

$files = scandir('/volume1/dir1');
$base = "/volume1/";
foreach($files as $file) {
        $f_letter = $file{0};
        $new_path = $base . "ByLetter/" . strtoupper($f_letter) . "/" . $file;
        if(ctype_alpha ($f_letter) && !is_link($new_path)) {
                var_dump($base. "TV/" . $file);
                var_dump($new_path);
                symlink ($base . "TV/" . $file , $new_path);
        }


}
Run Code Online (Sandbox Code Playgroud)

为 var dumps 两种方法提供相同的输出。

tot*_*tti 1

尝试使用绝对路径。该代码unlink("testFile");在当前工作目录中查找文件。pwd 根据当前工作目录而变化。所以使用unlink("/path/to/testFile");