为了账号安全,请及时绑定邮箱和手机立即绑定

Webmin/Virtualmin - 处理大文件 - 内部服务器错误

Webmin/Virtualmin - 处理大文件 - 内部服务器错误

PHP
aluckdog 2023-04-15 16:36:37
我正在使用 PHP 脚本将数组的唯一值插入数据库。这是脚本ini_set('display_errors', 1);ini_set('display_startup_errors', 1);error_reporting(E_ALL);if (isset($_POST['submit'])) {    $df = $_POST['df'];    $arr = array();    $file = fopen('files/'.$df.'.csv', 'r');    while (($line = fgetcsv($file)) !== false) {        $arr[] = $line[2];    }    $arruniq = array_unique($arr);    fclose($file);    $arr_count = count($arr);    $time = strtotime(date_default_timezone_get());    $ts = date("Y-m-d H:i:s", $time);    $mysqli = new mysqli("localhost", "root", "pass", "tab");    if ($mysqli === false) {        die("ERROR: DB could not connect. ");    }    $sqlins = "insert into tab (created_time, uniq_id) values (?, ?);";    for ($i = 0; $i < $arr_count; $i++) {        if ($stmt = $mysqli->prepare($sqlins)) {            $stmt->bind_param("ss", $ts, $arruniq[$i]);            $stmt->execute();        } else {            echo "ERROR: Could not prepare query";        }    }    $mysqli->close();}该脚本正在读取 CSV 文件、唯一值并插入到数据库中。这就是问题所在,如果文件较小,脚本可以正常工作,但如果我使用较大的文件,则会收到此“500 内部服务器错误”。服务器 PHP 日志和 Apache 日志中没有显示或记录错误。ini_set('memory_limit','2048M');我什至通过使用和标头增加了脚本的执行时间和脚本的内存限制max_execution_time,这也没有用。
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

这是脚本执行时间的问题。由于我使用的是 webmin/virtualmin max_execution_time标头不起作用。所以我在 virtualmin 服务器中更改了它

virtualmin server -> server configuration -> website options -> Maximum PHP script run time

现在问题已解决,但执行脚本需要更长的时间。


查看完整回答
反对 回复 2023-04-15
?
狐的传说

TA贡献1804条经验 获得超3个赞

如果您使用准备好的语句和事务,它应该会更快。


$mysqli->begin_transaction();

$stmt = $mysqli->prepare("INSERT INTO tab (created_time, uniq_id) values (?, ?);");

foreach($arruniq as $item) {

    $stmt->bind_param("ss", $ts, $item);

    $stmt->execute();

}

$mysqli->commit();

正确使用准备好的语句会给您带来轻微的性能提升,因为服务器不需要每次都解析 SQL,并且事务会为您节省一些时间,因为它不会在commit每一行之后调用。


查看完整回答
反对 回复 2023-04-15
  • 2 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信