Linux上文件/文件夹名称中的特殊字符;重命名php函数不起作用

时间:2010-06-03 10:06:21

标签: php linux security file

我正在使用函数Rename()(php)将一些图像从一个文件夹移动到另一个文件夹。

目标文件夹中包含特殊字符。

但是,在服务器上执行此操作时,我收到错误,指出找不到名称的文件夹。在该错误中,文件夹名称特殊字符将替换为Squares:

Warning: rename(../temp_images/668635375_1.jpg,../ad_images/B�tar/thumbs/668635375_1.jpg)
[function.rename]: No such file or directory in /var/www/etc....

它可以在我的本地机器上运行(windows xp)。

有什么想法吗? 故障排除提示?

由于

2 个答案:

答案 0 :(得分:3)

我认为这在某些时候是编码问题。

但是,在文件名中使用非ASCII字符无论如何都是滑坡。

always recommend(因为another SO user让我意识到这个伟大而简单的想法),如果可以的话,urlencode()文件名和urldecode()将它们提供给上市。这将为您提供一个文件名,该文件名由对我所知的每个文件系统都有效的字符组成,并且可以包含任何Unicode字符。

答案 1 :(得分:0)

这可能是一个编码问题:它甚至可能在源代码中(编写那些“特殊”字符的编码,在php源代码中?...),或其他地方,或两者兼而有之。通过“其他地方”我的意思是,它可能是字符串中的正确编码,由php严重解析或正确解析,但是从rename()和执行实际重命名的底层系统调用(/ filesystem)错误地“传递” ..根据我的经验,如果你对可以被不同系统读取或通过不同API访问的文件夹/文件使用“特殊”字符,可能会发生不好的事情......所以:不要使用文件夹/文件中的“特殊”字符,必须可由机器系统上的http服务器/ php脚本访问,该脚本可能与“创建”文件夹/文件的那个不同。

阅读this可能有所帮助。