如何使用PHP上传任何目录中的文件

时间:2019-01-04 15:06:55

标签: php file-upload

我已经创建了图片上传代码,它们只允许我将图片上传到与PHP文件位于同一目录的目录中。

$profile = 'profiles/'.$_FILES['profile']['name'];

如果我这样更改它:

$profile = 'php_codes/profiles/'.$_FILES['profile']['name'];

它告诉我错误。我正在使用copy()函数上传它。 请帮助我了解如何将其上传到任何目录甚至其他任何分区。感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

您将需要提供该错误,但是您收到的错误很可能是您尝试将文件复制到的目录不存在。也可能是权限问题,但您的困惑似乎在于构建路径。

您的代码存在的问题是您的路径是相对到PHP文件位置的路径,而不是从根目录直接访问的路径。您应该阅读一些有关如何导航文件结构的知识,但这是在* nix文件系统(例如Linux)中工作时要记住的三个关键事项:

  1. 如果文件路径不是以斜杠开头,则该路径将相对于PHP脚本所在的目录。
  2. 如果以斜杠开始文件路径,则该路径将相对于根目录。
  3. 您以一个或多个../开始路径,以遍历到父目录。

例如,假设您拥有这三个目录,并且PHP脚本位于/php_codes中:

  • / php_codes
  • / php_codes / code_snippets
  • /个人资料

如果您要将文件复制到php_codes,则您的路径将相对于PHP脚本:

$profiles = $_FILES['profile']['name'];

如果您要将文件复制到php_codes/code_snippets,则可以再次相对于PHP脚本进行操作:

$profiles = "code_snippets/" . $_FILES['profile']['name'];

但是,这是一个展示来自根目录的绝对路径的机会。您可以使用它(请注意路径开头的斜杠):

$profiles = "/php_scripts/code_snippets/" . $_FILES['profile']['name'];

如果要将文件复制到/profiles目录之外的/php_codes,有两种方法。

第一种方法是从根目录使用绝对路径(路径以斜杠开头),就像上面的示例一样:

$profiles = "/profiles/ " . $_FILES['profile']['name'];

或者,您可以通过使用../使它相对于父目录上一级:

$profiles = "../profiles/ " . $_FILES['profile']['name'];

有关使用../进入一个目录的快速说明:您可以根据需要重复多次,以继续上升一级。例如,如果您的PHP脚本位于/php_codes/code_snippets内,但您想将文件复制到/profiles,则必须上两个级别:

$profiles = "../../profiles/ " . $_FILES['profile']['name'];

答案 1 :(得分:0)

您可以使用

$profiles=__DIR__ . "/profiles/" . $_FILES['profile']['name'];
用作 DIR

将是您的脚本目录,然后将是绝对路径

答案 2 :(得分:0)

我终于明白了!只需使用../profiles,然后使用目录即可。您只需输入点(2),然后再返回一次即可。如果两次,.. / .. / profiles。感谢您的帮助。