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 两种方法提供相同的输出。
尝试使用绝对路径。该代码unlink("testFile");
在当前工作目录中查找文件。pwd 根据当前工作目录而变化。所以使用unlink("/path/to/testFile");