考虑以下代码片段:
if (!copy($productdetails['img'][0], "../tempimages/".basename($product['img'][0])))
{
//error and exit or whatever
}
失败的文件名示例为"proView.MHL H.jpg"
。
正在将文件从一个网站复制到另一个网站(Linux服务器)。两个输入都有变量,即我不能对任何文件名进行硬编码。解决方案也不能使用任何shell命令。
如果文件包含空格等无效字符,甚至是奇怪的斜线,我怎么还能复制文件呢?假设它当然可以吗?
在这种情况下,在文件名中放置空格和句点的可怕做法不在我手中。
谢谢。
修改 很抱歉忘记了错误消息,如下所示
警告:复制(http://www.private.co.za/proView.MHL H.jpg):无法打开流:HTTP请求失败!第4行的C:\ websites \ schosting \ copytest.php中的HTTP / 1.1 400错误请求
答案 0 :(得分:0)
GET /proView.MHL H.jpg HTTP/1.0
不是有效的请求行,这是您的PHP生成的,这就是您收到400 Bad Request
错误的原因。
解决方案是对文件进行适当的编码,尽管最简单的方法可能只是处理空格(str_replace(' ','%20',$productdetails['img'][0])
)的情况,因为这是唯一真正的问题 - 注意。