dev-master
9999999-devhypertext (HTT)
Apache 2.0
The Requires
Wallogit.com
2017 © Pedro PelΓ‘ez
hypertext (HTT)
Content-Length)
> ΠΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌContentInterface ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²Π»ΠΈΡΡΡ Π½Π° Π»ΡΠ±ΠΎΠΉ ΡΠΏΠ΅ΠΊΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌTransfer-Encoding: chunked
Camelize ΡΡΠΈΠ»Ρ.ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ, (*1)
Camelize ΡΡΠΈΠ»Ρ)Π Π°Π·Π±ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, (*2)
['value' => null, 'params' => [], 'elements' => []]
ΠΡΠΎΡΠ΅ΡΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°: ΠΠΎΠΊΡΠΌΠ΅Π½Ρ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΡΡΡ. ΠΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΠΎΡ ContentInterface ΡΠΎ Π²Π½ΡΡΡΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π΄ΠΎ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°., (*3)
ΠΠΎΠ½ΡΠ΅Π½Ρ ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΡΠΈΠΏΠ° ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌ(Π΅ΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ContentInterface)., (*4)
ΠΡΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³Π΅: ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΈΠ· ΡΡΡΠΎΠΊΠΈ, ΡΠ°ΠΊ-ΠΆΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ. ΠΠΎΡΠ»Π΅ ΠΏΠ°ΡΡΠΈΠ½Π³Π°: ΠΠΎΠΊΡΠΌΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΆΠ΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΡΠΉ, Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π½Π°ΡΠΈΠ²Π½ΠΎΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, (*5)
Π‘ΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ Π·Π΄Π΅ΡΡ ΡΡΠΎ ΠΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π‘ΡΠΈΡΠ°Π½/ΠΠ°ΠΏΠΈΡΠ°Π½ Ρ ΡΠ°Π·Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ [ΠΈΠ· ΡΡΡΠΎΠΊΠΈ ΠΈ Π² ΡΡΡΠΎΠΊΡ] ΠΈΠ»ΠΈ [ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ° / Π² ΠΏΠΎΡΠΎΠΊ]. ΠΡΠΈ ΠΏΠΎΡΠΎΡΠ½ΠΎΠΌ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Transfer-Encoding (Π½Π΅ ΠΏΡΡΠ°ΡΡ Ρ Content-Transfer-Encoding) ΠΡΠ»ΠΈ ΠΎΠ½ ΡΠ°Π²Π΅Π½ chunked, ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΡΠ°Π·Π±ΠΎΡ ΡΠ°ΡΡΠ΅ΠΉ(ΡΠ°Π½ΠΊΠΎΠ²/chunks) ΠΏΡΡΠΌΠΎ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ°, Π’Π΅ΠΊΡΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°Π½ ΠΈΠ· ΡΠ°Π½ΠΊΠΎΠ² ΠΈ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΡΠΆΠ΅ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΠ°Π·Π±ΠΎΡΠ° ΠΏΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ., (*6)
<?php
namespace Jungle\Util\Specifications\Htt;
include '../../loader.php';
/** ΠΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ cp1253, koi8-r, iso-8859-5, etc...*/
$DOCUMENT_CHARSET = 'iso-8859-5';
$document = new Document();
$document->setHeaders([
'' => 'POST / HTTP/1.1',
'Accept' => 'text/html',
//'Content-Transfer-Encoding' => 'quoted-printable',
//'Content-Transfer-Encoding' => 'base64',
'Content-Type' => 'text/html; charset=' . $DOCUMENT_CHARSET
]);
$multipart = new Content\Multipart();
$raw_document = <<<'TAG'
Content-Type: image/gif
Content-Disposition: attachment; filename=gif1.gif; name=part1
Π’Π΅ΠΊΡΡ Π²ΡΠ΅-ΠΆΠ΅ Π² Π½ΡΠΆΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅, Ρ Π΄ΡΠΌΠ°Ρ)
TAG;
$multipart->addPart(new Document($raw_document));
$document->setContent($multipart);
/**
* ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅Ρ PHP ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ charset=utf-8,
* ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΎΠΉ, ΡΠΎ ΡΠΈΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΠΌΡ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΠΌ.
* ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΡΠ»ΡΡΠΈΠ±Π°ΠΉΡΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°Ρ
ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΡ
ΡΡ ΠΎΡ utf-8
* ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ
ΠΎΡΠ²Π΅ΡΠ° charset=$DOCUMENT_CHARSET
*
* Π’Π°ΠΊ-ΠΆΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠ°ΠΉΠ» Π½Π°ΠΏΠΈΡΠ°Π½ Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ utf-8, Π²Π΅ΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΠΉ Π² ΡΠ°ΠΉΠ»Π΅ ΡΠ΅ΠΊΡΡ. Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡΠΎΠ²ΡΠΉ,
* Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ
ΠΎΡΠ²Π΅ΡΠ° charset=$DOCUMENT_CHARSET, ΡΠΎ Π²Π΅ΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΠΉ Π² ΡΠ°ΠΉΠ»Π΅ ΡΠ΅ΠΊΡΡ ΡΡΠ°Π½Π΅Ρ Π½Π΅ΡΠΈΡΠ°Π΅ΠΌΡΠΌ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅,
* Π° ΠΌΡΠ»ΡΡΠΈΠ±Π°ΠΉΡΠΎΠ²ΡΠΉ ΡΠ΅ΠΊΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ°Π½Π΅Ρ Π²ΠΈΠ΄ΠΈΠΌΡΠΌ.
* ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΌΠ΅Π½ΠΈΠ² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΡΡΠ°Π½ΠΈΡΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΡΡΡΠ°Π½ΠΈΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅.
*
* @code: ini_set('default_charset',$DOCUMENT_CHARSET);
* ΠΠΎΠΆΠ½ΠΎ ΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡ ΠΎΠΏΠΈΡΠ°ΡΠΈΡ, Π² ΡΡΡΠ½ΡΡ ΡΠΌΠ΅Π½ΠΈΠ² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΡΡΠ°Π½ΠΈΡΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΡΡΡΠ°Π½ΠΈΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅.
*
*/
//ini_set('default_charset',$DOCUMENT_CHARSET);
echo '<h3>ΠΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°</h3>';
echo '<pre style="font-family: Lucida Console">';
echo ">> ΠΠΎΠ»ΡΡΠΈΠΌ ΠΠ°ΡΡΠΈΡΠΈΡ ΠΌΡΠ»ΡΡΠΈΠΏΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, Ρ Content-Disposition: name='part1' ΠΈ Π²ΡΠ²Π΅Π΄Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅\r\n";
echo '<br/>';
echo $multipart->getPartByDispositionName('part1')->getContent();
echo '</pre>';
echo '<h3>Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³ ΡΡΡΡΠΊΡΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π² ΡΡΡΠΎΠΊΡ</h3>';
echo '<pre style="font-family: Lucida Console">';
$inline_document = "$document";
echo $inline_document;
echo '</pre>';
$hash = md5($inline_document);
echo '<h3>ΠΠ°ΡΡΠΈΠ½Π³ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΈΠ· ΡΡΡΠΎΠΊΠΈ, ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°</h3>';
$document = new Document($inline_document);
echo '<pre style="font-family: Lucida Console">';
echo $inline_re_document = $document;
echo '</pre>';
$hash_re = md5($inline_re_document);
echo '<h2>Π Π°Π·Π½ΠΈΡΠ° <u>render(structure) > parse(rendered) > render(parsed_structure)</u>: '.strcmp($inline_document, $inline_re_document).'</h2>';
echo '<h2>Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ Ρ
Π΅ΡΠΈ</h2>';
echo '<div>Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³ 1: '.$hash.'</div>';
echo '<div>Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³ 2: '.$hash_re.'</div>';
hypertext (HTT)
Apache 2.0