У меня есть скрипт php, который запускает простой запрос cURL и анализирует его на предмет некоторых данных. Четыре из них выполняются для каждого веб-пользователя на моем сайте, и в PS я вижу эти процессы, используя 12M RAM. По сути, я удалил все, что мог из этого сценария, что касается циклов и принятия решений, поэтому я считаю, что в cURL утечка памяти, но я не совсем уверен, что делать.
Мне не хватает ключа, выбирающего CURL? Что я могу сделать, чтобы использовать меньше памяти или процессорного времени?
<?php
//Caching
$cachefile = '../../playlistcache/curplayingBOSUN_cache.html';
$cachetime = 18;
// Serve from the cache if it is younger than $cachetime
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
include($cachefile);
echo "<!-- Cached copy, generated ".date('H:i', filemtime($cachefile))." -->\n";
exit;
}
ob_start(); // Start the output buffer
// URL to your Shoutcast server, including port
// don't put in the http:// part! do it like you see here
// also, reverse DNS lookup needs to be on, or this probably won't work
$server = "SERVERADDRESS";
// Admin password for your Shoutcast server
$password = "SERVERPASSWORD";
$mysession = curl_init();
curl_setopt($mysession, CURLOPT_URL, "http://$server/admin.cgi?sid=1&mode=viewxml");
curl_setopt($mysession, CURLOPT_HEADER, false);
curl_setopt($mysession, CURLOPT_RETURNTRANSFER, true);
curl_setopt($mysession, CURLOPT_POST, false);
curl_setopt($mysession, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($mysession, CURLOPT_USERPWD, "admin:$password");
curl_setopt($mysession, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($mysession, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
$xml = curl_exec($mysession);
curl_close($mysession);
$songs = "\n";
$xmlreader = new XMLReader();
$xmlreader->xml($xml);
//$xmlreader->next('SHOUTCASTSERVER');
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$xmlreader->read();
$songs .= "\n";
$songs .= $xmlreader->readString();
echo $songs;
// Cache the output to a file
$fp = fopen($cachefile, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
ob_end_flush(); // Send the output to the browser
?>
Вот XML, который он анализирует:
<SHOUTCASTSERVER>
<CURRENTLISTENERS>2</CURRENTLISTENERS>
<PEAKLISTENERS>29</PEAKLISTENERS>
<MAXLISTENERS>300</MAXLISTENERS>
<UNIQUELISTENERS>2</UNIQUELISTENERS>
<AVERAGETIME>16318</AVERAGETIME>
<SERVERGENRE>Misc</SERVERGENRE>
<SERVERURL></SERVERURL>
<SERVERTITLE></SERVERTITLE>
<SONGTITLE>The Velvet Underground - White Light/White Heat</SONGTITLE>
<NEXTTITLE/>
<STREAMHITS>5093</STREAMHITS>
<STREAMSTATUS>1</STREAMSTATUS>
<STREAMPATH>/urbos.mp3</STREAMPATH>
<BITRATE>96</BITRATE>
<CONTENT>audio/mpeg</CONTENT>
<VERSION>2.0.0.29 (posix(linux x86))</VERSION>
<LISTENERS>
<LISTENER>
<HOSTNAME></HOSTNAME>
<USERAGENT>unregularradio/1.0 CFNetwork/548.0.4 Darwin/11.0.0</USERAGENT>
<CONNECTTIME>114</CONNECTTIME>
<UID>0xb3a0a0cc</UID>
</LISTENER>
<LISTENER>
<HOSTNAME></HOSTNAME>
<USERAGENT>
iTunes/10.5.3 (Windows; Microsoft Windows Vista Business Edition Service Pack 2 (Build 6002)) AppleWebKit/534.52.7
</USERAGENT>
<CONNECTTIME>32522</CONNECTTIME>
<UID>0xb4104f0c</UID>
</LISTENER>
</LISTENERS>
<SONGHISTORY>
<SONG>
<PLAYEDAT>1329390441</PLAYEDAT>
<TITLE>The Velvet Underground - White Light/White Heat</TITLE>
</SONG>
<SONG>
<PLAYEDAT>1329390265</PLAYEDAT>
<TITLE>Kim Hiorthøy - Torture Happiness</TITLE>
</SONG>
<SONG>
<PLAYEDAT>1329390087</PLAYEDAT>
<TITLE>Wild Adriatic - The Writer</TITLE>
</SONG>
<SONG>
<PLAYEDAT>1329390058</PLAYEDAT>
<TITLE>UNregular Radio - Lift Fest www.liftfest.com</TITLE>
</SONG>
<SONG>
<PLAYEDAT>1329389770</PLAYEDAT>
<TITLE>Mister Vertigo - Spear Hill</TITLE>
</SONG>
<SONG>
<PLAYEDAT>1329389627</PLAYEDAT>
<TITLE>The Pinkerton Thugs - Together</TITLE>
</SONG>
<SONG>
<PLAYEDAT>1329389360</PLAYEDAT>
<TITLE>Jack Johnson - Go On</TITLE>
</SONG>
<SONG>
<PLAYEDAT>1329389154</PLAYEDAT>
<TITLE>
Yung Damon!_My Show ft. Gucci Mane prod. by Big Hurt (Dirty)
</TITLE>
</SONG>
<SONG>
<PLAYEDAT>1329388975</PLAYEDAT>
<TITLE>Gayle Skidmore - Bad For Me</TITLE>
</SONG>
<SONG>
<PLAYEDAT>1329388741</PLAYEDAT>
<TITLE>Dubb Zero - Track two</TITLE>
</SONG>
</SONGHISTORY>
</SHOUTCASTSERVER>