2010-09-01 89 views
3

我目前正在研究这个项目,该项目需要我制作一个函数,它可以通过dinamically来确定目录名称,然后在该目录中创建一个简单的.txt文件。为什么fopen()表现得像这样?

我的代码如下: ($ 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” (根本没有扩展名),这相当于我想要创建的实际文件名的前几个字符。 ..

编辑($的数据实际上是调用日期(输出“DMY H:我”))

+0

为什么路径中有逗号?我可以想象问题在于他们。 – slikts 2010-09-01 08:00:07

+2

所以'$ data'包含'01.09.09.2004',并且之后没有逗号? 如果你在$ handle之前粘贴'echo $ path;',你会得到什么? – Lekensteyn 2010-09-01 08:00:23

+2

您确定您的$路径不包含任何非法字符,例如换行符? – Select0r 2010-09-01 08:01:55

回答

4

comment by OP

[$数据是]实际上迄今为止的呼叫的输出( “d.m.Y H:I”​​)

的问题是:字符。(不过,有可能是合成的最后文件名其他地区的非法字符。)


编辑
问题和解决方案的实质是在评论@tchen's answer。请记住,冒号是(some?all?)* nix平台上的有效文件名字符,但在Windows上无效。

+0

+1这真的很有意义。您可能还想使用白名单筛选文件名中的字符(删除,除非列出) – Lekensteyn 2010-09-01 08:17:07

+0

@Lekensteyn确实。或许甚至与制作“网址友好”标题时采用的策略相同,参见例如http://stackoverflow.com/search?q=php+url+replace – jensgram 2010-09-01 08:21:42

0

没有关系,但要确保你的if语句没有未使用的条件:

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

这也将摆脱空单行与单个终结者;,我敢肯定,这是不正确的。

0

一些想法:

  • 你尝试不使用逗号的文件名?
  • 你检查了fopen和fwrite的返回值吗?

只是为了尝试找出问题

你也可以简化为:

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

确保有在$数据到底有没有坏字符。调用trim()。

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

+1

它实际上是迄今为止的调用输出(“d.m.Y H:i”) – 2010-09-01 08:08:11

+1

@Felipe Almeida然后'''是问题。 – jensgram 2010-09-01 08:10:09

+0

@jensgram良好的调用,:在Windows上是非法的(但不是Linux)。令人惊讶的是,fopen()只是将您的路径切换为非法字符而不是返回错误。或者说,这是一个PHP的主题? – tchen 2010-09-01 08:12:32

相关问题