This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
phptsmadmin/includes/jpgraph/docs/chunkhtml/ch13s03.html

372 lines
34 KiB
HTML
Raw Normal View History

2011-05-28 09:51:52 +00:00
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Sending data to a graph script with URI arguments (GET and POST)</title><link rel="stylesheet" type="text/css" href="manual.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.0"><link rel="home" href="index.html" title="JpGraph Manual"><link rel="up" href="ch13.html" title="Chapter 13. Getting hold of the data to be displayed"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Sending data to a graph script with URI arguments (GET and POST)</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center">Chapter 13. Getting hold of the data to be displayed</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="sect1" title="Sending data to a graph script with URI arguments (GET and POST)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2538267"></a>Sending data to a graph script with URI arguments (GET and POST)</h2></div></div></div>
<p>In order to send data between different HTML pages (or to a specific page) there
are two ways to do this. Either by including the parameters in the URI directly,
(e.g. <code class="code">http://localhost/mygraph.php?d1=12</code>) or by creating a POST request
and send to a page. The details of these two methods are discussed below.</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>There might be some confusion when to use the <code class="code">'&amp;'</code> and
when to use <code class="code">'&amp;amp;'</code> to separate variables in GET or POST
requests.</p>
<p>When writing URL in HTML the string should always be written with a full
entity encoding since the <code class="code">'&amp;'</code> is a special character
indicating the start of an entity that ends with an <code class="code">';'</code>. So for
example writing a URI in a HTML page should look like.</p>
<p><code class="filename">&lt;a
href="myscript.php?idx=1&amp;amp;start=2009&amp;amp;end=2010"&gt;</code></p>
<p>the browser will then correctly convert the URI to single
<code class="code">'&amp;'</code> which is what should be sent to the server. When
typing URI directly in the browser (or in any plain text file) one should of
course always just use a single <code class="code">'&amp;'</code>
</p>
</div><p>
</p>
<p>
</p><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3>
<p>Use the method <code class="code">http_build_query()</code> to build http queries from
an array with keys and values.</p>
</div><p>
</p>
<div class="sect2" title="Using GET arguments"><div class="titlepage"><div><div><h3 class="title"><a name="id2538350"></a>Using GET arguments</h3></div></div></div>
<p>GET arguments are the arguments that can be added as part of the URI. For
example as</p>
<p>
</p><pre class="screen">http://localhost/mygraph.php?id=12&amp;start=20081223&amp;end=20090115</pre><p>
</p>
<p>PHP automatically places all given arguments in the "super global" array
variable <code class="code">$_GET</code> as an associative array.</p>
<p>There are a couple of things to note here</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>The values in the argument string in the URI must be URL encoded,
this can easily be done with the PHP function
<code class="code">urlencode()</code> (<code class="uri"><a class="uri" href="http://php.net/manual/en/function.urlencode.php" target="_top">See
PHP Manual</a></code>)</p>
</li><li class="listitem">
<p>When the arguments are read from $_GET the must be un-quoted with
a call to <code class="code">urldecode()</code></p>
</li><li class="listitem">
<p>Some browsers restrict the length of the URI that they will read
(typically &lt; 2048bytes) which means that there is a limit on how
much data can be send as URI arguments</p>
</li><li class="listitem">
<p>Some browsers will allow the syntax
<code class="code">"a[0]=10&amp;a[1]=11&amp;a[2]=12"</code> i order to send
the array <code class="code">(10,11,12)</code></p>
</li></ul></div><p>
</p>
<p>This way of specifying the argument string is mostly useful when</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>The arguments are short</p>
</li><li class="listitem">
<p>When the user should be able to bookmark an URI</p>
</li><li class="listitem">
<p>When the data is not sensitive (since it can be seen in the
URI)</p>
</li><li class="listitem">
<p>When the graph should be viewable by clicking on a link (more on
this when we compare the GET method with the POST method
below)</p>
</li></ul></div><p>
</p>
<p>The "best practice" of using this method is to send a short key (or id) to the
graph script and the graph script itself will use this id to extract the real
data from a DB (or a plain text file). This way the same core graph script can
be used in various context to display wanted data.</p>
</div>
<div class="sect2" title="Using a POST request"><div class="titlepage"><div><div><h3 class="title"><a name="id2538499"></a>Using a POST request</h3></div></div></div>
<p>
</p><div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3>
<p>This is a fairly advanced topic and it is recommended to use the other
methods of sending data to a script unless the specifications explicitly
demands that a POST request is constructed. Furthermore this requires a
very good understanding of HTTP request headers and the difference
between server side and browser side so if you are not sure that you
have the necessary background we strongly recommend to stay away from
this method.</p>
</div><p>
</p>
<p>Two of the obvious restrictions with the GET method is that <span class="bold"><strong>a)</strong></span> the length of the data is restricted and <span class="bold"><strong>b)</strong></span> the data is visible directly in the URI. The other
way to send data as part of the HTTP request is to use the POST method. </p>
<p>Unfortunately this is not as easy as just doing some magic and then we get the
same functionality as with the GET method. Even some authors get this wrong in
some very prominent PHP text books. Unfortunately it will take us too far to
discuss all the details of HTTP request headers (as described in <code class="uri"><a class="uri" href="http://www.w3.org/Protocols/rfc2616/rfc2616.html" target="_top">RFC2616</a></code>)
but we will explain the very basics.</p>
<p>First. let's state what an HTTP request is</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>A POST HTTP request is used to send data to a specified URI from a
client. A client is normally a WEB-browser but can also (as we will
use it) be a script that sends the request to the same or to another
server. The data is URL encoded and passed in the body of the
request. There is no theoretically limit on the length of the
data.</p>
</li></ul></div><p>
</p>
<p>A further common misunderstanding is that it is possible to use the PHP method
<code class="code">header()</code> in order to create a POST request. This is even given
as an example in the notes to the <code class="code">header()</code> method in the PHP manual
(See <code class="uri"><a class="uri" href="http://php.net/manual/en/function.header.php" target="_top">PHP
Manual</a></code>). This is <span class="bold"><strong>wrong</strong></span>. It is
<span class="bold"><strong>not</strong></span> possible to use the
<code class="code">header()</code> method to send a POST header. Trying to do this
reveals a basic misunderstanding of the role of a server and client.</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>The <code class="code">header()</code> method is used to send one or more
headers from the server <span class="bold"><strong>to the
client</strong></span> (i.e. WEB-browser)</p>
</li><li class="listitem">
<p>The HTTP POST request goes from the client (i.e. WEB-browser)
<span class="bold"><strong>to the server</strong></span></p>
</li></ul></div><p>
</p>
<div class="figure"><a name="id2538657"></a><p class="title"><b>Figure 13.1. Post vs. header() data direction</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/post_vs_header.png" alt="Post vs. header() data direction"><div class="caption">
<p>Note that the image is greatly simplified to help illustrate the
vital point on data direction. For example the post request shown to
originate from a browser could originate from any client, for
example another script taking the role of a client.</p>
</div></div>
</div></div><br class="figure-break">
<p>Hence it is never possible to "simulate" a POST call with the use of the
<code class="code">header()</code> function. There are basically three (correct) ways to
simulate a POST request as described below.</p>
<p>Before we continue lets first recapitulate the most common use of a POST
request, i.e. in a HTML form submission. When data is entered in a form on a
HTML page and the user presses the "Submit" button the data from the form is
packed as a POST request which is sent to the server at the specified URI (the
action URI). The server will the reply back to the POST request (with the data
sent back from the target of the post request) and the browser will show the
reply in the window in place of the original HTML form page.</p>
<p>However there is a crucial difference when we do this manually from a script
(running on the server) compared with the original form post data from the
browser to the server. After issuing a POST request (originating from a HTML
form) the browser automatically replaces the current page with the reply from
the POST request as a "new" page (by default using the same target window as the
request was made from).</p>
<p>This is not possible to do when sending a "fake" post request to a page since
we are not the browser. Instead what we will see in the browser is the page
<span class="italic">sending the POST request</span>, and not the
target of the post request. The best we can accomplish is to show the reply
inline in the calling page which are then shown in the browser.</p>
<p>This means that it is not possible to create a POST request and then somehow
directly show the reply as the resulting image. Instead what we can do is to
send the data to a image script (via a POST header) and then the graph script
can write the image to a file that is accessible from the server.</p>
<p>So to summarize. What we can do with a post request is to send the data to a
script <code class="filename">b.php</code> from a script <code class="filename">a.php</code>. The
<code class="filename">b.php</code> can then execute some statements, for example
creating a graph and store it on the server. This stored image can later be read
by the <code class="filename">a.php</code> script, for example via a <code class="sgmltag-element">&lt;img&gt;</code>
tag.</p>
<p><span class="bold"><strong>How to create a POST request</strong></span></p>
<p>There are in principle three ways of constructing a POST request to send data
to a specified URI as shown below. </p>
<p>After we have made the request (with any of the three methods shown below) the
server will reply back with the response created by the URI. This response is
any output sent by the script we are sending our request to. Normally this
should just be a return code indicating if the request was successful or
not.</p>
<p>Remember that these are calls made from the script <code class="filename">a.php</code>
running on server <span class="bold"><strong>A</strong></span> to a script
<code class="filename">b.php</code> running on server <span class="bold"><strong>B</strong></span>. There are no browser involved in these calls apart from the
initial request to run <code class="filename">a.php</code>. The figure below illustrates
the first phase when the request is sent to the B side</p>
<p>
</p><div class="figure"><a name="id2538810"></a><p class="title"><b>Figure 13.2. The request phase of a POST header</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/post_request_phase1.png" alt="The request phase of a POST header"><div class="caption">
<p>1. The request is initially made by calling the a.php script,
e.g. http://localhost/a.php in the browser</p>
<p>2. When the a.php script is executed it will create the POST
header and call script b.php o the server B (could possibly be
the same server). Since the browser is displaying script a.php
we can never change that directly but we can display the reply
from b.php in the page displayed by a.php</p>
</div></div>
</div></div><p><br class="figure-break">
</p>
<div class="figure"><a name="id2538834"></a><p class="title"><b>Figure 13.3. The reply phase of a POST request</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/post_request_phase2.png" alt="The reply phase of a POST request"><div class="caption">
<p>3. The b.php returns a reply by fir example echoing back a reply
code</p>
<p>4. The script running the browser receives its final data (which
is the reply from the b.php script) and then finish the original
request started in step 1.</p>
</div></div>
</div></div><br class="figure-break">
<p><span class="bold"><strong>Note:</strong></span> All the <code class="code">sendPostData_vX()</code>
methods below assumes that the data is already urlencoded.</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p><span class="bold"><strong>Create a stream request.</strong></span></p>
<p>The advantage with this method is that it is available by default
in PHP &gt;= 4.3 and of course in PHP5,6 without the need to install
additional libraries.</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags">&lt;?php</span><span class="hl-code">
</span><span class="hl-reserved">function</span><span class="hl-code"> </span><span class="hl-identifier">sendPostData_v1</span><span class="hl-brackets">(</span><span class="hl-var">$url</span><span class="hl-code">, </span><span class="hl-var">$data</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code">
</span><span class="hl-var">$opts</span><span class="hl-code"> = </span><span class="hl-reserved">array</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">http</span><span class="hl-quotes">'</span><span class="hl-code"> =&gt; </span><span class="hl-reserved">array</span><span class="hl-brackets">(</span><span class="hl-code">
</span><span class="hl-quotes">'</span><span class="hl-string">method</span><span class="hl-quotes">'</span><span class="hl-code"> =&gt; </span><span class="hl-quotes">'</span><span class="hl-string">POST</span><span class="hl-quotes">'</span><span class="hl-code">,
</span><span class="hl-quotes">'</span><span class="hl-string">header</span><span class="hl-quotes">'</span><span class="hl-code"> =&gt;
</span><span class="hl-quotes">&quot;</span><span class="hl-string">Content-type: application/x-www-form-urlencoded</span><span class="hl-special">\r</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">.
</span><span class="hl-quotes">&quot;</span><span class="hl-string">Content-Length: </span><span class="hl-quotes">&quot;</span><span class="hl-code">.</span><span class="hl-identifier">strlen</span><span class="hl-brackets">(</span><span class="hl-var">$data</span><span class="hl-brackets">)</span><span class="hl-code">.</span><span class="hl-quotes">&quot;</span><span class="hl-special">\r</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">.
</span><span class="hl-quotes">'</span><span class="hl-string">content</span><span class="hl-quotes">'</span><span class="hl-code"> =&gt; </span><span class="hl-var">$data</span><span class="hl-code">,
</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$stream</span><span class="hl-code"> = </span><span class="hl-identifier">stream_context_create</span><span class="hl-brackets">(</span><span class="hl-var">$opts</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$fp</span><span class="hl-code"> = </span><span class="hl-identifier">fopen</span><span class="hl-brackets">(</span><span class="hl-var">$url</span><span class="hl-code">, </span><span class="hl-quotes">'</span><span class="hl-string">rb</span><span class="hl-quotes">'</span><span class="hl-code">, </span><span class="hl-reserved">false</span><span class="hl-code">, </span><span class="hl-var">$stream</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-var">$fp</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">//</span><span class="hl-comment"> Some error handling } </span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> Find out what the page returns as its body </span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$reply</span><span class="hl-code"> = </span><span class="hl-identifier">stream_get_contents</span><span class="hl-brackets">(</span><span class="hl-var">$fp</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$reply</span><span class="hl-code"> === </span><span class="hl-reserved">false</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">//</span><span class="hl-comment"> Some error handling } </span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-var">$reply</span><span class="hl-code">;
</span><span class="hl-brackets">}</span><span class="hl-code">
</span><span class="hl-inlinetags">?&gt;</span></pre></td></tr></table></div><p>
</p>
</li><li class="listitem">
<p><span class="bold"><strong>Open a socket directly and write to it
</strong></span></p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags">&lt;?php</span><span class="hl-code">
</span><span class="hl-reserved">function</span><span class="hl-code"> </span><span class="hl-identifier">sendPostData_v2</span><span class="hl-brackets">(</span><span class="hl-var">$url</span><span class="hl-code">,</span><span class="hl-var">$data</span><span class="hl-code">,</span><span class="hl-var">$port</span><span class="hl-code">=</span><span class="hl-number">80</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code">
</span><span class="hl-var">$errno</span><span class="hl-code">=-</span><span class="hl-number">1</span><span class="hl-code">;
</span><span class="hl-var">$errstr</span><span class="hl-code">=</span><span class="hl-quotes">'</span><span class="hl-quotes">'</span><span class="hl-code">;
</span><span class="hl-var">$fs</span><span class="hl-code"> = </span><span class="hl-identifier">fsockopen</span><span class="hl-brackets">(</span><span class="hl-var">$url</span><span class="hl-code">,</span><span class="hl-var">$port</span><span class="hl-code">,</span><span class="hl-var">$errno</span><span class="hl-code">,</span><span class="hl-var">$errstr</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-var">$fs</span><span class="hl-code"> === </span><span class="hl-reserved">false</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">//</span><span class="hl-comment"> Some error handling } </span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$header</span><span class="hl-code"> = </span><span class="hl-quotes">&quot;</span><span class="hl-string">POST </span><span class="hl-var">$url</span><span class="hl-string"> HTTP/1.0</span><span class="hl-special">\r</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">;
</span><span class="hl-var">$header</span><span class="hl-code"> .= </span><span class="hl-quotes">&quot;</span><span class="hl-string">Content-Type: application/x-www-form-urlencoded</span><span class="hl-special">\r</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">;
</span><span class="hl-var">$header</span><span class="hl-code"> .= </span><span class="hl-quotes">&quot;</span><span class="hl-string">Content-Length: </span><span class="hl-quotes">&quot;</span><span class="hl-code"> . </span><span class="hl-identifier">strlen</span><span class="hl-brackets">(</span><span class="hl-var">$data</span><span class="hl-brackets">)</span><span class="hl-code"> . </span><span class="hl-quotes">&quot;</span><span class="hl-special">\r</span><span class="hl-special">\n</span><span class="hl-special">\r</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">;
</span><span class="hl-identifier">fputs</span><span class="hl-brackets">(</span><span class="hl-var">$fs</span><span class="hl-code">, </span><span class="hl-var">$header</span><span class="hl-code"> . </span><span class="hl-var">$data</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Find out what the page returns as its body </span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$reply</span><span class="hl-code"> = </span><span class="hl-quotes">'</span><span class="hl-quotes">'</span><span class="hl-code">;
</span><span class="hl-reserved">while</span><span class="hl-brackets">(</span><span class="hl-code"> !</span><span class="hl-identifier">feof</span><span class="hl-brackets">(</span><span class="hl-var">$fs</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code">
</span><span class="hl-var">$reply</span><span class="hl-code"> .= </span><span class="hl-identifier">fgets</span><span class="hl-brackets">(</span><span class="hl-var">$fp</span><span class="hl-code">,</span><span class="hl-number">8192</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-brackets">}</span><span class="hl-code">
</span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-var">$reply</span><span class="hl-code">;
</span><span class="hl-brackets">}</span><span class="hl-code">
</span><span class="hl-inlinetags">?&gt;</span></pre></td></tr></table></div><p>
</p>
</li><li class="listitem">
<p><span class="bold"><strong> Use CURL to handle all the necessary
details</strong></span></p>
<p><span class="bold"><strong>Note 1:</strong></span> This requires that curl
libraries are installed and that curl is enabled in the PHP
installations. </p>
<p><span class="bold"><strong>Note 2:</strong></span> Depending on the
application there might be many more options that needs to be
tweaked. The one used below are just the bare necessities.</p>
<p><span class="bold"><strong>Note 3:</strong></span> Using CURL is the most
general way to handle POST requests and simplifies the additional
complexity if we want to add encryption (i.e. HTTPS) in the
connection handling.</p>
<div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags">&lt;?php</span><span class="hl-code">
</span><span class="hl-reserved">function</span><span class="hl-code"> </span><span class="hl-identifier">sendPostData_v3</span><span class="hl-brackets">(</span><span class="hl-var">$url</span><span class="hl-code">,</span><span class="hl-var">$data</span><span class="hl-brackets">)</span><span class="hl-code">
</span><span class="hl-brackets">{</span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> Initialize and get the curl handle</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$ch</span><span class="hl-code"> = </span><span class="hl-identifier">curl_init</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Include possible headers in the reply from the server as well</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-identifier">curl_setopt</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-var">$ch</span><span class="hl-code">, </span><span class="hl-identifier">CURLOPT_HEADER</span><span class="hl-code">, </span><span class="hl-reserved">true</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Return the reply as a string from curl_exec() instead of directly to stdout</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-identifier">curl_setopt</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-var">$ch</span><span class="hl-code">, </span><span class="hl-identifier">CURLOPT_RETURNTRANSFER</span><span class="hl-code">, </span><span class="hl-reserved">true</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> The URI we want to send the post data to</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-identifier">curl_setopt</span><span class="hl-brackets">(</span><span class="hl-var">$ch</span><span class="hl-code">, </span><span class="hl-identifier">CURLOPT_URL</span><span class="hl-code">, </span><span class="hl-var">$url</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Use the POST method</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-identifier">curl_setopt</span><span class="hl-brackets">(</span><span class="hl-var">$ch</span><span class="hl-code">, </span><span class="hl-identifier">CURLOPT_POST</span><span class="hl-code">, </span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> All the data to be sent</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-identifier">curl_setopt</span><span class="hl-brackets">(</span><span class="hl-var">$ch</span><span class="hl-code">, </span><span class="hl-identifier">CURLOPT_POSTFIELDS</span><span class="hl-code">,</span><span class="hl-var">$data</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$reply</span><span class="hl-code"> = </span><span class="hl-identifier">curl_exec</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$ch</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">curl_close</span><span class="hl-brackets">(</span><span class="hl-var">$ch</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-var">$reply</span><span class="hl-code">;
</span><span class="hl-brackets">}</span><span class="hl-code">
</span><span class="hl-inlinetags">?&gt;</span></pre></td></tr></table></div>
</li></ol></div><p>
</p>
</div>
</div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"><a accesskey="u" href="ch13.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>