How to call a website service from PHP?

2019-02-16 02:39发布

问题:

My problem is the following, I have an EmailReports.php on my server which I use to send mails like EmailReports.php?who=some@gmail.com&what=123456.pdf

I can NOT modify EmailReports.php since that belongs to a diferent project and it instantly sends an email and has been aproved by QA team and all that stuff.

Now, on a diferent LookReports.php I need to offer a service like "Send me the reports I reviewed" which manually can be easily executed as just calling EmailReports.php, the question is, how can I do it by PHP code? so it calls the other PHP automatically.

I have tried without success:

$stuff = http_get("http://...<the url here>");

and

$stuff =  file_get_contents("http://...<the url here>");

I was thinking on import the EmailReports.php but does not seem right since there is no functions, it automatically sends an email.

Or I could replicate EmailReports.php code but that is against the QA policy since extra tests would be needed.

Could you guide me a bit?

Thanks in advance.

回答1:

You could use a Curl request to retrieve information (xml/html/json/etc) from any website.

What is CURL? (short answer)

PHP has a very powerful library of calls that are specifically designed to safely fetch data from remote sites. It's called CURL.

Source : PHP, CURL, and YOU!

Example of Curl function in PHP

/* gets the data from a URL */
function get_data($url)
{
 if(function_exists('curl_init')){
 $ch = curl_init();
 $timeout = 5;
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
 $data = curl_exec($ch);
 curl_close($ch);
 return $data;
 } else 'curl is not available, please install';
 }

Source : Download a URL’s Content Using PHP cURL

Alternatively, you could do what you are currently doing with file_get_contents but many hosts don't allow this. (Walsh, 2007)

Usage

<?php
$mydata = get_data('http://www.google.co.nz');
echo '<pre>';
print_r($mydata); //display the contents in $mydata as preformatted text
echo '</pre>';
?>

Try to test it, with other websites because more often than not google will return a 404 request (this is to be expected), after a curl has been executed.