代码之家  ›  专栏  ›  技术社区  ›  Felipe

为什么fopen()的行为是这样的?

  •  3
  • Felipe  · 技术社区  · 14 年前

    我目前正在这个项目中工作,这个项目要求我创建一个函数,它通常决定目录名,然后在那个目录中创建一个简单的.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 回复  |  直到 12 年前
        1
  •  4
  •   Community Lee    7 年前

    comment by OP :

    [$data is]实际上是迄今为止调用的输出(“d.m.y h:i”)。

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


    编辑
    问题和解决方案的实质是 @tchen's answer . 请记住,冒号是(某些?所有?)*NIX平台,但在Windows上无效。

        2
  •  1
  •   tchen    14 年前

    确保$data末尾没有坏字符。对其调用trim()。

    如果是从文件中获取的数据,则文件结尾可能有一个'\r'或'\n'。

        3
  •  0
  •   Ben Everard    14 年前

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

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

    这也将用一个终止符来消除空白行。 ; 我相信这是不对的。

        4
  •  0
  •   sewa    14 年前

    一些想法:

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

    只是想把问题孤立起来

    此外,您还可以简化为:

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