Php 移动上传的文件($tmpPath,$destPath);返回False。雨衣

Php 移动上传的文件($tmpPath,$destPath);返回False。雨衣,php,macos,apache,unit-testing,Php,Macos,Apache,Unit Testing,在哪里 及 我把这两个目录都编好了 $tmpPath = "/Library/WebServer/Documents/root/tmp/640540b.jpg" 但是move\u上传的\u文件总是返回false。在本地机器上运行测试代码之前,我将该文件放在tmp目录中 我想让你检查一下 此函数检查以确保文件名指定的文件是有效的上载文件(意味着它是通过PHP的HTTP POST上载机制上载的)。如果文件有效,它将被移动到目标指定的文件名 如果对上传文件所做的任何操作都有可能将其内容泄露给用户

在哪里

我把这两个目录都编好了

$tmpPath = "/Library/WebServer/Documents/root/tmp/640540b.jpg"

但是move\u上传的\u文件总是返回false。在本地机器上运行测试代码之前,我将该文件放在tmp目录中

我想让你检查一下

  • 此函数检查以确保文件名指定的文件是有效的上载文件(意味着它是通过PHP的HTTP POST上载机制上载的)。如果文件有效,它将被移动到目标指定的文件名

  • 如果对上传文件所做的任何操作都有可能将其内容泄露给用户,甚至泄露给同一系统上的其他用户,那么这种检查尤其重要


我的最佳选择是,您尝试只将文件从一个目录移动到另一个目录,如果是这样的话,您可能希望使用一个命令,但是
move\u uploaded\u file()
只有在正确完成上载过程时才会起作用。这就是为什么您仍然得到
false

的原因,可能是因为在$tmpPath中,您使用了一个hypen而不是等号来将字符串分配给变量?move_uploaded_file只会移动在当前请求期间实际上载的文件。如果您手动将文件放置在某个位置,则不能使用“移动”或“上载”文件,而可以使用“重命名”或“移动”。您实际上是通过一个表单发布该文件,还是仅使用一个目录(temp)中的文件测试该命令?我不是通过表单发布。我是手动使用tmp文件夹。我想我至少能做到。我正在做phpunit测试。在一个测试用例中,我怎样才能绕过这个问题呢。我不能只是改变方法。那么,在测试用例中,您如何才能绕过这个问题呢?您需要设置一个表单,并按预期方式发布文件
$destPath = "/Library/WebServer/Documents/root/media/tmp/catalog/650540b.jpg"
$tmpPath = "/Library/WebServer/Documents/root/tmp/640540b.jpg"
$_FILES['image_file']['tmp_name'] = "/Library/WebServer/Documents/superiorstore/tmp/640540b.jpg"
$_FILES['image_file']['name'] = "650540b.jpg"