为什么fopen()表现得像这样?

时间:2010-09-01 07:56:47

标签: php filenames fopen

我目前正在处理这个项目,该项目要求我创建一个函数,该函数以dinamically方式决定目录名称,然后在该目录中创建一个简单的.txt文件。

我的代码如下: ($ destinatario是一个字符串)

     $diretorio="../messages/".$destinatario;
if (is_dir($diretorio)) {
    ;
}else{
    mkdir($diretorio);
}
$path=$diretorio."/".$data.",".$assunto.",".$remetente.".txt";
$handle=fopen($path,'w+');

fwrite($handle, $corpo);

fclose($handle);

没关系葡萄牙语,但最重要的是它应该使用我提供的命名指南创建一个.txt文件。有趣的是,当我这样做时,php创建了这个奇怪的文件,其文件名为“01.09.2010 04” (根本没有扩展名),这相当于我想创建的实际文件名的前几个字符......

编辑($ data实际上是日期调用的输出(“d.m.Y H:i”))

4 个答案:

答案 0 :(得分:4)

comment by OP

  

[$ data is]实际上是日期调用的输出(“d.m.Y H:i”)

问题是:字符。(但是,组成最终文件名的其他部分可能还有其他非法字符。)


修改
问题和解决方案的本质是对@tchen's answer的评论。请记住,冒号是(某些?所有?)* nix平台上的有效文件名字符,但在Windows上无效。

答案 1 :(得分:1)

确保$ data末尾没有坏字符。在上面调用trim()。

如果它是从文件中获取的数据,它的末尾可能有'\ r'或'\ n'。

答案 2 :(得分:0)

不相关,但请确保您的if语句没有未使用的条件:

if (!is_dir($diretorio)) {
    mkdir($diretorio);
}

这也将摆脱带有单个终结符;的空白行,我确信这是不对的。

答案 3 :(得分:0)

一些想法:

  • 您是否尝试过不在文件名中使用逗号?
  • 你是否检查了fopen和fwrite的返回值?

试图找出问题

你也可以简化为:

if (!is_dir($diretorio)) {
  mkdir($diretorio);
}