2

在下面的代码中,$output 是一串行,每行长度为 804 个字符,包括每行末尾的换行符。在每行的位置 454 处有一个“Y”。它只是一个普通的旧“Y”,如“是”。

$fh = fopen($filename_with_path,"w");
fwrite($fh,$output);
fclose($fh);

出于某种原因,在查看创建的文件时,整个输出似乎完好无损,但位置 454 是空白,并且找不到“Y”。

我可以在上述代码之前或之后有一个 die($output),并且输出包含“Y”。我让脚本通过电子邮件将 $output 的内容发送给我,其中包含“Y”。但是当我查看创建的文件时(并且我已经确认每次运行脚本时都会重新创建它),而不是“Y”有一个空格。(我已经使用“cat”查看了文件系统上的文件,也查看了在记事本中打开的网络下载文件,但“Y”不存在。

当创建的文件中有两行时,它是 1608 字节长,这是有道理的,因为每行都有 804。所以这真的使它看起来像一个 Y 正在与一个空白交换。输出中还有其他 Y 在文件中显示得很好。

我对此完全感到困惑。有任何想法吗?

谢谢!

4

1 回答 1

0

哎呀。我想到了。总是有奇怪的原因,总是。只好想办法了。

在这种情况下,在将文件复制到 Web 可访问目录之前,它是在 tmp 目录中创建的。每次脚本运行时,web-directory 文件都有一个唯一的文件名,但 tmp 目录文件名没有。

由于我手动运行脚本,因此 tmp 目录中的文件归我所有。然后,当我从网络(创建文件的那个)运行脚本时,它没有覆盖文件的权限,而且我在代码中缺乏错误检查让我很受伤。每次都将相同的(旧)文件复制到 web 目录中,并且由于该文件具有新的时间戳,我认为它是新内容。

一些经验教训(重新)学习:始终进行适当的错误检查!并且要知道,当某些事情变得奇怪时,是你,而不是服务器,也不是编程语言,也不是 gremlims!

感谢 StackOverflow 社区!

于 2012-11-09T19:15:12.320 回答