This class basically encapsulates the following four built in functions: fopen, file_get_contents, filesockopen, and curl.
The only reason I created this class is because sometime some of my work will work on some hosting and some will not because of the file open method I use. This will enable me to easily ask people to switch functions without having to implement much coding on their side.
The class allows users to add headers to file_get_contents, filesockopen, and curl (including referrals, cookies, field inputs, etc..).
Sample Implementation:
<?php
require_once('fileOpen.class.php');
/*
File Open fopen example
*/
$page = new openURL('http://www.google.com');
$page->doOpen(1);
echo $page->returnPage();
/*
File Open file_get_contents example
*/
$page = new openURL('http://www.google.com');
$page->addToFileGetContents('method','GET');
$page->doOpen(2);
echo $page->returnPage();
/*
File Open fsockopen example
*/
$page = new openURL('www.google.com');
$page->addToFsockopen("GET / HTTP/1.1");
$page->addToFsockopen("Host: www.google.com");
$page->addToFsockopen("Connection: Close\r\n");
$page->doOpen(3);
echo $page->returnPage();
/*
File Open curl example
*/
$page = new openURL('us3.php.net/search.php');
$page->addToCurl(CURLOPT_REFERER,'us3.php.net');
$page->addToCurl(CURLOPT_POST,1);
$page->addToCurl(CURLOPT_POSTFIELDS,'pattern=curl&show=quickref&lang=en');
$page->addToCurl(CURLOPT_FOLLOWLOCATION,true);
$page->doOpen(4);
echo $page->returnPage();
/* Check for any errors */
/*
if($page->errorNumber)
{
echo "$page->errorNumber ($page->errorMessage)<br />\n";
}
*/
Main Class:
<?php
/* Class for the Open */
class openURL
{
/* Page content */
private $pageContent;
/* Page URL */
private $pageURL;
/* Error number */
public $errorNumber = NULL;
/* Error message */
public $errorMessage = NULL;
/* Fsockopen Headers array */
private $fsockopenHeaders = array();
/* Curl Options */
private $curlOptions = array();
/* File Get Contents Array */
private $fgcOptions = array();
/* Page Handeler */
private $fileHandler;
/* constructor, set page url */
public function __construct($pageURL)
{
$this->pageURL = $pageURL;
}
public function doOpen($openOption)
{
/* do actual opening */
switch ($openOption)
{
/* fopen */
case 1:
$this->myfopen();
break;
/* file_get_contents */
case 2:
$this->myfile_get_contents();
break;
/* fsockopen */
case 3:
$this->myfoscokopen();
break;
/* curl */
case 4:
$this->mycurl();
break;
}
}
/* Add to curl options */
public function addToCurl($curlOption,$curlValue){$this->curlOptions[$curlOption] = $curlValue;}
/* Add to headers for fsockopen */
public function addToFsockopen($headerText){$this->fsockopenHeaders[] = $headerText;}
/* Add to stream context (file_get_contents) */
public function addToFileGetContents($fgcOption,$fgcValue){$this->fgcOptions[$fgcOption] = $fgcValue;}
/* Return page content */
public function returnPage(){ return $this->pageContent;}
/* Function to compose headers for fsockopen */
private function composefsoHeaders()
{
$tempUse = NULL;
foreach($this->fsockopenHeaders as $curHeader)
{
$tempUse .= $curHeader."\r\n";
}
$tempUse .= "\r\n";
return $tempUse;
}
/* Function to compose headers for file_get_contents */
private function composefgcHeaders()
{
$tempUse = array(
'http' => array()
);
foreach($this->fgcOptions as $fgcOption => $fcgValue)
{
$tempUse['http'][$fgcOption] = $fcgValue."\r\n";
}
return $tempUse;
}
/* Actual read contents */
private function readContents()
{
$tempUse = NULL;
while (!feof($this->fileHandler))
{
$this->pageContent .= fread($this->fileHandler,1024);
}
unset($tempUse);
}
/* fopen function */
public function myfopen()
{
/* use ob_start to record errors */
ob_start();
$this->fileHandler = fopen($this->pageURL,'r');
if($this->fileHandler)
{
ob_end_clean();
$this->readContents();
fclose($this->fileHandler);
} else {
$this->errorMessage = ob_get_contents();
$this->errorNumber = '001-FPE';
ob_end_clean();
}
}
/* file_get_contents function */
public function myfile_get_contents()
{
$context = stream_context_create($this->composefgcHeaders());
ob_start();
$this->pageContent = file_get_contents($this->pageURL,false, $context);
$this->errorMessage = ob_get_contents();
/* check for errors */
if($this->errorMessage != NULL)
{
$this->errorNumber = '002-FPE';
}
ob_end_clean();
}
/* fsockopen function */
public function myfoscokopen()
{
/* Supress errors using ob_start */
ob_start();
$this->fileHandler = fsockopen($this->pageURL, 80,$this->errorNumber, $this->errorMessage, 30);
if($this->fileHandler)
{
fwrite($this->fileHandler,$this->composefsoHeaders());
ob_end_clean();
$this->readContents();
} else {
$this->errorMessage .= ob_get_contents();
$this->errorNumber = '003-FPE';
ob_end_clean();
}
}
/* curl function */
public function mycurl()
{
$this->fileHandler = curl_init();
curl_setopt($this->fileHandler, CURLOPT_URL, $this->pageURL);
curl_setopt($this->fileHandler, CURLOPT_RETURNTRANSFER, true);
foreach($this->curlOptions as $option => $value)
{
curl_setopt($this->fileHandler, $option, $value);
}
$this->pageContent = curl_exec($this->fileHandler);
$this->errorMessage = curl_errno($this->fileHandler);
$this->errorNumber = curl_error($this->fileHandler);
curl_close($this->fileHandler);
}
}