我正在尝试在 php 中创建一个文件夹,并且每次使用它/tmp/...
作为路径的代码类型都会失败:
exec("mkdir -p /tmp/test/ 2>&1", $output, $return_code);
// $output is empty, $return_code is 0
//mkdir("/tmp/test/"); // Alternative to above
is_dir("/tmp/test/"); // returns true
is_readable("/tmp/test/"); // returns true
但是,如果我检查/tmp
-Folder 则没有这样的目录,并且该文件夹的所有后续写入或读取操作都会失败,因为该文件夹不存在。的权限/tmp
是正确的(root:root with 777),我可以sudo -u http mkdir -p /tmp/test
毫无问题地做。例如,如果我使用tmp/test
,代码将运行良好并在 php-skript 的目录中创建一个文件夹(位于属于我的文件夹中,而不是 http-user ...)
关于为什么 php 无法在下面创建文件夹/tmp/
但报告它存在的任何想法?
编辑:指定读取和写入操作:这些操作不是来自我自己的脚本,而是由 php 脚本调用以执行不同任务的外部脚本。一旦所有这些都成功,该文件夹就会被压缩并复制到其他地方。
编辑:运行后exec("mkdir -p /tmp/testfolder");
[daishy@littlezombie tmp]$ pwd
/tmp
[daishy@littlezombie tmp]$ ls -al
insgesamt 8
drwxrwxrwt 21 root root 440 3. Aug 18:56 .
drwxr-xr-x 20 root root 4096 10. Jun 16:49 ..
drwxrwxrwt 2 root root 40 3. Aug 09:42 .font-unix
drwxr-xr-x 2 daishy users 60 3. Aug 14:40 hsperfdata_daishy
drwxrwxrwt 2 root root 60 3. Aug 09:42 .ICE-unix
drwx------ 2 daishy users 60 3. Aug 12:35 kde-daishy
drwx------ 2 daishy users 140 3. Aug 18:49 ksocket-daishy
drwx------ 3 root root 60 3. Aug 18:54 systemd-private-5rIfGj
drwx------ 3 root root 60 3. Aug 09:42 systemd-private-HGNW9x
drwx------ 3 root root 60 3. Aug 09:42 systemd-private-od4pyY
drwx------ 3 root root 60 3. Aug 09:42 systemd-private-qAH8UK
drwxrwxrwt 2 root root 40 3. Aug 09:42 .Test-unix
drwx------ 4 daishy users 80 3. Aug 16:55 .Trash-1000
-r--r--r-- 1 root root 11 3. Aug 09:42 .X0-lock
drwxrwxrwt 2 root root 60 3. Aug 09:42 .X11-unix
drwxrwxrwt 2 root root 40 3. Aug 09:42 .XIM-unix
编辑:事实证明,这不是 php 的问题,而是 systemd / apache 的问题。简而言之:systemd 在运行时为 apache 创建一个私有 tmp 文件夹,该文件夹位于 /tmp/systemd-private-XYZ 下。所以真实/tmp
的不是由 php-skript 看到的,而是私有的。有关更多信息,请参见http://blog.oddbit.com/post/private-tmp-directories-in-fedora。