Первые мысли ...
Страница руководства для curl_setopt говорит о CURLOPT_POSTFIELDS
"Полные данные для публикации в HTTP" POST "
операция. Чтобы опубликовать файл, добавьте
имя файла с @ и использовать полный путь.
Это может быть передано как
urlencoded строка
'para1 = val1 & para2 = val2 & ...' или как
массив с именем поля в качестве ключа и
данные поля как значение. "
Может ли быть так, что ваше значение обрабатывается так, как если бы оно было urlencoded, и, таким образом, выглядит как большое длинное имя без значения. Что-то где-то решает усечь это имя.
Может быть, вы могли бы изменить его на что-то вроде
$post_data = "data=".str_repeat('x', $char_count);
Оказывается, это было слишком легко, и проблема была немного глубже. Итак, как отлаживать?
Узнайте, что именно CURL отправляет на сервер
Другая тактика отладки может состоять в том, чтобы сформулировать командную строку curl, которая выполняет то же самое, и заставить ее выводить детали HTTP-запроса по мере их создания.
Тестирование сервера вручную
Вы можете исключить сервер из уравнения, выполнив запрос вручную, например, telnetting на порт 80 на вашем сервере и отправив ему запрос> 1024 символа
POST /test/recipient.php HTTP/1.0
Host: gpx3quaa.joyent.us
Content-Length:1028
xxxxx(I put 1028 chars here, no point copying them all here!)
Я получил этот ответ
HTTP/1.0 200 OK
Connection: close
Content-type: text/html; charset=UTF-8
Content-Length: 19
Date: Tue, 20 Jan 2009 21:35:16 GMT
Server: lighttpd/1.4.19
This was a triumph.Connection closed by foreign host.
Так что, по крайней мере, теперь вы знаете, что все это на стороне клиента, возможно, где-то есть опция CURL или настройка конфигурации: (
Окончательный ответ!
Проблема заинтриговала меня, поэтому я копнул глубже
Если вы используете CURLOPT_VERBOSE=>true
, вы увидите, что CURL отправляет дополнительный заголовок на сообщения большего размера: Expect: 100-Continue
. Похоже, вашему серверу lighttpd это не нравится.
Вы можете остановить CURL от этого, заставив его использовать HTTP / 1.0 с CURLOPT_HTTP_VERSION=>CURL_HTTP_VERSION_1_0
в вашем массиве параметров curl_setopt.