Error 500- как избежать переполнения кеша?!

M2
На сайте с 19.11.2014
Offline
1
896

Ребят, нужна помощь.В общем, имеем такой скрипт:

<?

function getSslPage($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}


include "simple_html_dom.php";

$servername = "11111";
$username = "1111111";
$password = "111111111";
$dbname = "111111111111f";

$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$url = "https://site.net/post";
$html = str_get_html(getSslPage($url));
foreach($html->find('span[class=thumb]') as $e){
//echo $e->innertext;
$purl = str_get_html($e->innertext);
foreach($purl->find('a') as $a) {
//echo $a->attr['href']."<br>";

$p_html = getSslPage("https://site.net/".$a->attr['href']);
$p_html = str_get_html($p_html);
foreach($p_html->find('img[id=image]') as $pimg){
echo $pimg->attr['src']."<br>";
$function = $pimg->attr['alt'];
$folder_old_name = " $function ";
$folder = substr($folder_old_name, strlen("e621 ") );
mkdir("LP/". $folder);
$path = "LP/" .$folder. '/' .filename.".jpg";
if(!is_file($path))
file_put_contents($path,getSslPage($pimg->attr['src']));
unset($p_html, $pimg);
}
}
}
$conn->close();
?>123 all good

Все бы хорошо, но идет переполнение кеша php(задействованно очень много php-элементов) и вылетает на середине цикла с ERROR 500.Пытался обнулять массив, чтоб по одной переменной сразу из кеша на сервер записывало и стирало для экономии места:

 $p_html = getSslPage("https://site.net/".$a->attr['href']);

$p_html = str_get_html($p_html);
unset($p_html, $pimg);
foreach($p_html->find('img[id=image]') as $pimg){

Но, мне лишь выдает :

Warning: curl_setopt(): CURLOPT_FOLLOWLOCATION cannot be activated when an open_basedir is set in /home/script.php on line 6

Fatal error: Call to a member function find() on a non-object in /home/script.php on line 39

Как решить и что можно предпринять?Может есть какие-то другие варианты как избегать переполнения?:confused:

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#1

500 ошибка это вышибает веб сервер, наверное потому что у вас Nginx стоит. :)

Скрипт выполняется при этом, просто вам не выводиться результат на экран.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
M2
На сайте с 19.11.2014
Offline
1
#2

LEOnidUKG,

Дело в том, что, допустим, на странице 40 элементов, а он после 20-23 выкидывает эту ошибку.И не до конца работает.

M2
На сайте с 19.11.2014
Offline
1
#3

Может кто-нибудь посоветует как оптимизировать скрипт?

Хелпзонович
На сайте с 15.06.2005
Offline
133
#4

Попробуйте после цикла unset($purl). Какая-то там была бяка с simple_html_dom. Уже точнее не помню. Если это не на раз спарсить - перепишите на xpath. И работает быстрее, и предсказуемее. Пример на хабре

Вы там держитесь! Хорошего вам настроения. Здоровья.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий