Из-за этого моя страница загружается очень медленно или вообще не загружается?

#php #memory-leaks #try-catch

#php #утечки памяти #попробуйте-поймайте

Вопрос:

Я только что обновился с php 5.3.4 до 5.3.8. После обновления кажется, что весь мой код, который включает try{, заставляет мою страницу зависать и использовать всю память моего сервера.

 if(preg_match('/^(?:25[0-5]|2[0-4]d|1dd|[1-9]d|d)(?:[.](?:25[0-5]|2[0-4]d|1dd|[1-9]d|d)){3}$/', $ip)){
$xml = @file_get_contents('http://' . $this->service . '/' . $this->version . '/' . $name . '/?key=' . $this->apiKey . 'amp;ip=' . $ip . 'amp;format=xml');
try{
$response = @new SimpleXMLElement($xml);

foreach($response as $field=>$value){
$result[(string)$field] = (string)$value; }
return $result;
}
catch(Exception $e){ $this->errors[] = $e->getMessage();
return;
}
}
 

Это также вызывает серьезные проблемы

 <?php

try{
$gt = new Gtranslate;
$gt->setRequestType('curl');

$SQL = "SELECT * FROM PAGE_CONTENT WHERE live_page = '1'";
$result = mysql_query( $SQL );
while( $row = mysql_fetch_array( $result ) ) {
$page_id_sub = $row["page_id"];
$page_title = $row["page_title"];
$page_permalink = $row["page_permalink"];

if(empty($mylang)){
echo "<a href='/$permalink/$page_permalink.html'>$page_title</a> |";
}
else {
$page_trans = $gt->$mylang("$page_title");
echo "<a href='/$permalink/$page_permalink.html'>$page_trans</a> |";
}
}
}
catch (GTranslateException $ge){
echo $ge->getMessage();
}
?>
 

Ответ №1:

Вероятно, это имеет очень мало общего с try вашими удаленными запросами и гораздо больше связано с ними (т. Е. file_get_contents() И $gt->$mylang() ).

В качестве эталона удалите эти строки и посмотрите, как работает ваша страница. Если они действительно являются виновником, вы можете рассмотреть возможность кэширования их ответа или какой-либо другой подход, чтобы вы не делали запрос при каждой загрузке страницы.

Комментарии:

1. Вы правы, я закомментировал $xml = @file_get_contents(‘http: //’ . $this->service . ‘/’ . $this->version . ‘/’ . $name . ‘/?key=’ . $this->apiKey . ‘amp;ip=’ . $ip . ‘amp;format=xml’); и страница загружается нормально. Но почему это работало раньше и как я могу это исправить?

2. Я заменил file_get_contents на simplexml_load_file . Страницы загружаются быстрее, но все еще немного медленно

3. Если на сервере больше ничего не изменилось, возможно , вы могли бы изучить обновление PHP. Но я думаю, что это, скорее всего, случайность. Вы всегда можете удалить try/catch или подавление ошибок. Последнее в любом случае опрометчиво.