我已阅读以下教程“Uploading Files To the Server Using PHP” 并且有几个与这些主题相关的问题。
Q1>该教程提到了
“请注意,PHP必须具有写访问权限 到$ uploadDir或上传将 失败“
对我来说,我只允许用户在用户登录网站后上传文件。 如果我们将$ uploadDir权限设置为777,那么每个人都可以拥有该文件夹的书面权限。如何避免这个问题?
另外我使用WAMP作为我的测试床,我可以模拟与真实网络服务器相同的情况吗?
Q2>为了防止直接访问,本教程提到:
“更好的方法是移动 上传目录远离您的网站 根。例如,web根目录 这个网站是: / home / arman198 / public_html /来防止 直接列表我可以设置上传 目录到/ home / arman198 / upload /。“
现在我的问题是如何在其他网站页面上显示上传的图像。既然,上传不再可以直接访问?我需要在其他网站页面上动态显示上传的图像保存个人头像。有可能吗?
谢谢
答案 0 :(得分:2)
对于第二个问题,您可以使用直接访问该目录的PHP脚本。让我们将其命名为image.php。让我们假设它可以采用参数id,如image.php?id=image_id
。在该文件中,您可以使用超全局数组$_GET
获取id。然后,您可以搜索具有该ID的图像,并将其作为响应发送。
第一个我不确定,但也许可以使用.htaccess文件。
答案 1 :(得分:2)
这是一个常见的问题。
所有现代计算机都有一个临时文件目录。在Linux / Unix上它是/tmp
,在Windows上它通常是c:\temp
。操作系统安装将在该目录上设置权限,以便任何人都可以在那里写入文件,但只有特权用户才能删除不属于他们的文件。这是PHP希望放置上传文件的地方;然后你的应用程序必须将它移动到其他地方(这是move_uploaded_file()
函数的目的)。 Windows下的PHP可能需要在upload_tmp_dir
文件中实际设置php.ini
。
一旦你有了一个上传的文件,你可以随意移动它,包括网络服务器可以读取它的位置。最大的问题是将这个目录放在代码库中非常容易。 不要那样做。除了编辑它们所服务的目录中的文件之外,只要你做任何事情,都会有问题。相信我:我已经在我继承的代码中处理了几次。让您的网络服务器从代码库之外的位置加载文件很容易。
另一种方法是生成下载脚本。这样,文件根本不需要由网络服务器提供。一个缺点是您无法利用Web服务器的MIME转换,但随后可以控制允许的类型的图像文件。
答案 2 :(得分:0)
对于第一个问题,请尝试将您的权限设置为775.这应该允许PHP将文件写入目录而不提供一般公共写访问权。