我有一个PHP脚本,我在命令行上运行,当脚本应该退出时,它只是永远挂起.它发生在Windows和Linux上,因此它与操作系统无关.
我已经尝试用XDebug调试代码,踩到最后的exit声明(尝试过die没有运气).在对某些对象运行几个析构函数之后,没有什么可以逐步完成的,并且该过程只是永远等待.它没有做任何事情,没有消耗任何资源.让进程退出的唯一方法是杀死它,例如Ctrl+C
它并没有发生在我的所有脚本中,但我有一个案例,我可以重现.我不确定它是否在我的代码,库代码(主要是Symfony,Doctrince等)或PHP本身.
我已经使用了脚本strace,输出的结尾附在下面.我不知道如何调试此输出,但似乎PHP正在查询最后一个语句中的内容.
我该如何进一步调试?任何帮助,将不胜感激.
strace输出:
fstat(12, {st_mode=S_IFREG|0777, st_size=1314, ...}) = 0
fstat(12, {st_mode=S_IFREG|0777, st_size=1314, ...}) = 0
fstat(12, {st_mode=S_IFREG|0777, st_size=1314, ...}) = 0
fstat(12, {st_mode=S_IFREG|0777, st_size=1314, ...}) = 0
mmap(NULL, 1314, PROT_READ, MAP_SHARED, 12, 0) = 0x7fb8b969c000
munmap(0x7fb8b969c000, 1314) = 0
close(12) = 0
umask(022) = 022
close(3) = 0
close(4) = 0
write(11, "\1\0\0\0\1", 5) = 5
shutdown(11, SHUT_RDWR) = 0
close(11) = 0
write(6, "\1\0\0\0\0\0\0\0", 8) = 8
close(2) = …Run Code Online (Sandbox Code Playgroud) 我正在尝试让我的XSL脚本使用UTF-8编码.像åäö和希腊字符这样的人物就像垃圾一样.让它工作的唯一方法是将结果写入文件.如果我将它写入输出流,它只返回垃圾(System.out工作,但这可能是因为它的重定向到文件).
结果需要从servlet返回,请注意它不是servlet配置问题.我可以从servlet返回带有希腊字符的硬编码字符串,它工作正常,所以这是转换的问题.
这是我目前的(简化)代码.
protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException,
IOException {
try {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
final TransformerFactory factory = this.getFactory();
final File inFile = new File("infile.xml");
final File xslFile = new File("template.xsl");
final File outFile = new File("outfile.html");
final Templates templates = factory.newTemplates(new StreamSource(xslFile));
final Transformer transformer = templates.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
final InputStream in = new FileInputStream(inFile);
final StreamSource source = new StreamSource(in);
final StreamResult result1 = new StreamResult(outFile);
final StreamResult result2 = new StreamResult(System.out); …Run Code Online (Sandbox Code Playgroud)