【发布时间】:2016-03-19 11:21:45
【问题描述】:
我有一个 PHP 脚本 editxml.php,它使用几个 foreach 循环组合了一组 XML 文件。它适用于 4 或 5 个文件,但如果我尝试 20 个文件,则服务器超时并收到 503 错误。该脚本输出一个保存在同一目录中的 XML 文件,但不需要在浏览器中显示任何内容。我怎样才能在后台运行它直到它完成?
$fileout = 'output.xml';
$dst = simplexml_load_file( 'template.xml' );
$dst = dom_import_simplexml( $dst )->ownerDocument;
$parent = $dst->getElementsByTagName( 'root' )->item(0);
$files = array(
"1.xml", // desc
"2.xml", // desc
"3.xml", // desc
"4.xml", // desc
"5.xml", // desc
"6.xml", // desc
);
foreach ($files as $xml) {
$src = simplexml_load_file($xml);
foreach( $src->product as $product )
{
$node = dom_import_simplexml( $product );
$node = $dst->importNode( $node, 1 );
$parent->appendChild( $node );
}
}
$final = new DOMDocument();
$final->loadXML( $dst->saveXML(), LIBXML_NOBLANKS );
$final->formatOutput = True;
echo $final->saveXML();
$fh = fopen( $fileout, 'w') or die ( "can't open file $fileout" );
fwrite( $fh, $final->saveXML() );
fclose( $fh );
我正在使用带有 serverpilot 的 digitalocean ubuntu 14.04 droplet,但是任何需要 shell/bash 或远程 ssh 或 PATH 更改的东西对我来说都非常困难,所以我想尽可能避免这种情况。我知道路径,但远程连接 PHP 和 shell 等...不是我的强项。
* 15 * * * /opt/sp/php5.6/bin/php -f /path/to/trigger.php > /dev/null 2>&1
对触发editxml.php 文件的trigger.php 文件运行cron 作业是否会保持脚本在后台运行? trigger.php 内部是:
exec("/path/to/editxmltest.php > /dev/null &");
【问题讨论】:
-
读者不妨知道这个问题has been x-posted to Reddit.