2012-03-29 79 views
0

我有一个简单的问题,但没有在Google上找到答案。我正在构建一个应用程序,它将不得不在各种服务器上运行,我不知道它是以root,subdir还是以任何其他方式安装。另外我不知道它是否会安装在IIS,Apache或其他类型的od服务器上。我有一个真正令人讨厌的问题。如何建立一个永远不错的上传目录。该上传目录将在一个应用程序文件夹中,所以我有一些启动点,但我无法弄清楚如何编写适当的上传目录。move_uploaded_file如何构建上传目录

//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”。

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

+0

解决方法是在getcwd()和内部路径之间添加一个缺失的'/'。这完成了这个伎俩。不知道为什么我错过了ID。 – 2012-04-04 08:53:36

回答

1

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

您应该能够将其他路径逻辑放在最上面。

+0

我试过了,但是代码是在dir树的class depper中的,所以它让我找到了那个文件的位置,这对我没有好处。我尝试getcwd()。'upload/img'更好... – 2012-03-29 23:11:01

0

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

然后你必须确保这个directory existsis writable由网络服务器;可以通过要求用户将其作为手动安装步骤或通过在应用程序中包含“安装程序”脚本来适当地创建和设置目录。

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

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

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

+0

有没有一些很好的参数来隐藏来自url的文件?因为无论如何,我需要网址做他们? – 2012-03-29 23:11:47

+0

@neosatan:通常你会将这个url作为一个PHP脚本,它接受一个'$ _GET'参数,并用['readfile']传递目标文件的内容(http://www.php.net/manual/ EN/function.readfile.php)。如果您这样做,您的脚本可以在授予对该文件的访问权限之前执行访问控制。另一方面,如果文件可以直接访问,那么具有该URL的任何人都可以访问它,并且您无法控制该文件。 – Jon 2012-03-29 23:16:03

+0

这是个好主意。通常,我实施了一些访问控制,但只适用于不需要直接URL的文件,例如可访问来自设计的图像。为每个上传的文件做这件事的想法对我来说仍然是新的,但我想知道它是如何执行的?它是不是浪费CPU周期来访问必须可访问的文件?或者我错了? – 2012-03-29 23:20:22