Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试上载非常大的文件时,本地主机内存不足_Php_Laravel_Laravel 5_Phpmyadmin - Fatal编程技术网

Php 尝试上载非常大的文件时,本地主机内存不足

Php 尝试上载非常大的文件时,本地主机内存不足,php,laravel,laravel-5,phpmyadmin,Php,Laravel,Laravel 5,Phpmyadmin,我正在尝试上载csv文件,以便我可以将这些数据上载到数据库中。 其代码如下所示 public function upload(Request $request){ set_time_limit(0); ini_set('MAX_EXECUTION_TIME', 36000); $file = Input::file('file'); $filePath = $file->getRealPath(); $hand

我正在尝试上载csv文件,以便我可以将这些数据上载到数据库中。 其代码如下所示

public function upload(Request $request){
        set_time_limit(0);
        ini_set('MAX_EXECUTION_TIME', 36000);
        $file = Input::file('file');
        $filePath = $file->getRealPath();

       $handle = fopen($filePath, "r");
        while(!feof($handle))
        {
           << DO THE DATABASE OPERATION >>
        }
        fclose($handle);

  return redirect()->back()->with('success', 'File uploaded successfully');
}
我的系统配置:

窗口机64位

问题

它不仅无法上传,而且还关闭了开发服务器,即
localhost:8000

有谁能告诉我为什么会发生这种情况,我该如何解决它。 我确实在StackOverflow上跟踪了几个线程,就像这样


但不幸的是,这些解决方案没有任何帮助。

我会检查您的Windows事件查看器,尝试跟踪服务器崩溃的原因。这将有助于你了解问题所在

如果找不到崩溃源,并且由于使用的是7.1和大型文件,请尝试使用生成器处理该文件。你正在把整个事情载入记忆。即使有这么大的内存限制,我仍然认为将整个文件加载到内存中可能是您的问题

这将一行一行地对其进行流式处理,但您可以找到允许您对文件进行分块的其他示例

public function read_file($file)
{
    $fp = fopen($file, 'r');

    while(($line = fgets($fp)) !== false)
        yield $line;

    fclose($fp);
}  

public function upload(Request $request){
            set_time_limit(0);
            ini_set('MAX_EXECUTION_TIME', 36000);
            $file = Input::file('file');
            $filePath = $file->getRealPath();

            foreach(read_file($filePath) as $line)
            {
               << DO THE DATABASE OPERATION >>
            }

      return redirect()->back()->with('success', 'File uploaded successfully');
    }
公共函数读取文件($file)
{
$fp=fopen($file,'r');
while(($line=fgets($fp))!==false)
收益率$line;
fclose($fp);
}  
公共功能上传(请求$Request){
设置时间限制(0);
ini设置(“最大执行时间”,36000);
$file=Input::file('file');
$filePath=$file->getRealPath();
foreach(将文件($filePath)读取为$line)
{
>
}
return redirect()->back()->带有('success','File upload successfully');
}

同一问题可能重复,但这些解决方案不起作用。请检查我的php.ini设置。我已经应用了这些解决方案。我正试图上传的文件是1.6GB,因此应用程序关闭本地服务器的原因毫无意义。编辑Apache配置非常快;)您正在运行什么版本的PHP?文件是2GB还是1.6GB?这不是快速编辑,只是为了防止你没有注意到,我在发布这个问题时添加了php.ini设置。我使用的是
PHP7.1
。我试图上传的文件是1.6GB,我还有一个文件是4.3GB。我想上传这两个选项OK,你的
内存限制的配置值是多少?谢谢erik的建议。我会试试:))
public function read_file($file)
{
    $fp = fopen($file, 'r');

    while(($line = fgets($fp)) !== false)
        yield $line;

    fclose($fp);
}  

public function upload(Request $request){
            set_time_limit(0);
            ini_set('MAX_EXECUTION_TIME', 36000);
            $file = Input::file('file');
            $filePath = $file->getRealPath();

            foreach(read_file($filePath) as $line)
            {
               << DO THE DATABASE OPERATION >>
            }

      return redirect()->back()->with('success', 'File uploaded successfully');
    }