如何使用 php 的复制函数复制文件名中带有空格和句号的文件


How to copy a file with spaces and fullstops in the filename using using php's copy function?

请考虑以下代码片段:

if (!copy($productdetails['img'][0], "../tempimages/".basename($product['img'][0]))) 
{
    //error and exit or whatever
}

失败的文件名的一个示例是 "proView.MHL H.jpg"

文件正在从一个网站复制到另一个网站(Linux 服务器)。两个输入都必须变量,即我不能对任何文件名进行硬编码。解决方案也不能使用任何外壳命令。

如果文件包含无效字符(例如空格,甚至是奇数斜杠),我如何仍然可以复制文件,当然假设这是可能的?

在这种情况下,在文件名中放置空格和句号的可怕做法是我无法控制的。

谢谢。

编辑很抱歉忘记了错误消息,如下所示

警告:复制(http://www.private.co.za/proView.MHL H.jpg):无法打开流:HTTP 请求失败!HTTP/1.1 400 C:''websites''schosting''copytest.php第 4 行中的错误请求

GET /proView.MHL H.jpg HTTP/1.0不是

有效的请求行,这是您的PHP生成的,也是您收到400 Bad Request错误的原因。

解决方案是对文件进行适当的编码,尽管最简单的方法可能只是处理空格(str_replace(' ','%20',$productdetails['img'][0]))的情况,因为这是唯一真正的问题原因。