我有以下两个PHP脚本
remove_directory.php
<?php
start_session();
$userId = $_SESSION['userId'];
exec(escapeshellcmd("rm -rf /var/www/temp/storage/$userId/"));
?>
Run Code Online (Sandbox Code Playgroud)
indirectly_remove_directory.php
<?php
start_session();
exec("nohup php remove_directory.php > /var/www/temp/log.txt &");
?>
Run Code Online (Sandbox Code Playgroud)
当我remove_directory.php从cgi 运行时,它按预期工作,递归删除/var/www/temp/storage/$userId/但是当我indirectly_remove_directory.php从cgi 运行时,它不能按预期工作,因为它递归删除/var/www/temp/storage/.
为什么我运行时会删除整个存储目录indirectly_remove_directory.php?
因为当它在后台时,它是一个命令行PHP脚本,它不会提供内部服务器版本所具有的会话cookie.因此,您将获得一个全新的CLEAN会话,这意味着您的exec调用实际上是:
rm -rf /var/www/temp/storage//
Run Code Online (Sandbox Code Playgroud)
因为$ userID为空/空.
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |