0

我使用 php 脚本在本地 OSX 10.6.7 上使用 MAMP 生成 LaTeX 文件 (report.tex)(文件系统为 HFS+)。然后我使用exec()LaTex 构建文件。.tex 在文件系统上很好地创建,但它不会被查找器识别为 .tex 文件,也不会被 LaTex 识别。我已经检查过问题不在于文件本身,而在于 php 脚本创建它的方式。

事实上,如果我使用文本编辑器创建 report.tex,系统会正确处理该文件,并且 LaTex 不会出现问题。如果我运行 php 脚本,它会在同一个目录中创建另一个具有相同名称(!)的文件。在内部,这些文件完全相同,用十六进制编辑器检查。如果我ls -ls@在目录中运行,我会获得

8 -rw-r--r--@ 1 tom  staff     871  4 jui 12:30 report.tex
    com.apple.FinderInfo        32 
    com.apple.TextEncoding      15 
8 -rw-r--r--  1 tom  staff     805  4 jui 12:35 report.tex

最后一个文件是 php 生成的。如果我xattr -p com.apple.FinderInfo在第一个文件上运行,我会得到

54 45 58 54 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

如果我跑步xattr -p com.apple.TextEncoding

UTF-8;134217984

一旦指定了文本编辑器,我就可以毫无问题地打开第二个文件(该文件未被识别为 .tex 但第一个文件是!)。然后该文件在 TextWrangler 中显示良好,但 tex 的语法着色未激活(它为第一个激活,并且它们的内容按字节顺序相同)。

我很确定这些问题与这个额外的属性有关。我的问题是:有没有办法使用 PHP 或 OSX 来实现正确的行为,即 php 创建的文件被识别为普通的 .tex 文件,例如覆盖第一个文件(当然可以处理由乳胶)?

问候,

汤姆

4

1 回答 1

1

扩展属性是一个红鲱鱼,因为目录中的文件不是通过它们的属性来区分的,只有它们的名称。所以你不能在同一个目录中有两个同名的文件。几乎可以肯定,问题是其中一个文件名中有一个不可打印的字符,很可能是一个空格。这是一个例子:

$ echo "hi" >"a.php"
$ echo "hi" >"a.php "
$ ls -l
total 16
-rw-r-----  1 nad  wheel  3 Jun  4 10:03 a.php
-rw-r-----  1 nad  wheel  3 Jun  4 10:03 a.php 
$ for f in * ; do echo ">$f<" ; done
>a.php<
>a.php <

您可以执行类似的操作来检查文件名。检查您的 PHP 代码以了解如何创建文件名。

于 2011-06-04T17:08:22.180 回答