您已尝试通过以下方式延长脚本的最大执行时间set_time_limit()
? 这不会导致服务器崩溃(因为它也有内存限制):
set_time_limit( 0 ); // No time limit is imposed
我不知道你说的“分解”剧本是什么意思,你可能想再想一想。
如果feed的XML中有太多行,您可以做什么?您还可以创建自己的导入脚本,并通过逐个处理小部分来处理它。
$xml_handler = new ProductsParser();
$xml_parser = xml_parser_create();
$source = \'--URL--\';
xml_set_object( $xml_parser, $xml_handler );
xml_parser_set_option( $xml_parser, XML_OPTION_CASE_FOLDING, false );
xml_set_element_handler( $xml_parser, \'startElement\', \'endElement\' );
xml_set_character_data_handler( $xml_parser, \'cdata\' );
$fp = fopen ( $source, \'r\' );
while ( $chunk = fread( $fp, 4096 ) ) {
xml_parse( $xml_parser, $chunk, feof( $fp ) );
flush();
}
fclose( $fp );
class ProductsParser {
public $product; # Holds the record values
public $elem_key; # Holds the current element key while reading
public $record; # Holds the record tag
function __construct( $args ) {
$this->product = false;
$this->elem_key = false;
$this->record = \'--RECORD-NAME--\';
}
function startElement( $parser, $tag, $attributes ) {
if ( $this->record == $tag && ! is_array( $this->product ) ) {
$this->product = array();
} elseif( is_array( $this->product ) ) {
$this->elem_key = $tag;
}
}
function endElement( $parser, $tag ) {
if ( $this->record == $tag && is_array( $this->product ) ) {
// Process the product row
$this->product = false;
} elseif ( is_array( $this->product ) && $this->elem_key != false ) {
$this->elem_key = false;
}
}
function cdata( $parser, $cdata ) {
if ( is_array( $this->product ) && $this->elem_key != false ) {
$this->product[$this->elem_key] = $cdata;
}
}
}
有关XML解析器的更多信息,请参阅
PHP manual.