我正在尝试将用户上传的文件保存在网络根目录下,以防止在未经许可或直接链接的情况下检索该文件。
保存到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服务器。
答案 0 :(得分:2)
您的代码中似乎存在大量的拼写错误。
$_SERVER['DOCUMENT_ROOT']
不是$_SERVER['document_root']
../uploads/
不是.../uploads/
有一些规则要遵循。
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)
更好的解决方案可能是将其存储在您的网络根目录中没有世界读取权限的文件夹中。这将以您需要的方式阻止访问。