PHP SOAP fread () динамический размер POST - PullRequest
1 голос
/ 10 сентября 2009

Хотите прочитать размер файла SOAP POST, какие-либо рекомендации?

$data = fopen('php://input','rb');
$content = fread($data,5000);

$dom = new DOMDocument();
$dom->loadXML($content);

Хотели бы, чтобы 5000 были динамическими, поскольку каждый размер SOAP POST будет разным или это имеет значение?

Было бы здорово использовать fread ()

Ответы [ 2 ]

2 голосов
/ 17 октября 2009

Ммм. Если вы можете прочитать его с помощью «fread», я не вижу причин, по которым вы не можете прочитать ТОЧНЫЙ текст с «file_get_contents()». Я использую это несколько раз и вспоминаю, что пробовал оба.

Что касается лучшей практики для fread, то вам нужен размер файла, который вы можете получить из getallheaders ().

Итак, если вы все еще предпочитаете использовать 'fread', вот код.

$data = fopen('php://input','rb');
$Headers = getallheaders();
$CLength  = $Headers['Content-Length'];
$content = fread($data,$CLength);

$dom = new DOMDocument();
$dom->loadXML($content);

Приведенный выше код объясняется самостоятельно, поэтому нет необходимости в дополнительных пояснениях. Немного заметим, что если длина длиннее 8192 байт , содержимое будет обрезано. Так что вам лучше проверить длину чтения, чтобы увидеть, не обрезано ли оно. (Вам не нужно беспокоиться, если вы используете 'file_get_contents()').

Надеюсь, это поможет

2 голосов
/ 10 сентября 2009

Вместо этого вы можете попробовать следующее:

$xml = file_get_contents('php://input')

Это позволит получить все содержимое независимо от длины данных.

...