保存许多csv的内容而不会超过时间限制

时间:2019-02-19 22:05:24

标签: php csv

我的网站托管在我从Hostgator租用的共享托管上。但是set_time_limit只是30,您不能更改限制,因为它是共享主机。他们的规则。

因此,我将csv文件分割成8个5.500文件中的大约csv条记录。

我的问题是,有没有办法在单个function内依次运行8个文件而不会超出服务器的time_limit

示例:

$lines = file(''.get_template_directory_uri() . '/lines1.csv', FILE_IGNORE_NEW_LINES);

foreach ($lines as $line_num => $line){
    //here is some code for save you content line
}

1 个答案:

答案 0 :(得分:1)

为了进一步说明我对设置参数和重定向的评论,这是一个准系统示例。

从本质上讲,脚本可能看起来像这样:

// require the ?file= parameter to exist
if (empty($_GET['file'])) {
    echo 'No file-parameter provided.';
    exit();
}

$file = $_GET['file'];

// build the full path to the file
$filename = get_template_directory_uri() . '/lines' . $file . '.csv';

// make sure the file exists, this will make sure the script stops
// when the last file has been processed
if (!file_exists($filename)) {
    echo 'File ' . $file . ' does not exist. Processing may be complete.';
    exit();
}

// read and process the file
$lines = file($filename, FILE_IGNORE_NEW_LINES);
foreach ($lines as $line_num => $line){
    // process this line
}

// build the URL to the next file
$next_script = $_SERVER['PHP_SELF'] . '?file=' . ($file + 1);

// set a HTTP/1.1 307 Temporary Redirect header and tell the browser
// where to go
http_response_code(307);
header('Location: ' . $next_script);
exit();

现在,您可以转到http://example.com/script.php?file=1开始导入过程。

请注意,为了使header()函数进行重定向,您不能首先输出任何内容。 header()设置HTTP响应标头,必须在响应正文(例如HTML,Javascript等)之前将其发送到浏览器。

如果不能保证,另一种解决方案是使用javascript重定向:

// build the URL to the next file
$next_script = $_SERVER['PHP_SELF'] . '?file=' . ($file + 1);

// redirect using javascript
echo '<script>window.location.href = "' . $next_script . '";</script>';
exit();