无法将文件保存在Web根目录之上?

时间:2012-03-01 04:34:12

标签: php save

我正在尝试将用户上传的文件保存在网络根目录下,以防止在未经许可或直接链接的情况下检索该文件。

保存到web根目录下的文件夹时,上传工作正常。

例如,该页面由D:\xampp\htdocs\foo\提供,脚本在D:\xampp\htdocs\foo\library\运行。当我保存到../../uploads/时,页面会解析为http://my.local/uploads/image.jpg

但是,当我保存到$_SERVER['document_root'] . '../uploads/'时,上传失败且D:\xamp\htdocs\uploads没有文件,尽管我已经验证路径正在解析到脚本中的正确位置,并且文件夹存在并具有读/写/执行。

我的本​​地开发环境是基于Windows的,但我的生产服务器将是一个Linux服务器。

5 个答案:

答案 0 :(得分:2)

您的代码中似乎存在大量的拼写错误。

  • $_SERVER['DOCUMENT_ROOT']不是$_SERVER['document_root']
  • ../uploads/不是.../uploads/
  • 谁知道还有什么

有一些规则要遵循。

  • 始终在E_ALL
  • 上显示error reporting
  • 始终在开发服务器上启用display_errors
  • 始终关注您看到的每条错误消息。

你将能够自己解决大部分问题

然而,如果你仍然不能 - 还有一些其他规则

  • 总是发布确切的真实代码,而不是你匆忙写的一些存根。要求人们在您运行的代码中找不到错误是没有意义的!你只是在浪费别人的时间。
  • 始终发布错误消息。编程是一门精确的科学。要解决问题,程序员必须阅读错误消息的含义并采取明智的操作。不要猜测原因并采取随机行动。

答案 1 :(得分:2)

好消息,阿帕奇正在拯救你一个悲伤和痛苦的世界!

想象一下,如果我将reallybad.exe重命名为svchost.exe并将其上传到C:\WINDOWS\system32\svchost.exe

您可以通过将网络目录中的文件夹中的符号链接添加到所需目录来实现此目的。

答案 2 :(得分:0)

你说When I save to $_SERVER['document_root'] . '.../uploads/', 但我注意到里面有几件事 1.你上传/上传前有三个点,但无法正常解决 2.你正在混合使用windows .... \ notation和linux表示法../../这可能会混淆xamp 3.如果$_SERVER['document_root'] is D:\xamp\htdocs\ 然后$_SERVER['document_root'] . '..\uploads\' is D:\xamp\uploads 不是D:\xamp\htdocs\uploads

因为你没有确切地说$_SERVER['document_root']指的是什么,我无法确定。

答案 3 :(得分:0)

所以,实际上,我在网上找到的上传脚本没有使用它声称使用的变量,这就是为什么我没有收到错误错误消息。结果是文件被保存,只是保存到不同的目录。我不得不在几个地方调整代码,但它现在运行。感谢。

答案 4 :(得分:-1)

更好的解决方案可能是将其存储在您的网络根目录中没有世界读取权限的文件夹中。这将以您需要的方式阻止访问。