【问题标题】:move_uploaded_file how to build a upload directorymove_uploaded_file 如何建立上传目录
【发布时间】:2012-03-29 22:53:05
【问题描述】:

我有一个简单的问题,但在 Google 上没有找到答案。我正在构建一个必须在各种服务器上运行的应用程序,我不知道它是否会安装在根目录、子目录或任何其他方式中。我也不知道它是否会安装在 IIS、Apache 或其他类型的 od 服务器上。我有一个非常讨厌的问题。如何建立一个总是好的上传目录。该上传目录将位于应用程序文件夹中,所以我有一些开始,但我无法弄清楚如何编写正确的上传目录。

//tried this for first time
$upload_dir = getcwd().'upload/img';
//then tried this
$upload_dir = 'upload/img';
//and tried couple of others, but more lame, so I will not post it...

问题是发出警告,提示无法打开流:没有这样的文件或目录,以及另一个无法将 $temp_name 移动到“上传/img”。

真的不知道哪里出了问题。我确信这是一个蹩脚的问题,但不知道如何做好。

【问题讨论】:

  • 解决办法是在 getcwd() 和内部路径之间添加一个缺失的“/”。这成功了。不知道为什么我错过了id。

标签: php


【解决方案1】:

使用魔术宏__FILE__ 获取当前文件的路径,即脚本的绝对路径。要获取当前文件夹,请使用dirname(__FILE__)

您应该能够将其余的路径逻辑建立在此之上。

【讨论】:

  • 我试过了,但是代码在目录树的类 depper 中,所以它可以让我找到那个文件的位置,这对我没有好处。我对 getcwd().'upload/img' 的尝试更好......
【解决方案2】:

首先,作为应用程序设计者,您必须为您的上传目录选择一个合适的位置(或者让用户在安装时选择一个)。此位置通常选择在您的 Web 目录根目录之外,这样任何人都无法输入 URL 并获得对上传文件的直接访问权限,但也可以通过其他方式进行安排。

那么你必须确保这个directory existsis writable被web服务器;可以通过要求您的用户作为手动安装步骤执行此操作或通过将“安装程序”脚本作为应用程序的一部分来适当地创建和设置该目录。

最后,当实际上传文件时,您必须构建上传目录的路径。有很多方法可以做到这一点(这也取决于您选择的位置,是否允许管理员选择他们自己的位置等)但通常这也是通过读取写入某个配置文件的变量的值来完成的,例如

// config.php
$DIR_UPLOAD = '/var/www/upload/';

此值将由您的安装程序脚本或由管理员在安装时手动放置。

【讨论】:

  • 是否有一些很好的论据可以从 url 隐藏文件?因为无论如何我需要 url 做他们吗?
  • @neosatan:通常您会将此 url 设置为 PHP 脚本,该脚本接受 $_GET 参数并使用 readfile 传递目标文件的内容。如果您这样做,您的脚本可以在授予对文件的访问权限之前执行访问控制。另一方面,如果该文件可以直接访问,那么任何拥有该 URL 的人都可以访问它,而您无法控制它。
  • 这是个好主意。通常,我实现了一些访问控制,但仅限于不需要具有直接 URL 的文件,例如设计中可访问的图像。对每个上传的文件都这样做的想法对我来说仍然是新的,但我想知道它的表现如何?不是为必须可访问的文件浪费 CPU 周期吗?还是我错了?
  • @neosatan:要么你需要访问控制,要么你不需要。 CPU 周期不考虑在内。
猜你喜欢
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
相关资源
最近更新 更多