Php 文件内容返回正常,但未创建任何文件

Php 文件内容返回正常,但未创建任何文件,php,file-put-contents,Php,File Put Contents,我正在尝试写入/tmp目录中的一个文件,该目录具有以下权限:drwxrwt。当我从php-a交互式shell执行file\u put\u contents时,它工作正常,并使用提供的内容创建一个文件。在代码中调用此函数时,它返回写入文件的字节数,但在目标目录中未创建任何文件。php和/或apache2日志中没有抛出任何错误 正在代码中进行以下调用 // both $k and $version are defined and have values file_put_contents('/tmp

我正在尝试写入
/tmp
目录中的一个文件,该目录具有以下权限:
drwxrwt
。当我从
php-a
交互式shell执行
file\u put\u contents
时,它工作正常,并使用提供的内容创建一个文件。在代码中调用此函数时,它返回写入文件的字节数,但在目标目录中未创建任何文件。php和/或apache2日志中没有抛出任何错误

正在代码中进行以下调用

// both $k and $version are defined and have values
file_put_contents('/tmp/' . $k . '-version.php', '<?php $version = "' . $version . '";');
Shell命令执行 在代码中添加了shell命令以查看输出:

代码:echo shell_exec('ls/tmp')

输出

fullpagewidgetnew-version.php
在调用之后执行ls/tmp
时,我得到了几个由其他进程创建的其他文件,但它没有我通过代码创建的文件

mongodb-27017.sock  symlink-dummy                                                             systemd-private-64efbd330d8d4df09fc1634371bee3d5-nagios-nrpe-server.service-ZRy81Y  tmp.XwUT7dI5RP
sigdump-1018.log    systemd-private-64efbd330d8d4df09fc1634371bee3d5-apache2.service-aWwjlA   systemd-private-64efbd330d8d4df09fc1634371bee3d5-systemd-resolved.service-wDp3ys
sigdump-1023.log    systemd-private-64efbd330d8d4df09fc1634371bee3d5-do-agent.service-u4rdtA  systemd-private-64efbd330d8d4df09fc1634371bee3d5-systemd-timesyncd.service-IRGXmZ
stat
命令执行 代码:echo shell_exec('ls/tmp')

输出:

string(34) "/tmp/fullpagewidgetnew-version.php"
bool(true)
bool(true)
bool(true)
  File: /tmp
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fc01h/64513d    Inode: 1508        Links: 2
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-01 13:26:33.766987581 +0000
Modify: 2020-11-01 07:00:03.958583691 +0000
Change: 2020-11-01 07:00:03.958583691 +0000
 Birth: -
  File: /
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fc01h/64513d    Inode: 2           Links: 23
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-10-31 18:09:33.585968968 +0000
Modify: 2020-10-21 15:39:29.371174584 +0000
Change: 2020-10-21 15:39:29.371174584 +0000
 Birth: -
直接shell执行
stat/tmp

  File: /tmp
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fc01h/64513d    Inode: 4037        Links: 14
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-01 18:04:39.853667091 +0000
Modify: 2020-11-01 18:01:39.463721617 +0000
Change: 2020-11-01 18:01:39.463721617 +0000
 Birth: -
  File: /
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fc01h/64513d    Inode: 2           Links: 23
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-10-31 18:09:33.585968968 +0000
Modify: 2020-10-21 15:39:29.371174584 +0000
Change: 2020-10-21 15:39:29.371174584 +0000
 Birth: -
Code:echo shell_exec('ls/')

输出:

string(34) "/tmp/fullpagewidgetnew-version.php"
bool(true)
bool(true)
bool(true)
  File: /tmp
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fc01h/64513d    Inode: 1508        Links: 2
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-01 13:26:33.766987581 +0000
Modify: 2020-11-01 07:00:03.958583691 +0000
Change: 2020-11-01 07:00:03.958583691 +0000
 Birth: -
  File: /
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fc01h/64513d    Inode: 2           Links: 23
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-10-31 18:09:33.585968968 +0000
Modify: 2020-10-21 15:39:29.371174584 +0000
Change: 2020-10-21 15:39:29.371174584 +0000
 Birth: -
直接shell执行
stat/

  File: /tmp
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fc01h/64513d    Inode: 4037        Links: 14
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-01 18:04:39.853667091 +0000
Modify: 2020-11-01 18:01:39.463721617 +0000
Change: 2020-11-01 18:01:39.463721617 +0000
 Birth: -
  File: /
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fc01h/64513d    Inode: 2           Links: 23
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-10-31 18:09:33.585968968 +0000
Modify: 2020-10-21 15:39:29.371174584 +0000
Change: 2020-10-21 15:39:29.371174584 +0000
 Birth: -
解决方案 事实证明,在apache的systemd脚本中,
PrivateTmp=true
。这是在tmp目录中创建一个单独的tmp目录


我无法回答该问题,因为它被锁定,这就是为什么在问题中发布解决方案的原因。

请将目标文件名保存在变量中,例如
$path
。然后在
文件\u put\u contents()
调用中使用它,然后添加函数调用
var\u dump($path,file\u exists($path),is\u file($path),is\u writable($path))在调用
文件\u put\u contents()之后。然后,您的问题将包含新的源代码,并将得到的输出添加到问题中。@Progman更新了question@SaqibAhmed因此,路径是存在的,它是一个文件,甚至是可写的,这都是预期的。当你看到它实际存在时,为什么你认为它不存在?@SaqibAhmed请回答你的问题,包括如何执行php脚本以及如何运行
ls/tmp
命令。甚至添加一个
shell_exec('ls/tmp')到您的php脚本。将php脚本和
ls
命令的输出都包含到问题中,这两个命令都来自
shell\u exec()
行以及命令行。@Progman我已经提供了调试详细信息。你能把这个问题标出来吗?