I am converting some Perl code to PHP.
However, I do not know much about Perl, so I have to code it with a rough meaning.
And, I do not understand what the below P
Nothing very different from PHP actually.
<<
Heredoc, also present in PHP with slight differences:
echo (<<<"POST_DATA"
First line
Second line
POST_DATA
);
--
Variable decrease, as in <?php $a=2; echo --$a;
Note:
Of course, inside a Heredoc --
is just text.
Suggestion:
If you don't fully understand the Perl, try to run it (it's not evil code).
my $boundary = 'Nobody-has-the-intention-to-erect-a-wall';
print(<<"POST_DATA");
--$boundary
Content-Disposition: form-data; name="num_result"
Content-Type: text/plain
$num_result
--$boundary
Content-Disposition: form-data; name="img"; filename="search.jpg"
Content-Type: image/jpeg
$image
--$boundary--
POST_DATA
Will yield:
--Nobody-has-the-intention-to-erect-a-wall
Content-Disposition: form-data; name="num_result"
Content-Type: text/plain
--Nobody-has-the-intention-to-erect-a-wall
Content-Disposition: form-data; name="img"; filename="search.jpg"
Content-Type: image/jpeg
--Nobody-has-the-intention-to-erect-a-wall--
$req2->content(<<"POST_DATA"); #what means this?
The <<"POST_DATA"
starts a HERE document, which is essentially a long string. The double quotes ""
tell Perl to do string interpolation. That means that variables inside the string will be replaced with their content. The string ends when the parser encounters the delimiter, which in this case is the string POST_DATA
.
The --
you are referring to is not an operator. It's used inside of the string. The program sends a multipart/formdata form over HTTP. Look at RFC 7578 if you are interested in the technical details. Essentially, each part of the request body represents one document. It can be multi-line and contain lots of information. The boundary can be set in the HTTP headers, and is typically a long, random string that would not appear in any of the body parts. See this answer for a more detailed explanation.