Skip to content

Conversation

Dramacydal
Copy link

@Dramacydal Dramacydal commented Aug 25, 2024

Загрузка файлов через передачу значения @путь/к/файлу отключена с 7 версии php, теперь доступно только через обертку CURLFile.
Нужно убрать принудительное преобразование data через http_build_query
Важно, чтобы CURLOPT_POST был выставлен до CURLOPT_POSTFIELDS

Для справки:
Значение для curl_setopt CURLOPT_POSTFIELDS может быть либо строкой, либо массивом уже очень давно, начиная с php 5.2 - точно.
Начиная с версии 5.5 добавилась возможность загружать файлы через формирование объекта CURLFile и параметр CURLOPT_SAFE_UPLOAD, который запрещает загружать файлы через @путь/к/файлу (по умолчанию отключен)
С версии 5.6 значение по умолчанию для CURLOPT_SAFE_UPLOAD становится true
С версии 7.0 вводится запрет на загрузку файлов через @

Раньше:

$curl = new curl();
$params = [
    'test_file1' => '@/tmp/test1',
    'test_file2' => '@/tmp/test2',
];

$curl->addOptions([
    CURLOPT_SAFE_UPLOAD => false
]);

$curl->prepare('https://example.com', $params, 'POST');
$curl->execute();

Теперь:

$curl = new curl();
$params = [
    'test_file1' => new \CURLFile('/tmp/test1'),
    'test_file2' => new \CURLFile('/tmp/test2'),
];

$curl->prepare('https://example.com', $params, 'POST');
$curl->execute();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant