2011-06-03 103 views
0

我已经使用函数move_uploaded_file移动已完成的上传。我注意到这不符合目标目录的setgid位,并且具有该文件原来的内容。 (我了解到这是Linux行为)。PHPs move_uploaded_file不尊重setgid

什么是解决问题的好方法?我曾考虑将文件加载到PHP并保存,但文件可能相当大,为50MB +,这意味着更多的PHP内存使用。

+0

你可以尝试使用'shell_exec'调用shell脚本形式的php来调用移动。如果你想让它成为web服务gid,那么不用mv,而是在shell脚本中做一个'cat',并将它写入一个新文件,然后'解除链接'旧文件。如果你想要一个不同的,你需要做一个'su -',但这可能需要更多的工作。 – 2011-06-03 21:23:26

回答

1

您可能会也可能不会访问system调用,但system("cp")甚至明确chgrp可能会做你想做的,只要服从setgid位。如果目标目录不同于目标目录,则可能需要进行一些调查以获取现有组。

0

尝试构建在rename而不是move_uploaded_file()中的PHP。

+0

我无法重命名以尊重setgid。 – 2013-02-09 12:47:54

0

我在13年初回到了这个问题,并用copy替换move_uploaded_file来修复它。 我并不了解实际的性能和内存影响,但似乎并不相关。