Проблемы с отправкой больших файлов через curl - PullRequest
0 голосов
/ 18 октября 2018

После полудня,

Имея некоторые проблемы с отправкой больших файлов через curl, мы можем отправить первый файл размером 5 МБ, но второй тестовый файл - 34 МБ, который не отправляется.Мы увеличили размер поста и максимальный размер загрузки на отправляющем и принимающем серверах, но все равно не рады.

Это сценарий отправки:

 function send_files($directory, $file, $dir_parts) {


    $url = 'https://test.com/App_processing/transfer_videos';

    $handle         = fopen($directory."video.mp4", "r");
    $stats          = fstat($handle);
    $data           = stream_get_contents($handle);
    $payload = array(
            'file' => base64_encode($data),
            'parts' => $dir_parts
    );

    $postfields = array( serialize( $payload ) );

    $ssl        = strstr($url, '://', true);
    $port       = ($ssl == 'https') ? 443 : 80;
    $verify_ssl = false;
    $ch         = curl_init();
    $curlConfig = array(
                        CURLOPT_PORT           => $port,
                        CURLOPT_URL            => $url,

                        CURLOPT_SSL_VERIFYPEER => $verify_ssl,
                        CURLOPT_FORBID_REUSE   => true,
                        CURLOPT_FRESH_CONNECT  => true,
                        CURLOPT_FAILONERROR    => false,
                        CURLOPT_VERBOSE        => true,
                        CURLOPT_POST           => true,
                        CURLOPT_RETURNTRANSFER => true,
                        CURLOPT_FOLLOWLOCATION => true,
                        CURLOPT_COOKIESESSION  => true,
                        CURLOPT_POSTFIELDS     => $postfields,
                    );
    $headers = null;
    $apikey = 'testAPIkey';
    $headers = array(
            "apikey: ".$apikey
    );
    $curlConfig[CURLOPT_HTTPHEADER] = $headers;

    curl_setopt_array( $ch, $curlConfig );

    $response = curl_exec( $ch );
}

Сценарий получения:

public function transfer_videos() {
    $return_arr = array();
    ini_set('max_execution_time', '999');
    ini_set('memory_limit', '512M');
    ini_set('post_max_size', '512M'); 

    if(count($this->post_data) > 0) {
                $image              = $this->post_data['file'];
                $file               = base64_decode($image);

                $filename           = $this->post_data['parts'][2];


                $return_arr = array();


                $office_path    = $this->config->item('_path') . '_videos/';
                $path           = $o_path.$this->post_data['parts'][0]."/".$this->post_data['parts'][1]."/";
                $name           = $filename;


                if( !is_dir( $path ) ) {
                    mkdir( $path, 0750, true );
                }


                try {

                    $return_arr = file_put_contents($path.$name, $file);

                } catch (Exception $e) {
                    $this->curl_helper->error($path.$name, "failed to upload file");
                }

    }

    echo serialize($return_arr);
}

Текущая ошибка, которую мы получаем:

Recv failure: Connection reset by peer

Какого черта мы делаем неправильно?

...