loading

Запись sitemap.xml в файл для Opencart 2.x и 3.x

Создаём физический sitemap.xml и снимаем нагрузку с БД

Запись sitemap.xml в файл для Opencart 2.x и 3.x

Привет! Решил поделиться с тобой полезным решением для web-движка Opencart 2.x и 3.x. Речь пойдёт о том, как добавить файл sitemap Opencart 2 и Opencart 3.

Данное решение позволяет исключить постоянное обращение поисковых роботов к встроенному в Opencart генератору sitemap, который пересоздаёт карту сайта каждый раз при каждом новом обращении к скрипту (генерирует карту сайта «на лету»), что тем самым очень сильно нагружает web-сервер, на котором стоит сайт, а также позволит генерировать вам две разные карты сайта для Google и Yandex соответственно.

Также подходит для ocStore 2.x, 3.x и других модификаций движка.

Создание и правка файлов

Как добавить файл sitemap Opencart 2 и Opencart 3? Подключись через FTP-клиент к корневой директории твоего сайта и создай в ней файл с расширением *.php и названием sitemap-1JzDeTT, после этого выставь права 0755 на этот файл и открой его в любом удобном для тебятекстовом редакторе (для Windows я рекомендую использовать Notepad++, а для OS X — TextWrangler или Coda). 

Файл можно назвать как угодно, но досточно сложно, чтобы исключить прямое обращение к нему третьим лицам.

Затем скопируй и вставь в него следующий код:

Данный кусок кода предназначен для тех людей, у которых установлено два генератора sitemap на сайте: Google Sitemap (стоковый модуль) и Yandex Sitemap в разеделе «Дополнения» > «Каналы продвижения»

Для записи Google Sitemap и Yandex Sitemap в файл под Opencart 2.x

<?php
 // Для Opencart 2.x
//Подгружаем конфиг
require_once('config.php');

//Назначаем переменные
//Внимание: HTTPS_SERVER - если вы используете https:// и HTTP_SERVER если http://
$siteMapSource = HTTP_SERVER . 'index.php?route=feed/google_sitemap';
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

$siteMapSource2 = HTTP_SERVER . 'index.php?route=feed/yandex_sitemap';
$xml2 = file_get_contents($siteMapSource2);
$siteMapContent2 = simplexml_load_string($xml2);

//Записываем данные из БД в статические файлы *.xml
if (!file_put_contents('1_g_sitemap.xml', $siteMapContent->asXML())) {
    error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Google content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
    die('Google Sitemap data export process has been failed!');   
} elseif (!file_put_contents('1_ya_sitemap.xml', $siteMapContent2->asXML())) {	
	error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Yandex content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
	die('Yandex Sitemap data export process has been failed!');	
} else { echo 'G,YA sitemaps update has been successfully completed!'; } 

?>

Скачать файл для Yandex и Google под Opencart 2.x

Для записи Google Sitemap и Yandex Sitemap в файл под Opencart 3.x

<?php
 // Для Opencart 3.x
//Подгружаем конфиг
require_once('config.php');

//Назначаем переменные
//Внимание: HTTPS_SERVER - если вы используете https:// и HTTP_SERVER если http://
$siteMapSource = HTTP_SERVER . 'index.php?route=extension/feed/google_sitemap';
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

$siteMapSource2 = HTTP_SERVER . 'index.php?route=extension/feed/yandex_sitemap';
$xml2 = file_get_contents($siteMapSource2);
$siteMapContent2 = simplexml_load_string($xml2);

//Записываем данные из БД в статические файлы *.xml
if (!file_put_contents('1_g_sitemap.xml', $siteMapContent->asXML())) {
    error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Google content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
    die('Google Sitemap data export process has been failed!');   
} elseif (!file_put_contents('1_ya_sitemap.xml', $siteMapContent2->asXML())) {	
	error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Yandex content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
	die('Yandex Sitemap data export process has been failed!');	
} else { echo 'G,YA sitemaps update has been successfully completed!'; } 

?>

Скачать файл для Yandex и Google под Opencart 3.x

Обрати своё внимание на переменную HTTP_SERVER в коде. Используй её, если твой сайт доступен только по незащищенному протоколу http, либо используй переменную HTTPS_SERVER, если твой сайт доступен только по защищенному протоколу https.

Если у тебя установлен только стоковый модуль генерации карты сайта для Opencart — Google Sitemap, то тебе необходимо скопировать и вставить в созданный файл следующий кусок кода:

Для записи Google Sitemap в файл под Opencart 2.x

<?php
// Для Opencart 2.x
//Подгружаем конфиг
require_once('config.php');

//Назначаем переменные
//Внимание: HTTPS_SERVER - если вы используете https:// и HTTP_SERVER если http://
$siteMapSource = HTTPS_SERVER . 'index.php?route=feed/google_sitemap';
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

//Записываем данные из БД в статический файл *.xml
if (!file_put_contents('sitemap.xml', $siteMapContent->asXML())) {
    error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Google content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
    die('Google Sitemap data export process has been failed!');   
} else { echo 'Google Sitemap update has been successfully completed!'; } 

?>

Скачать файл для Google под Opencart 2.x

Для записи Google Sitemap в файл под Opencart 3.x

<?php
// Для Opencart 3.x
//Подгружаем конфиг
require_once('config.php');

//Назначаем переменные
//Внимание: HTTPS_SERVER - если вы используете https:// и HTTP_SERVER если http://
$siteMapSource = HTTPS_SERVER . 'index.php?route=extension/feed/google_sitemap';
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

//Записываем данные из БД в статический файл *.xml
if (!file_put_contents('sitemap.xml', $siteMapContent->asXML())) {
    error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Google content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
    die('Google Sitemap data export process has been failed!');   
} else { echo 'Google Sitemap update has been successfully completed!'; } 

?>

Скачать файл для Google под Opencart 3.x

Соответственно, если ты используешь только модуль для Opencart — Yandex Sitemap, тогда тебе потребуется кусок кода, приведенный ниже:

Для записи Yandex Sitemap в файл под Opencart 2.x

<?php

// Для Opencart 2.x
//Подгружаем конфиг
require_once('config.php');

//Назначаем переменные
//Внимание: HTTPS_SERVER - если вы используете https:// и HTTP_SERVER если http://
$siteMapSource = HTTPS_SERVER . 'index.php?route=feed/yandex_sitemap';
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

//Записываем данные из БД в статический файл *.xml
if (!file_put_contents('sitemap.xml', $siteMapContent->asXML())) {
    error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Yandex content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
    die('Yandex Sitemap data export process has been failed!');   
} else { echo 'Yandex Sitemap update has been successfully completed!'; } 

?>

Скачать файл для Yandex под Opencart 2.x

Для записи Yandex Sitemap в файл под Opencart 3.x

<?php

// Для Opencart 3.x
//Подгружаем конфиг
require_once('config.php');

//Назначаем переменные
//Внимание: HTTPS_SERVER - если вы используете https:// и HTTP_SERVER если http://
$siteMapSource = HTTPS_SERVER . 'index.php?route=extension/feed/yandex_sitemap';
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

//Записываем данные из БД в статический файл *.xml
if (!file_put_contents('sitemap.xml', $siteMapContent->asXML())) {
    error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Yandex content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
    die('Yandex Sitemap data export process has been failed!');   
} else { echo 'Yandex Sitemap update has been successfully completed!'; } 

?>

Скачать файл для Yandex под Opencart 3.x

Проверка работоспособности скрипта

После этого сохраняй изменения в файле и закрывай текстовый редактор. Теперь тебе нужно проверить получившийся скрипт на работоспособность.

Для этого тебе необходимо напрямую обратиться к данному файлу через браузер, если всё прошло без ошибок, то ты увидишь сообщение об успешной генерации статических файлов sitemap в своём браузере:

Запись sitemap.xml в файл для Opencart 2.X
Пример вывода об успешной генерации sitemap для Google и Yandex

Также в корневой директории твоего сайта, рядом с файлом sitemap-1JzDeTT.php появятся новые файлы: для первого случая — 1_g_sitemap.xml и 1_ya_sitemap.xml, а для остальных — sitemap.xml

Запись sitemap.xml в файл для Opencart 2.X
Для первого случая — 1_g_sitemap.xml и 1_ya_sitemap.xml

Добавляем задание в планировщик CRON

Для того, чтобы карта сайта обновлялась автоматически, тебе необходимо добавить задание в планировщик CRON на хостинге, предварительно установив пакет wget для Linux.

Далее ты можешь добавить команду через GUI-панель управления хостинга

/usr/bin/wget -O - -q -t 1 'http://site.ru/sitemap-1JzDeTT.php' > /dev/null 2>&1

Где site.ru — домен твоего сайта.

или, если у тебя есть доступ к файловой системе web-сервера (VPS, VDS), тогда ты можешь напрямую отредактировать файл crontab через SSH или sFTP:

vi /etc/crontab

или

nano /etc/crontab

и перед символом # добавить:

30  3   * * *   root    /usr/bin/wget -O - -q -t 1 'http://site.ru/sitemap-1JzDeTT.php' > /dev/null 2>&1

Где site.ru — домен твоего сайта.

Сохранить и закрыть текстовый редактор в терминале.

Вывод

Теперь каждый день в 03:30 твоя карта сайта будет автоматически обновляться в файл, соответственно поисковым роботам ты указываешь путь к физическому файлу — /1_ya_sitemap.xml или 1_g_sitemap.xml, а не к динамическому — /index.php?route=feed/google_sitemap или /index.php?route=extension/feed/google_sitemap в Opencart 3.

Таким образом, генерация карты твоего сайта «на лету» будет происходить один раз в сутки по расписанию, а роботы будут «терзать» статический файлик, не нагружая при этом сервак.

Чтобы сделать «умный» файл robots.txt, который будет отдавать поисковому боту Яндекса (и ему подобным) файл sitemap.xml с упрощенной разметкой, а поисковому роботу от Google — sitemap.xml, который включает в себя изображения товаров, рекомендую тебе изучить эту статью: Создаём умный robots.txt на PHP.

Удачных доработок и до связи!

Плюсануть
Поделиться
Отправить
Запинить
Понравился этот пост? Поделись им в соцсети!
Популярное
117 комментариев
Алекс
Алекс

6 декабря 2017, 18:47

В robots.txt какой путь прописывать на карту сайта для Яндекса и Гугла?

Александр Окатьев

Здравствуйте, Алекс!

Рекомендую вам ознакомиться с этой статьей: https://okatiev.ru/all/sozdayom-umny-robots-txt-na-php/, она поможет вам организовать гибкий robots.txt, в котором вы сможете прописать несколько sitemap’ов под разные поисковики (Google, Yandex) бесконфликтным образом для каждого из них, то есть ЯндексБот будет видеть свою карту сайта, а ГуглБот — свою. Успешных доработок!

До связи!

Алекс
Алекс

7 декабря 2017, 10:03

По ссылке станица не найдена.

Александр Окатьев

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

Алекс
Алекс

7 декабря 2017, 12:12

Спасибо. Нашел. Написал комментарий на странице.

Семен Ивасишин
Семен Ивасишин

12 января 2018, 11:51

А вы не подскажите как делать в ОпенКарт версии 3.x Так же, или что то надо менять?

Александр Окатьев

Здравствуйте! Скорее всего для Opencart 3.х нужно будет производить определенные доработки или использовать иной метод, так как семейство движков отличается.

Семен Ивасишин
Семен Ивасишин

12 января 2018, 12:01

У меня opencart-3.0.2.0-rs загрузил ваш файл запустил его выдал вот это:
Warning: file_get_contents(http://po300.ru/index.php?route=feed/google_sitemap): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/yifrfcdk/po300.ru/sitemap-1JzDeTT.php on line 9

Warning: file_get_contents(http://po300.ru/index.php?route=feed/yandex_sitemap): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/yifrfcdk/po300.ru/sitemap-1JzDeTT.php on line 13

Fatal error: Uncaught Error: Call to a member function asXML() on boolean in /home/yifrfcdk/po300.ru/sitemap-1JzDeTT.php:17 Stack trace: #0 {main} thrown in /home/yifrfcdk/po300.ru/sitemap-1JzDeTT.php on line 17

Александр Окатьев

При доступе к адресу http://po300.ru/index.php?route=feed/google_sitemap — сайт отдаёт ошибку 404, то есть сообщает нам, что такой страницы не существует.

У вас включен модуль Google Sitemap в админке?

Семен Ивасишин
Семен Ивасишин

13 января 2018, 12:55

А как же без него? Включен

Семен Ивасишин
Семен Ивасишин

13 января 2018, 12:58

О! стоп. перепутал... нет не включен и нет его вооюще

Александр Окатьев

Вам нужно его поставить, а также поставить Yandex Sitemap для Opencart, а лишь затем использовать данную доработку.

Семен Ивасишин
Семен Ивасишин

13 января 2018, 13:13

Уже ставлю... только яндекс нашел бесплатный для версии 3

Семен Ивасишин
Семен Ивасишин

13 января 2018, 13:19

Поставил, но есть ещё Google Base это что?

Александр Окатьев

Google Base можете проигнорировать, вам нужен Google Sitemap.

Семен Ивасишин
Семен Ивасишин

13 января 2018, 13:22

Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0

Вот что теперь выдал: Fatal error: Unknown: Failed opening required ’/home/yifrfcdk/po300.ru/sitemap-1JzDeTT.php’ (include_path=’.:/opt/alt/php70/usr/share/pear’) in Unknown on line 0

Александр Окатьев

В Opencart 3 используется немного другой URL, я сейчас подправлю модуль для вас.

Семен Ивасишин
Семен Ивасишин

13 января 2018, 13:26

А в корень сайта только этот файл надо загружать sitemap-1JzDeTT.php без вот этого: .DS_Store

Александр Окатьев

Файл .DS_store можете удалить.

Семен Ивасишин
Семен Ивасишин

13 января 2018, 13:29

Ну я его и не грузил... просто спросил... Ну в общем пока карту не создал...
Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0

Fatal error: Unknown: Failed opening required ’/home/yifrfcdk/po300.ru/sitemap-1JzDeTT.php’ (include_path=’.:/opt/alt/php70/usr/share/pear’) in Unknown on line 0

Александр Окатьев

Дополнил данную статью, можете ознакомиться. Вам необходимо изменить строку в файле sitemap-1JzDeTT.php:

$siteMapSource = HTTP_SERVER . 'index.php?route=feed/google_sitemap';

на

$siteMapSource = HTTP_SERVER . 'index.php?route=extension/feed/google_sitemap';

и строку:

$siteMapSource2 = HTTP_SERVER . 'index.php?route=feed/yandex_sitemap';

на

$siteMapSource2 = HTTP_SERVER . 'index.php?route=extension/feed/yandex_sitemap';
Семен Ивасишин
Семен Ивасишин

13 января 2018, 13:54

Ща попробую...

Семен Ивасишин
Семен Ивасишин

13 января 2018, 14:05

G,YA sitemaps update has been successfully completed!

Семен Ивасишин
Семен Ивасишин

13 января 2018, 14:07

1_g_sitemap.xml
и
1_ya_sitemap.xml
Созданы... Вах Вах спасибо на версии 3

Александр Окатьев

Отлично :)
Всегда рад помочь!

Семен Ивасишин
Семен Ивасишин

13 января 2018, 14:09

Буду дальше дерзать надо теперь крон подключить читал статью как то неуверенно себя чувствую после прочтенного. Но попробую.... А скажите как обновлять карту в ручную? Пока крон не подключен...

Александр Окатьев

В браузере набираете http://вашсайт.ru/sitemap-1JzDeTT.php и переходите по ссылке, затем видите сообщение об успешном обновлении файлов «G,YA sitemaps update has been successfully completed!».

Всё, sitemap-файлы обновлены!

Семен Ивасишин
Семен Ивасишин

13 января 2018, 14:15

Вот набрал с браузера адрес http://po300.ru/1_ya_sitemap.xml а он пишет не нашел такую страницу это почему?

Александр Окатьев

В корне сайта есть файлы 1_ya_sitemap.xml и 1_g_sitemap.xml? Если нет, то создайте такие файлы вручную и выставьте на них права 755 или 777.

Семен Ивасишин
Семен Ивасишин

13 января 2018, 14:21

Веб Мастер яндекса на проверке адреса http://po300.ru/1_ya_sitemap.xml то же пишет : Ошибка

Семен Ивасишин
Семен Ивасишин

13 января 2018, 14:29

Не помогло и 777 и 755 все равно не открывает Может у меня что то в .htaccess что не позволяет открывать их?

Александр Окатьев

Откройте эти файлы блокнотом, там есть содержимое в них?

Семен Ивасишин
Семен Ивасишин

13 января 2018, 14:30

AddDefaultCharset UTF-8

Options -Indexes

<FilesMatch «\.(tpl|ini|log)»>
Order deny,allow
Deny from all
</FilesMatch>

<FilesMatch «error.(txt)$»>
Order Allow,Deny
Deny from all
</FilesMatch>

<Files .htaccess>
order allow,deny
deny from all
</Files>

RewriteCond %{HTTP_HOST} ^www.po300.ru$ [NC]
RewriteRule ^(.*)$ http://po300.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\ HTTP/
RewriteRule ^index\.html$ / [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ / [R=301,L]
RewriteCond %{QUERY_STRING} ^route=common/home$
RewriteCond %{REQUEST_METHOD} !^POST$
RewriteRule ^index\.php$ http://%{HTTP_HOST}? [R=301,L]

RewriteCond %{QUERY_STRING} ^qwerty\d+
RewriteRule ^$ /? [R=301,L]

RewriteBase /
RewriteCond %{QUERY_STRING} ^page=1$
RewriteRule (.*) $1? [R=301,L]

RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^hotline.xml$ /system/download/hotline.xml [L]
RewriteRule ^yandex.xml$ /system/download/yandex.xml [L]
RewriteRule ^market_yandex_ua.xml$ /system/download/market_yandex_ua.xml [L]
RewriteRule ^freemarket_kiev_ua.xml$ /system/download/freemarket_kiev_ua.xml [L]
RewriteRule ^price_ua.xml$ /system/download/price_ua.xml [L]
RewriteRule ^metamarket_com_ua.xml$ /system/download/metamarket_com_ua.xml [L]
RewriteRule ^ava_ua.xml$ /system/download/ava_ua.xml [L]
RewriteRule ^hotprice_ua.xml$ /system/download/hotprice_ua.xml [L]
RewriteRule ^technoportal_ua.xml$ /system/download/technoportal_ua.xml [L]
RewriteRule ^mircen_com_ua.xml$ /system/download/mircen_com_ua.xml [L]
RewriteRule ^vseceni_kiev_ua.xml$ /system/download/vseceni_kiev_ua.xml [L]
RewriteRule ^qp_ua.xml$ /system/download/qp_ua.xml [L]
RewriteRule ^np_ua.xml$ /system/download/np_ua.xml [L]
RewriteRule ^ukrshops_com_ua.xml$ /system/download/ukrshops_com_ua.xml [L]
RewriteRule ^nadavi_net.xml$ /system/download/nadavi_net.xml [L]
RewriteRule ^spravka_ua.xml$ /system/download/spravka_ua.xml [L]
RewriteRule ^i_m_com_ua.xml$ /system/download/i_m_com_ua.xml [L]
RewriteRule ^google_sitemap$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^yandex_market$ index.php?route=feed/yandex_market [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

RewriteRule sitemap.xml /index.php?route=feed/google_sitemap
RewriteRule google_sitemap /index.php?route=feed/google_sitemap
RewriteRule ^(contact)$ index.php?route=information/$1
RewriteRule ^(account/return/insert)$ index.php?route=$1
RewriteCond %{QUERY_STRING} ^route=common/home$

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\ HTTP/
RewriteRule ^index\.html$ / [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ / [R=301,L]
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^index\.php$ / [R=301]

Options +SymLinksIfOwnerMatch

#php_flag register_globals off
#php_flag magic_quotes_gpc Off
#php_value upload_max_filesize 999M
#php_value post_max_size 999M
#php_value max_execution_time 20000
#php_value max_input_time 20000
#php_admin_value open_basedir none

<ifModule mod_headers.c>
Header set Connection keep-alive
</ifModule>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
<ifModule mod_headers.c>
Header append Vary User-Agent
</ifModule>

Александр Окатьев

У вас не работает ModRewrite.

Перед строкой

RewriteCond %{HTTP_HOST} ^www.po300.ru$ [NC]

добавьте строку

RewriteEngine On

Также удалите строки:

RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule google_sitemap /index.php?route=feed/google_sitemap
Семен Ивасишин
Семен Ивасишин

13 января 2018, 14:33

Записи есть не пустой Вот это от гугл мар (сократил текст) :

<?xml version=«1.0» encoding=«UTF-8»?>
<urlset xmlns=«http://www.sitemaps.org/schemas/sitemap/0.9» xmlns:image=«http://www.google.com/schemas/sitemap-image/1.1»><url> <loc>http://po300.ru/premium-aloe-soothing-gel</loc> <changefreq>weekly</changefreq> <lastmod>2018-01-09T01:37:11+00:00</lastmod> <priority>1.0</priority> <image:image> <image:loc>http://po300.ru/image/cache/catalog/demo/MISSHAPremiumAloeSoothingGel-400x490-</url><url> <loc>http://po300.ru/terms</loc> <changefreq>weekly</changefreq> <priority>0.5</priority></url><url> <loc>http://po300.ru/missha-istoriya-brenda</loc> <changefreq>weekly</changefreq> <priority>0.5</priority></url></urlset>

Семен Ивасишин
Семен Ивасишин

13 января 2018, 15:08

Поправил в .htaccess но все по прежнему... не открывает страницы карты говорит не нашел страницу...

Александр Окатьев

У вас что-то странное происходит с ЧПУ. Ни одна ссылка из .htaccess не интерпретируется. Напишите в поддержку хостинга, с вопросом о том, что не работает .htaccess. Что они ответят?

Семен Ивасишин
Семен Ивасишин

13 января 2018, 15:19

Хорошо... попробую

Александр Окатьев

Где-то, что-то в настройках Web-сервера не верно указано.

Семен Ивасишин
Семен Ивасишин

13 января 2018, 15:23

Я правда не понял о чем конкретно их спросить что бы они поняли что хочу от них?

Семен Ивасишин
Семен Ивасишин

13 января 2018, 16:20

Я определил что это не хостинг это какая то запись в в .htaccess попробую отыскать её...

Семен Ивасишин
Семен Ивасишин

13 января 2018, 17:17

Вот, нашел строку в .htaccess, которая не давала выводить карту:
RewriteRule sitemap.xml /index.php?route=feed/google_sitemap

Семен Ивасишин
Семен Ивасишин

13 января 2018, 17:25

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

Александр Окатьев

http://po300.ru/1_ya_sitemap.xml — необходимо указывать Яндексу (без ссылок на изображения)
http://po300.ru/1_g_sitemap.xml — необходимо указывать Гуглу (со ссылками на изображения)

Изучите эту статью: https://okatiev.ru/all/sozdayom-umny-robots-txt-na-php/

Семен Ивасишин
Семен Ивасишин

13 января 2018, 17:37

Вот, Яндексу не понравился файл Карты:
Валидатор XML-фидов
Результаты проверки:
XML-файл не соответствует схеме.
Строка: -1 Позиция: -1
Подробнее
<detail>Premature end of file.</detail>

Семен Ивасишин
Семен Ивасишин

13 января 2018, 17:40

Не найдено описание для элемента «urlset». Возможно неверно указан корневой элемент.
Строка: 2 Позиция: 61
Подробнее
cvc-elt.1.a: Cannot find the declaration of element ’urlset’.

Семен Ивасишин
Семен Ивасишин

13 января 2018, 17:51

А вот, Анализ файлов Sitemap
Результаты анализа «http://po300.ru/1_ya_sitemap.xml»

Тип файла Файл Sitemap
Размер 4,29 КБ
Количество ссылок 31
Ошибок не найдено


Валидатор XML-фидов
Результаты проверки:
Результаты проверки
Не найдено описание для элемента «urlset». Возможно неверно указан корневой элемент.
Строка: 2 Позиция: 61
Подробнее
<detail>cvc-elt.1.a: Cannot find the declaration of element ’urlset’.</detail>

Александр Окатьев

Всё верно! Это две одинаковые карты сайта, но оформленные под разные поисковые системы: Yandex и Google.

Каждой из них нужно указать свой sitemap, а не два одновременно.

Семен Ивасишин
Семен Ивасишин

13 января 2018, 18:56

Указывал одну по тесту только яндекса...
получается он сам вычисляет наличие второй карты? Странно ведь имя там неканоническое...

Александр Окатьев

Карту сайта для Яндекса проверяйте валидатором в Яндекс.Вебмастере, а карту сайта для Google — в Google Console. Не используйте сторонние анализаторы.

Михаил
Михаил

13 января 2018, 22:50

50к товаров уже не срабатывает. Сколько памяти нужно php выделить на выполнение? Можете рекомендации по php.ini дать. Как генерировать несколько sitemap что бы обойти ограничение в 50к и 10Mb.

Александр Окатьев

В каком смысле не срабатывает? Какую ошибку при этом выдаёт web-сервер?

Михаил
Михаил

13 января 2018, 23:28

500 ошибка в браузере, в логах PHP Fatal error: Call to a member function asXML(); и

Александр Окатьев

Попробуйте такие значения для php.ini:

max_execution_time = 180
max_input_time = 120
max_input_vars = 1000000
memory_limit = 1024M
default_socket_timeout = 90

и для apache2.conf

Timeout 600
KeepAlive On
MaxKeepAliveRequests 4096
KeepAliveTimeout 120

Будет здорово, если вы скопируете ошибку целиком из файла логов.

Михаил
Михаил

14 января 2018, 00:06

PHP Fatal error: Call to a member function asXML() on boolean in /home/пользователь/web/адрес_сайта/public_html/sitemap-1JzDeTT.php on line 13

Александр Окатьев

Какая версия движка у вас, какого хостинг-провайдера используете и какая версия php на сервере? Ошибка сразу же появляется при обращении к скрипту или спустя некоторое время, после ожидания?

Михаил
Михаил

14 января 2018, 00:25

Ver. 3.0.2.1b, у меня VPS на РЕГ.РУ, php 5.6. Долго грузит и в итоге падает. Но googlesitemap и из коробки не работал, так же падало. Yandex-sitemap срабатывает.

Александр Окатьев

Вы используете версию файла из статьи для OC 3.x?
Если google_sitemap укладывал web-сервер из коробки, то он и продолжает это успешно делать. Попробуйте внести изменения в php.ini и в apache2.conf, затем перезапустите apache2 на VPS-ке и проверьте обращение к скрипту.
К слову, узким местом может быть конфиг MySQL, но сперва проверьте генерацию с использованием новых значений.

Михаил
Михаил

14 января 2018, 02:08

Нет не тянет всё равно. Я вчера пробовал yandex-sitemap, создаёт за минуту, но 133К ссылок в sitemap, я так понимаю это у меня дубли, товаров всего 44К, получается 44К ЧПУ адресов + категории + ЧПУ + производители + ЧПУ как раз получается 133К, как вырубить категории и производителей, чисто что бы прямые ЧПУ ссылки на товары остались?

Михаил
Михаил

14 января 2018, 02:49

Заработало. Выпилил категории, производители, оставил только товары. Спасибо за скрипт!

Александр Окатьев

Карта под Google генерится?

Михаил
Михаил

14 января 2018, 16:32

Да, генерится, но я выпилил код связанный с картинками, производителями и категориями. Cron тоже отрабатывает. Большое спасибо!

Александр Окатьев

Тогда можете использовать для Google ту карту сайта, которая генерируется для Яндекса, если вы выпилили изображения из Гугловой. Толку в ней не будет, в таком случае, только лишняя нагрузка) Обращайтесь, всегда рад помочь!

Семен Ивасишин
Семен Ивасишин

14 января 2018, 16:35

Михаил, и как пилить этот код связанный с картинками, производителями, категориями и где?

Михаил
Михаил

14 января 2018, 16:38

catalog\controller\extension\feed\google_sitemap.php

<?php
class ControllerExtensionFeedGoogleSitemap extends Controller {
public function index() {
if ($this->config->get(’feed_google_sitemap_status’)) {
$output = ’<?xml version=«1.0» encoding=«UTF-8»?>’;
$output .= ’<urlset xmlns=«http://www.sitemaps.org/schemas/sitemap/0.9»>’;

$this->load->model(’catalog/product’);

$products = $this->model_catalog_product->getProducts();

foreach ($products as $product) {
if ($product[’image’]) {
$output .= ’<url>’;
$output .= ’ <loc>’ . $this->url->link(’product/product’, ’product_id=’ . $product[’product_id’]) . ’</loc>’;
$output .= ’ <changefreq>weekly</changefreq>’;
$output .= ’ <lastmod>’ . date(’Y-m-d\TH:i:sP’, strtotime($product[’date_modified’])) . ’</lastmod>’;
$output .= ’ <priority>1.0</priority>’;
$output .= ’</url>’;
}
}

$this->load->model(’catalog/information’);

$informations = $this->model_catalog_information->getInformations();

foreach ($informations as $information) {
$output .= ’<url>’;
$output .= ’ <loc>’ . $this->url->link(’information/information’, ’information_id=’ . $information[’information_id’]) . ’</loc>’;
$output .= ’ <changefreq>weekly</changefreq>’;
$output .= ’ <priority>0.5</priority>’;
$output .= ’</url>’;
}

$output .= ’</urlset>’;

$this->response->addHeader(’Content-Type: application/xml’);
$this->response->setOutput($output);
}
}
}

Семен Ивасишин
Семен Ивасишин

14 января 2018, 16:50

Это вырезать из файла гугла а с яндексом что делать?

Михаил
Михаил

14 января 2018, 17:03

Я не программист, но как понимаю без обработки картинок googlesitemap и yandexsitemap становятся взаимозаменяемыми, карта проходит проверку валидатором гугла и яши. Считается что модуль yandexsitemap меньше базу нагружает, но меня устраивает, cron задание стоит на 3 утра и в момент генерации карты сервер не падает и посетителей в это время нет, то бишь нагрузки.

Михаил
Михаил

14 января 2018, 17:04

Семён это не вырезать, это оставить) вот ссылка на получившийся контроллер https://yadi.sk/d/G4QIcNNx3RSXwi

Семен Ивасишин
Семен Ивасишин

14 января 2018, 17:06

Во... а то я примеряюсь уже это вырезать из файла :)))) Во время сказали...

Семен Ивасишин
Семен Ивасишин

14 января 2018, 17:09

Скачал а у меня опенкарт 3 это ничего там разницы не будет в кодах?
Ваще Александр писал что можно оставить одну карту вот думаю как это сделать и что бы имя её генерировалось просто sitemap.xml

Александр Окатьев

Используйте версию скрипта для генерации одного физического файла под Яндекс (без картинок). Сгенерированный файл будет называться sitemap.xml.

<?php

// Для Opencart 3.x
//Подгружаем конфиг
require_once('config.php');

//Назначаем переменные
//Внимание: HTTPS_SERVER - если вы используете https:// и HTTP_SERVER если http://
$siteMapSource = HTTPS_SERVER . 'index.php?route=extension/feed/yandex_sitemap';
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

//Записываем данные из БД в статический файл *.xml
if (!file_put_contents('sitemap.xml', $siteMapContent->asXML())) {
    error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Yandex content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
    die('Yandex Sitemap data export process has been failed!');   
} else { echo 'Yandex Sitemap update has been successfully completed!'; } 

?>

Или скачайте файл по ссылке: https://okatiev.ru/files/zip/sitemap-for-yandex-oc3.zip

Семен Ивасишин
Семен Ивасишин

14 января 2018, 17:18

Благо-Дарю Александр +++

Александр Окатьев

Во благо :)

Семен Ивасишин
Семен Ивасишин

14 января 2018, 17:24

А как быть с контроллером яндекс теперь?
Отключить его?

Семен Ивасишин
Семен Ивасишин

14 января 2018, 17:26

Вах запутался гугл получается отключить а этот код михаила как он вырезал его в гугле

Семен Ивасишин
Семен Ивасишин

14 января 2018, 17:30

Сгенерилась правильная карта !!! Ура... и по моему там нет картинок... ща проверю...

Семен Ивасишин
Семен Ивасишин

14 января 2018, 17:32

Проверил нет ни одной картинки только правильные ссылки на страницы и это гуд!

Александр Окатьев

Модуль Google Sitemap отключите, оставьте только Yandex Sitemap, в Google Console и Яндекс Вебмастере указывайте один sitemap, который генерирует Яндексовый модуль.

Семен Ивасишин
Семен Ивасишин

14 января 2018, 18:10

а убрать ссылки на производителей и категории здесь: catalog\controller\extension\feed\yandex_sitemap.php такой же код оставить как у Михаила в гугловском файле?

Александр Окатьев

Нужно смотреть. Если файлы идентичные, то можно скопировать, если нет — сделать по аналогии.

Мария
Мария

21 января 2018, 15:51

Добрый день!
У меня похожая проблема: 500 ошибка в браузере, в логах PHP Fatal error: Call to a member function asXML(); Верисия движка OS 23023

Александр Окатьев

Модули Google Sitemap и Yandex Sitemap установлены и активны у вас на сайте?

Мария
Мария

22 января 2018, 00:04

Да, активны

Александр Окатьев

Будьте добры, скопируйте ошибку из логов целиком.

Мария
Мария

22 января 2018, 13:45

[21-Jan-2018 15:43:24 Europe/Moscow] PHP Warning: file_get_contents(https://krim-parfyum.ru/index.php?route=feed/google_sitemap): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
in /home2/bukvor/public_html/krim-parfyum.ru/sitemap-7JzDeTT.php on line 9
[21-Jan-2018 15:43:28 Europe/Moscow] PHP Warning: file_get_contents(https://krim-parfyum.ru/index.php?route=feed/yandex_sitemap): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
in /home2/bukvor/public_html/krim-parfyum.ru/sitemap-7JzDeTT.php on line 13
[21-Jan-2018 15:43:28 Europe/Moscow] PHP Fatal error: Call to a member function asXML() on a non-object in /home2/bukvor/public_html/krim-parfyum.ru/sitemap-7JzDeTT.php on line 17
А сегодня, после вчерашних экспериментов, пошли подряд ошибки по базе данных. Не могу ничего понять, и это пугает...)

Мария
Мария

24 января 2018, 13:39

Добрый день! Простите, комментариев не будет?)

Александр Окатьев

Здравствуйте, Мария!

Используйте этот код, должно сработать:

<?php

//Подгружаем конфиг
require_once('config.php');

//Назначаем переменные
//Внимание: HTTPS_SERVER - если вы используете https:// и HTTP_SERVER если http://
$siteMapSource = HTTP_SERVER . 'index.php?route=extension/feed/google_sitemap';
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

$siteMapSource2 = HTTP_SERVER . 'index.php?route=extension/feed/yandex_sitemap';
$xml2 = file_get_contents($siteMapSource2);
$siteMapContent2 = simplexml_load_string($xml2);

//Записываем данные из БД в статические файлы *.xml
if (!file_put_contents('1_g_sitemap.xml', $siteMapContent->asXML())) {
    error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Google content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
    die('Google Sitemap data export process has been failed!');   
} elseif (!file_put_contents('1_ya_sitemap.xml', $siteMapContent2->asXML())) {	
	error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Yandex content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
	die('Yandex Sitemap data export process has been failed!');	
} else { echo 'G,YA sitemaps update has been successfully completed!'; } 

?>
Мария
Мария

26 января 2018, 18:54

Спасибо!!! Все сгенерировалось!

Мария
Мария

28 января 2018, 14:40

Добрый день! Скажите, пожалуйста, а как проверить корректность работы всей этой истории? Файлы с картой сайта есть в корневой директории, обновляются ночью. В Вебмастере я их проверила. А при обращении напрямую к site.ru/sitemap.xml открывается не они — статические, а динамический файл index.php?route=extension/feed/google_sitemap. Это разве правильно?
Возможно, еще нужна какая-то правка в ..htaccess ?

Мария
Мария

29 января 2018, 13:27

И еще вопрос. Вместе с файлами 1_g_sitemap.xml и 1_ya_sitemap.xml дружно генерируется файл yandex_sitemap.xml. Первый раз, когда я это обнаружила, я его удалили, но он генерируется каждый раз вместе со всей компанией...
Да, робот у меня по вашей схеме — robots-xYz01Q.php и там прописаны все адреса карт сайта... И Гугл и Яндекс его видят корректно

Александр Окатьев

Ещё актуально?

Андрей
Андрей

7 марта 2018, 06:43

ПОдскажите, в php 5.4 работает, а в 5.6 ошибка: file_get_contents(http://kidzlandia.ru/index.php?route=extension/feed/yandex_sitemap): failed to open stream: HTTP request failed!

Что можно исправить?

Александр Окатьев

Посмотрите, разрешена ли функция allow_url_fopen в php.ini

Андрей
Андрей

7 марта 2018, 21:39

Directive Local Value Master Value
allow_url_fopen On On

Мария
Мария

7 марта 2018, 23:03

Добрый вечер!
Актуален вопрос, про в .htacces, повторю его: «Файлы с картой сайта теперь есть в корневой директории, обновляются ночью. В Вебмастере я их проверила. А при обращении напрямую к site.ru/sitemap.xml открывается не они — статические, а динамический файл index.php?route=extension/feed/google_sitemap. Это разве правильно? Возможно, еще нужна какая-то правка в ..htaccess ?»
И сообще, — как грамотно сделать запрет на обращение к штатному динамическому файлу?
Спасибо

Александр Окатьев

Файлы sitemap, которые сгенерировались у Вас скриптом называются 1_g_sitemap.xml для Гугла и 1_ya_sitemap.xml для Яндекса. То есть обращаться Вам и ботам нужно к этим файлам через адресную строку. Обращаться к файлу sitemap.xml не нужно.

В .htaccess Вам нужно закомментировать строку

RewriteRule ^sitemap\.xml$ /index.php?route=feed/google_sitemap [L]
Antonina
Antonina

19 марта 2018, 03:12

доброй ночи.
делаю новый сайт и, вдохновившись вашей статьей, делаю все по порядку.
ОС Version 3.0.1.2 (rs.1)
модули Google Sitemap и Yandex Sitemap включены
при включении Yandex Sitemap вышла ошибка (но модуль включился):
Warning: Cannot modify header information — headers already sent by (output started at /home/q/q97876x3/lixcompany.ru/public_html/admin/language/ru-ru/extension/feed/yandex_sitemap.php:1) in /home/q/q97876x3/lixcompany.ru/public_html/system/library/response.php on line 12

скачала и добавила файл с настройками для гугла и яндекса 3 одним файлом.
sitemap-1JzDeTT.php
В атрибутах — 755
Файлы 1_g_sitemap.xml и 1_ya_sitemap.xml создаваться не хотели.
Нашла в ваших ответах совет сделать их вручную. Сделала. Присвоила 755.
при переходе на
http://lixcompany.ru/sitemap-1JzDeTT.php
ошибка Ошибка HTTP 500
подскажите, что не так?
спасибо!

Александр
Александр

20 марта 2018, 00:30

Здравствуйте! Похожая проблема. ОС 3.0.2.0 Модуль Google Sitemap включен файл sitemap-1JzDeTT.php создал дал права 777. не работает пишет ошибку: Сайт kypilka.com.ua пока не может обработать этот запрос.
HTTP ERROR 500. Что может быть не так?

Александр
Александр

20 марта 2018, 01:22

Логи такие: [19-Mar-2018 22:18:12 UTC] PHP Warning: file_get_contents(http://kypilka.com.ua/index.php?route=extension/feed/google_sitemap): failed to open stream: HTTP request failed! in /home/kypilkac/public_html/sitemap-1JzDeTT.php on line 8
[19-Mar-2018 22:18:12 UTC] PHP Fatal error: Call to a member function asXML() on boolean in /home/kypilkac/public_html/sitemap-1JzDeTT.php on line 12

Sergey1900
Sergey1900

29 марта 2018, 10:10

У меня точно такая же ошибка.

Александр
Александр

29 марта 2018, 22:41

Спасибо, все работает отлично) При копировании появляется сообщение об авторских правах, пожалуйста уберите — раздражает, а кому надо все-равно скопирует)

Александр Окатьев

Обращайтесь! Хорошо, уберу)

Алекс
Алекс

3 апреля 2018, 23:33

Александр 20 марта 2018, 01:22 Логи такие: [19-Mar-2018 22:18:12 UTC] PHP Warning: file_get_contents(http://kypilka.com.ua/index.php?route=extension/feed/google_sitemap): failed to open stream: HTTP request failed! in /home/kypilkac/public_html/sitemap-1JzDeTT.php on line 8 [19-Mar-2018 22:18:12 UTC] PHP Fatal error: Call to a member function asXML() on boolean in /home/kypilkac/public_html/sitemap-1JzDeTT.php on line 12

Так ничего и не получилось. не работает ((( и никто не пишет комментариев.
Саша, можете помочь?

Александр Окатьев

Добрый день! Не разобрались с проблемой?

Андрей
Андрей

4 апреля 2018, 05:18

Алекс,

Возможно, функция allow_url_fopen в php.ini выключена.

У меня так было в php 5.6, а в php 5.4 все работало )) Разница была в наборе включенных функций в каждой из версий пхп

После того как запустил свой vps и настроил его многие проблемы и ограничения по производительности пропали

Алекс
Алекс

4 апреля 2018, 23:26

Включена. Вот что в этом файле.
magic_quotes_gpc = Off;
register_globals = Off;
default_charset = UTF-8;
memory_limit = 256M;
max_execution_time = 36000;
upload_max_filesize = 999M;
safe_mode = Off;
mysql.connect_timeout = 20;
session.auto_start = Off;
session.use_only_cookies = On;
session.use_cookies = On;
session.use_trans_sid = Off;
session.cookie_httponly = On;
session.gc_maxlifetime = 3600;
allow_url_fopen = on;
;display_errors = 1;
;error_reporting = E_ALL;

Алекс
Алекс

4 апреля 2018, 23:40

А можно уточнить что должно быть включено в php 5.6, чтобы все нормально работало?

Николай
Николай

8 апреля 2018, 01:49

Здравствуйте. А как бороться с ошибкой 504 Gateway Time-out?

Александр Окатьев

Здравствуйте! Необходимо увеличить время обработки запросов в конфигурационных файлах nginx и apache2.

Андрей
Андрей

10 апреля 2018, 13:25

Добрый день. Все делал по инструкции, но все равно выдает ошибку «Fatal error: Call to a member function asXML() on boolean in www/sitemap-1JzDeTT.php on line 13»

Александр Окатьев

Какую версию PHP используете на сервере и какая версия движка у Вас?

wb
wb

17 апреля 2018, 17:03

Подскажите пож-та
версия ОС 2,1 — гугл генерится без проблем, на яндексе спотыкается...
sitemap-1JzDeTT.php on line 13 и
sitemap-1JzDeTT.php on line 20
яндекс модуль установлен и работает — по ссылке из настроек модуля — sitemap открывается.

Александр Окатьев

Вы для своей версии движка скрипт брали из статьи?

Андрей
Андрей

9 мая 2018, 02:13

Если всё равно кроном дергаете скрипт, то почему бы wget’ом его не получать:

/usr/bin/wget timeout=60 no-check-certificate —output-document=/ваш/адрес/на/хостинге/до/папки/сайта/sitemap.xml -q «http://ваш.сайт/index.php?route=feed/google_sitemap»

ставим эту строку в cron
и sitemap.xml будет так же создаваться, но уже без неободимости в отдельном php-скрипте.

Александр Окатьев

Так wget’ом к нему и обращаемся, в конце статьи описано ведь.

Андрей
Андрей

14 мая 2018, 22:29

Так wget’ом к нему и обращаемся, в конце статьи описано ведь.

В статье вы обращаетесь к дополнительному скрипту, который, на мой взгляд, «излишняя сущность».
Не нужен никакой php-файл sitemap-1JzDeTT.php, в котором вы подгружаете конфиг, загружаете карту сайта в память (а карта сайта может быть довольно большая), разбираете в дерево xml и только потом пишете в файл.
Можно сразу wget’ом получить готовую карту сайта (она ведь уже готовая делается) средствами операционки, которая по любому быстрее работает (и экономнее по памяти), чем PHP интерпретатор,
см. https://pastebin.com/D2VzYNgK
а то в комментариях всю строку перекорёжило.
wget сразу идёт по адресу http://ваш.сайт/index.php?route=feed/google_sitemap который даёт нам готовую карту сайта, без необходимости с ней что-либо делать что-то ещё
и сохраняет в файл /ваш/адрес/на/хостинге/до/папки/сайта/sitemap.xml
Всё! ;-)

Иван
Иван

6 марта 2019, 09:54

Здравствуйте. PHP Version 5.6.38, ocStore 2.1.0.2.1, хостинг Beget Start, товаров 74000.
Включены Google Sitemap и Yandex Sitemap, при переходе по ссылкам /index.php?route=feed/google_sitemap и /index.php?route=feed/yandex_sitemap сервер выдает ошибку Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 8160 bytes) in /home/i/ooo/site.ru/public_html/system/library/db/mysqli.php on line 19 ну оно и понятно, памяти не хватает. Закинул ваш файл для записи Google Sitemap и Yandex Sitemap в файл под Opencart 2.x в корень, при обращении к нему ошибка Fatal error: Call to a member function asXML() on boolean in /home/i/ooo/site.ru/public_html/sitemap-1JzDeTT.php on line 17, файлы xml не создаются. Это из-за той же нехватки памяти на сервере? Каким образом мне автоматически создавать sitemap при таком количестве товаров? Cron? Как это делать?

Александр Окатьев

Добрый вечер! Версия PHP на сервере какая установлена?

Иван
Иван

7 марта 2019, 11:01

Так PHP Version 5.6.38 же

Александр Окатьев

Сорри, затупил. Да, из-за нехватки памяти, потому как скрипт также обращается к модулям sitemap и потом ответ записывает в файл в виде XML.

Насколько я понял, у Вас нехватка памяти именно у СУБД. У Вас есть возможность править конфиги на хостинге и двигать лимиты?

Иван
Иван

12 марта 2019, 14:22

А может подскажете, как же мне тогда создать sitemap при таком большом количестве товаров? Только переход на тариф выше (а как понять сколько памяти нужно, чтобы выбрать тариф)? Или можно как то разбить процесс создания sitemap на несколько частей, чтобы памяти хватало?

Иван
Иван

12 марта 2019, 14:50

Толком не пойму, можно ли менять директивы у Бегета. Вот такое есть: https://prnt.sc/mwrysn

Александр Окатьев

Попробуйте добавить директиву, к примеру:

memory_limit = 512M
Иван
Иван

13 марта 2019, 12:58

Пробовал.
Если поставить выше 1024M (кратно 512M), то «504 Gateway Time-out, nginx-reuseport/1.13.4».
Если поставить 1024M, то все так же «Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 8160 bytes) in /home/i/ooo/site.ru/public_html/system/library/db/mysqli.php on line 19».

Александр Окатьев

Значит MySQL’у не хватает памяти. Напишите в ТП с вопросом, можно ли как-то править my.cnf.

Oleg
Oleg

20 марта 2019, 01:32

Вопрос какой из скриптов подходит для ocStore 2.3.0.2.3

Александр Окатьев

Здравствуйте, как у Вас выглядит URL обращения к скрипту Google-sitemap?

index.php?route=extension/feed/google_sitemap

или

index.php?route=feed/google_sitemap

Если первый вариант, то используйте версию Sitemap для Opencart 3.x, если второй — то версию Sitemap для Opencart 2.x.

Владимир
Владимир

10 июня 2019, 11:50

Добрый день нужна помощь в настройке sitemap.

  1. При переходе по index.php?route=extension/feed/google_sitemap
    Ошибка: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 21264 bytes) in /home/user2075140/www/romis.by/system/library/image.php on line 47
  1. При заливки кода sitemap-1JzDeTT.php (
    <code>
    <?php
    // Для Opencart 3.x
    //Подгружаем конфиг
    require_once(’config.php’);

//Назначаем переменные
Внимание: HTTPS_SERVER — если вы используете https: и HTTP_SERVER если http://
$siteMapSource = HTTP_SERVER . ’index.php?route=extension/feed/google_sitemap’;
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

//Записываем данные из БД в статический файл *.xml
if (!file_put_contents(’sitemap.xml’, $siteMapContent->asXML())) {
error_log(date(’Y-m-d H:i:s — ’, time()) . ’Unable to save Google content into the file’ .«\n», 3, DIR_LOGS . ’sitemap.txt’);
die(’Google Sitemap data export process has been failed!’);
} else { echo ’Google Sitemap update has been successfully completed!’; }

?>)
Выдаёт ошибку:

Warning: simplexml_load_string(): Entity: line 2: parser error : Extra content at the end of the document in /home/user2075140/www/romis.by/sitemap-1JzDeTT.php on line 10

Warning: simplexml_load_string(): <b>Fatal error</b>: Allowed memory size of 134217728 bytes exhausted (tried to in /home/user2075140/www/romis.by/sitemap-1JzDeTT.php on line 10

Warning: simplexml_load_string(): ^ in /home/user2075140/www/romis.by/sitemap-1JzDeTT.php on line 10

Fatal error: Call to a member function asXML() on a non-object in /home/user2075140/www/romis.by/sitemap-1JzDeTT.php on line 13

  1. Сайт http://romis.by

Буду рад если поможете
OcStore 3.0
Php 5.6
php.ini
magic_quotes_gpc = Off;
register_globals = Off;
default_charset = UTF-8;
memory_limit = 64M;
max_execution_time = 36000;
upload_max_filesize = 999M;
safe_mode = Off;
mysql.connect_timeout = 20;
session.auto_start = Off;
session.use_only_cookies = On;
session.use_cookies = On;
session.use_trans_sid = Off;
session.cookie_httponly = On;
session.gc_maxlifetime = 3600;
allow_url_fopen = on;
;display_errors = 1;
;error_reporting = E_ALL;
.htaccess

php_value upload_max_filesize 555M
php_value post_max_size 555M

##EXPIRES CACHING##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg «access 1 year»
ExpiresByType image/jpeg «access 1 year»
ExpiresByType image/gif «access 1 year»
ExpiresByType image/png «access 1 year»
ExpiresByType text/css «access 1 month»
ExpiresByType text/html «access 1 month»
ExpiresByType application/pdf «access 1 month»
ExpiresByType text/x-javascript «access 1 month»
ExpiresByType application/x-shockwave-flash «access 1 month»
ExpiresByType image/x-icon «access 1 year»
ExpiresDefault «access 1 month»
</IfModule>
##EXPIRES CACHING ##

RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

#GZIP
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE image/png image/gif image/jpeg image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
</Ifmodule>
#END GZIP

#SEO URL Settings
RewriteEngine On

#If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/

<IfModule mod_deflate.c>
RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
</Ifmodule>

#1.To use URL Alias you need to be running apache with mod_rewrite enabled.

#2. In your opencart directory rename htaccess.txt to .htaccess.

#For any support issues please visit: http://www.opencart.com

Options +FollowSymlinks

#Prevent Directoy listing
Options -Indexes

#Prevent Direct Access to files
<FilesMatch «(?i)\.tpl|.twig|\.ini|\.log|(?<!robots)\.txt»>
Require all denied
##For apache 2.2 and older, replace «Require all denied» with these two lines :
#Order deny,allow
#Deny from all
</FilesMatch>

#SEO URL Settings
RewriteEngine On
#If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

###Additional Settings that may need to be enabled for some servers
###Uncomment the commands by removing the # sign in front of it.
###If you get an «Internal Server Error 500» after enabling any of the following settings, restore the # as this means your host doesn’t allow that.

#1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
php_flag register_globals off

#2. If your cart has magic quotes enabled, This may work to disable it:
php_flag magic_quotes_gpc Off

#3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
#php_value upload_max_filesize 999M

#4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
php_value post_max_size 999M

#5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
#php_value max_execution_time 200

#6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
#php_value max_input_time 200

#7. disable open_basedir limitations
#php_admin_value open_basedir none

Александр Окатьев

Добрый вечер, Владимир!

Судя по первому пункту у вас объемный каталог товаров, поэтому веб-серверу не хватает памяти, чтобы обработать запрос.

У вас есть доступ к настройке хостинга, вы можете там менять количество выделяемой памяти под Php и MySQL?

nazar
nazar

16 июня 2019, 14:32

Здравствуйте!

  • После установки SSL сертификата, решил обновить файл sitemap.xml, обновил новый сайтмеп уже с http: но по ссылке сайт/sitemap.xml все так же открывался старый сайтмеп с ссылками http: . Потом в .htaccess обнаружил как раз правило ^sitemap.xml$ index.php?route=feed/google_sitemap [L] — ] , закоментил его и вдруг файл sitemap.xml стал отображаться корректно по ссылке (уже с https://) . Вопрос — чревато чем-то что я убрал эту строчку редиректа (закоментил) ? можно так сделать ?)
Александр Окатьев

Приветствую!

Да, вы сделали правильно. Теперь обращение к карте сайта идёт через физический файл sitemap.xml, а не реврайт на генерацию карты сайта «на лету» посредством модуля.

Ещё учтите, что если вы перешли на https, то вам нужно настроить в .htaccess редирект с http на https, чтобы избежать дублирование контента по двум протоколам в поисковых системах.

Сделать это можно так:

Для того, чтобы сделать переадресацию с протокола http на https, добавьте в корневой .htaccess после строки:

RewriteEngine On

строки

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Это правило будет автоматически редиректить на https все запросы, которые поступают на http, таким образом сайт будет доступен только по одному протоколу, что исключит возможность дублирования сайта.

Андрей Константинов
Андрей Константинов

2 сентября 2019, 13:33

У меня сайт: 2 языка. Сайтмап генерится через ФИД. Ваш скрипт работает корректно. НО! Не понятно по какому закону, но в разное время сайтмап может содержать все ссылки
так сайт.ком/ru/ а может и так сайт.ком/uk/
хотел использовать ваш скрипт для «разводки» этих двух различных сайтмапов но не знаю на каком этапе и как происходит выбор между /RU и  /UK .
Буду благодарен за помощь или намёк куда копать?

Александр Окатьев

Андрей, добрый день. Как вы обращаетесь к скрипту генерации файла карты сайта? С использованием языка /ru/ или /uk/ в адресе или без?

Владимир
Владимир

28 октября 2019, 15:02

Здравствуйте! А если сайт — мультимагазин на поддоменах, ваше решение не подойдет? Можно ли допилить каким-то образом??

Александр Окатьев

Владимир, здравствуйте. Подскажите, у вас sitemap генерируется для каждого поддомена отдельно? То есть вы обращаетесь к скрипту генерации карты сайта через поддомен в браузерной строке?

Владимир
Владимир

28 октября 2019, 17:21

Александр, для каждого поддомена стандартными средствами генерируется стандартная карта сайта google sitemap

Александр Окатьев

После

$siteMapContent = simplexml_load_string($xml);

добавьте

$SubDomain = HTTP_SERVER;
$SubArr = array("://","/",".");
$SubDomain = str_replace($SubArr, "_", $SubDomain);

$SubDomain = HTTPS_SERVER — если используете SSL на сайте;

Далее замените в скрипте строку

if (!file_put_contents('sitemap.xml', $siteMapContent->asXML())) {

на строку

if (!file_put_contents($SubDomain."sitemap.xml", $siteMapContent->asXML())) {

Сохраняйте файл и обращайтесь к нему через поддомен. В корневой директории, должен создаться файл с именем «поддомен_sitemap.xml».

Далее уже поисковикам подсовывайте нужные карты сайта.

Владимир
Владимир

28 октября 2019, 21:04

Спасибо! попробую

Олег
Олег

8 января 2020, 16:48

Добрый день! при использовании данного скрипта под версию движка 3,0 выдает сразу же ошибку:
«Fatal error: Uncaught Error: Call to a member function asXML() on boolean in /www/sitemap-1JzDeTT.php:14 Stack trace: #0 {main} thrown in /www/sitemap-1JzDeTT.php on line 14» а в логах пишет, что не возможно сохранить файл.
Сам файл с картой, если сохранить вручную, весит примерно 1,5 Мб (лимит памяти установлен (upload|post)_max_size = 150 Мб, max_input_time = 180, php_max_input_vars = 100000)

Александр Окатьев

Приветствую. Попробуйте создать пустой файл вручную и выставить права на чтение, запись и выполнение в 0777. Будет ли он перезаписываться в таком случае?

Олег
Олег

12 января 2020, 11:20

К сожалению не помогло, как мне кажется, что-то на сервере блокирует запись в файл.
если есть возможность — посмотрите пожалуйста, может я что-то пропустил
PHPINFO — можно глянуть по адресу: http://www.1012101.xyz/phpinfo.html,
а htaccess:
Options +SymLinksIfOwnerMatch

Prevent Directoy listing

Options -Indexes

Prevent Direct Access to files

<FilesMatch «(?i)\.tpl|.twig|\.ini|\.log|(?<!robots)\.txt|\.xml»>
Require all denied

For apache 2.2 and older, replace «Require all denied» with these two lines :

Order deny,allow
Deny from all

</FilesMatch>

SEO URL Settings

RewriteEngine On

If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

Александр Окатьев

Приветствую, обратите внимание на мой ответ ниже.

Олександр
Олександр

16 января 2020, 16:23

Здравствуйте! OC 3.0.3.2, PHP 7.2 https://ecobud.in.ua/sitemap-1JzDeTT.php
Ошибка: Fatal error: Uncaught Error: Call to a member function asXML() on boolean in /home/ecobud00/ecobud.in.ua/www/sitemap-1JzDeTT.php:13 Stack trace: #0 {main} thrown in /home/ecobud00/ecobud.in.ua/www/sitemap-1JzDeTT.php on line 13

Александр Окатьев

Приветствую! В файле после

<?php
 // Для Opencart 3.x
//Подгружаем конфиг
require_once('config.php');

Добавьте следующий код

function file_get_contents_curl($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);       

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

И ниже по коду в файле, замените строки

$xml = file_get_contents($siteMapSource);
$xml2 = file_get_contents($siteMapSource2);

на

$xml = file_get_contents_curl($siteMapSource);
$xml2 = file_get_contents_curl($siteMapSource2);

Сохраните и попробуйте выполнить скрипт.

Денис
Денис

23 января 2020, 13:39

Добрый день!
Хотел попробовать, результат работы скрипта — пустая белая страница.
Версия 2.3.0.2.3
Не подскажите, куда копать?(

Александр Окатьев

Приветствую, включите вывод ошибок PHP в php.ini

display_errors = On

Перезапустите Web-сервер и пробуйте ещё раз, ошибка должна появиться в окне браузера.

Денис
Денис

23 января 2020, 14:30

Да, появились ошибки) адрес сайта заменил на «_»:

Warning: file_get_contents(https://_.ru/index.php?route=extension/feed/google_sitemap): failed to open stream: HTTP request failed! in /var/www/_/data/www/_.ru/sitemap-1JzDeTT.php on line 9

Warning: file_get_contents(https://_.ru/index.php?route=extension/feed/yandex_sitemap): failed to open stream: HTTP request failed! in /var/www/_/data/www/_.ru/sitemap-1JzDeTT.php on line 13

  • [ ] Fatal error: Uncaught Error: Call to a member function asXML() on boolean in /var/www/_/data/www/_.ru/sitemap-1JzDeTT.php:17 Stack trace: #0 {main} thrown in /var/www/_/data/www/_.ru/sitemap-1JzDeTT.php on line 17
Денис
Денис

23 января 2020, 15:22

Отбой) заменил file_get_contents на curl, все заработало! Спасибо :)

Александр Окатьев

Да, там решение этой ошибки чуть выше описал)

Денис
Денис

23 января 2020, 15:27

Раз уж так быстро отвечаете, а можно тогда вопрос ещё?)) файл сформировался, но Яша ругается: Превышено допустимое число страниц.

Разбивать руками и прописывать пути в «индексной Карте»?

Александр Окатьев

Видимо у вас там приличное количество страниц) Яше вечно всё не так. Если быстро нужно сделать, то да — разделить его на два файла и поместить ссылки на них в индексный файл, а роботу отдать один — индексный.

Синтаксис примерно такой:

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <sitemap>
        <loc>https://site.ru/sitemap1.xml</loc>
        <lastmod>2020-01-23T03:31:09+03:00</lastmod>
    </sitemap>
    <sitemap>
        <loc>https://site.ru/sitemap2.xml</loc>
        <lastmod>2020-01-23T03:31:09+03:00</lastmod>
    </sitemap>
</sitemapindex>
Денис
Денис

23 января 2020, 15:39

Да, более 50.000.
Скорость не важна...но я так полагаю руками разбивать надо будет каждую неделю?:)

Александр Окатьев

О, приличное количество. Руками разбивать не вариант, конечно по-хорошему счёту допилить скрипт так, чтобы он сам разбивал файл на несколько, если слишком много страниц. Поразмыслю на досуге :)

Денис
Денис

23 января 2020, 15:44

Да, у Яндекса вроде давно такое ограничение. Просто не сталкивался раньше с таким кол-вом;)
Спасибо)

Александр
Александр

23 января 2020, 17:41

Вместе с файлами 1_g_sitemap.xml и 1_ya_sitemap.xml дружно генерируется файл yandex_sitemap.xml
как это исправить ?

Александр Окатьев

Приветствую. Вы имеете в виду, третий файл появляется лишний?

Александр
Александр

23 января 2020, 17:58

да появляется yandex_sitemap.xml

Александр Окатьев

Когда запускаете скрипт или рандомно? Мой скрипт не может генерировать лишний файл, ему браться там неоткуда. Может у вас в cron какая-то запись висит лишняя?

Александр
Александр

23 января 2020, 18:06

я в cron по ничего не добавлял, когда обращаюсь к скрипту из браузера он генерирует sitemap.xml и параллельно yandex_sitemap.xml вот не могу понять в чем проблема

Александр Окатьев

Покажите пожалуйста код из файла скрипта.

Александр
Александр

23 января 2020, 18:24

<?php
// Для Opencart 2.x
//Подгружаем конфиг
require_once(’config.php’);

//Назначаем переменные
Внимание: HTTPS_SERVER — если вы используете https: и HTTP_SERVER если http://

$siteMapSource = HTTPS_SERVER . ’index.php?route=extension/feed/yandex_sitemap’;
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

if (!file_put_contents(’sitemap.xml’, $siteMapContent->asXML())) {
error_log(date(’Y-m-d H:i:s — ’, time()) . ’Unable to save Yandex content into the file’ .«\n», 3, DIR_LOGS . ’sitemap.txt’);
die(’Yandex Sitemap data export process has been failed!’);
} else { echo ’Yandex Sitemap update has been successfully completed!’; }

?>

Александр Окатьев

Версия движка у вас какая OC 2.x или OC 3.x ?

Александр
Александр

23 января 2020, 18:32

OC 2.x

Александр Окатьев

У вас скрипт не правильно обращается к модулю генерации sitemap, для версии 3.x.

Замените ваш код на следующий:

<?php

// Для Opencart 2.x
//Подгружаем конфиг
require_once('config.php');

function file_get_contents_curl($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);       

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

//Назначаем переменные
//Внимание: HTTPS_SERVER - если вы используете https:// и HTTP_SERVER если http://
$siteMapSource = HTTPS_SERVER . 'index.php?route=extension/feed/yandex_sitemap';
$xml = file_get_contents_curl($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

//Записываем данные из БД в статический файл *.xml
if (!file_put_contents('sitemap.xml', $siteMapContent->asXML())) {
    error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Yandex content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
    die('Yandex Sitemap data export process has been failed!');   
} else { echo 'Yandex Sitemap update has been successfully completed!'; } 

?>
Александр
Александр

23 января 2020, 18:41

я заменил но тогда страница не доступна для генерации пока не заменю строки
в
$siteMapSource = HTTPS_SERVER . ’index.php?route=feed/yandex_sitemap’;
на
$siteMapSource = HTTPS_SERVER . ’index.php?route=extension/feed/yandex_sitemap’;

Александр Окатьев

Понял, значит у вас версия >= OC 2.3.x Файл лишний по прежнему создаётся?

Александр
Александр

23 января 2020, 18:45

да также создаётся

Александр Окатьев

Попробуйте удалить файлы, которые создаются и обратиться не к скрипту, который вы добавили, а напрямую по ссылке через браузер:

https://вашсайт.ru/index.php?route=extension/feed/yandex_sitemap

Дождитесь ответа скрипта и проверьте, создастся ли файл yandex_sitemap в корне сайта. Если да, тогда скрипт самостоятельно создаёт физическую карту сайта и вам мой скрипт не нужен :)

Александр
Александр

23 января 2020, 18:54

Да кстати создал сам самостоятельно, спасибо большое за оперативность ответа.

Александр Окатьев

Рад помочь.

Андрей
Андрей

1 февраля 2020, 14:20

Здравствуйте, Александр. Спасибо огромное за помощь.
записал файл в клрень, поменял права на 755
поменял http на https
<?php

//Подгружаем конфиг
require_once(’config.php’);

//Назначаем переменные
Внимание: HTTPS_SERVER — если вы используете https: и HTTP_SERVER если http://
$siteMapSource = HTTPS_SERVER . ’index.php?route=extension/feed/google_sitemap’;
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

$siteMapSource2 = HTTPS_SERVER . ’index.php?route=extension/feed/yandex_sitemap’;
$xml2 = file_get_contents($siteMapSource2);
$siteMapContent2 = simplexml_load_string($xml2);

//Записываем данные из БД в статические файлы *.xml
if (!file_put_contents(’1_g_sitemap.xml’, $siteMapContent->asXML())) {
error_log(date(’Y-m-d H:i:s — ’, time()) . ’Unable to save Google content into the file’ .«\n», 3, DIR_LOGS . ’sitemap.txt’);
die(’Google Sitemap data export process has been failed!’);
} elseif (!file_put_contents(’1_ya_sitemap.xml’, $siteMapContent2->asXML())) {
error_log(date(’Y-m-d H:i:s — ’, time()) . ’Unable to save Yandex content into the file’ .«\n», 3, DIR_LOGS . ’sitemap.txt’);
die(’Yandex Sitemap data export process has been failed!’);
} else { echo ’G,YA sitemaps update has been successfully completed!’; }

?>

карты сайта гугл и яндекс установлены но,
получаю ошибку при переходе на файл из браузера
https://30.coffee/sitemap-1JzDeTT.php
504 Gateway Time-out
nginx
в логах сервера
[Sat Feb 01 12:12:14.060981 2020] [fcgid:warn] [pid 4030] [client 91.244.28.153:59450] mod_fcgid: stderr: PHP Warning: file_get_contents(https://30.coffee/index.php?route=extension/feed/google_sitemap): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error
[Sat Feb 01 12:12:14.061269 2020] [fcgid:warn] [pid 4030] [client 91.244.28.153:59450] mod_fcgid: stderr: in /var/www/www-root/data/www/30.coffee/sitemap-1JzDeTT.php on line 9
[Sat Feb 01 12:12:14.061292 2020] [fcgid:warn] [pid 4030] [client 91.244.28.153:59450] mod_fcgid: stderr: PHP Fatal error: Call to a member function asXML() on boolean in /var/www/www-root/data/www/30.coffee/sitemap-1JzDeTT.php on line 17

Помогите пожалуйста разобраться. Благодарю.

Андрей
Андрей

1 февраля 2020, 15:07

Все заработало. Извините, были проблема с лимитами в php на сервере

Александр Окатьев

Приветствую! Рад, что разобрались!)

Дмитрий
Дмитрий

11 февраля 2020, 20:56

Александр, а как узнать обновляются файлы автоматически или нет? Немного не понял как правильно добавлять команду в планировщик. Я добавил только первую, а там ещё написано, что перед # добавить... Можете разжевать? Заранее благодарю) Магазин на ocstore 2.3, хостинг beget.

Александр Окатьев

Приветствую.

Александр, а как узнать обновляются файлы автоматически или нет?

Подключившить по FTP к серверу и посмотрев дату последнего изменения файла, например http://prntscr.com/r0vhes

Немного не понял как правильно добавлять команду в планировщик.

Вот мануал — https://beget.com/ru/manual/crontab , вам нужно вставить

/usr/bin/wget -O - -q -t 1 'http://site.ru/sitemap-1JzDeTT.php' > /dev/null 2>&1

в поле «Команда для выполнения» и выставить повторение на каждый день, либо «Составить задание вручную»

00  0   * * *    /usr/bin/wget -O - -q -t 1 'http://site.ru/sitemap-1JzDeTT.php' > /dev/null 2>&1

Заменив http://site.ru на адрес своего сайта конечно же.

Дмитрий
Дмитрий

12 февраля 2020, 11:54

Спасибо, Александр) Всё понял, исправил.

Александр Окатьев

Супер!

Boojin
Boojin

25 марта 2020, 11:03

Здравствуйте. Большое спасибо за помощь!
Я создал задание на сервере для обновления, два файла создаются, но не в папке opencart, а в корневой сервера. В чем может быть проблема?

Александр Окатьев

Приветствую!
Попробуйте указать полный путь к корневой директории сайта с именем файла sitemap в строке, например:

!file_put_contents('/var/www/site/sitemap.xml', $siteMapContent->asXML())
Boojin
Boojin

27 марта 2020, 06:53

Здравствуйте!
Прошу вашей помощи, не выходит разобраться с указанием полного пути и куда указать эту строку:

!file_put_contents(’/var/www/site/sitemap.xml’, $siteMapContent->asXML())

Я пишу вот так (site = мой адрес):
<?php
// Для Opencart 3.x
//Подгружаем конфиг
require_once(’config.php’);

//Назначаем переменные
Внимание: HTTPS_SERVER — если вы используете https: и HTTP_SERVER если http://
$siteMapSource = HTTPS_SERVER . ’index.php?route=extension/feed/google_sitemap’;
$xml = file_get_contents($siteMapSource);
$siteMapContent = simplexml_load_string($xml);
!file_put_contents(’https://www.site.ru/1_g_sitemap.xml', $siteMapContent->asXML())

$siteMapSource2 = HTTPS_SERVER . ’index.php?route=extension/feed/yandex_sitemap’;
$xml2 = file_get_contents($siteMapSource2);
$siteMapContent2 = simplexml_load_string($xml2);
!file_put_contents(’https://www.site.ru/1_ya_sitemap.xml', $siteMapContent->asXML())

//Записываем данные из БД в статические файлы *.xml
if (!file_put_contents(’1_g_sitemap.xml’, $siteMapContent->asXML())) {
error_log(date(’Y-m-d H:i:s — ’, time()) . ’Unable to save Google content into the file’ .«\n», 3, DIR_LOGS . ’sitemap.txt’);
die(’Google Sitemap data export process has been failed!’);
} elseif (!file_put_contents(’1_ya_sitemap.xml’, $siteMapContent2->asXML())) {
error_log(date(’Y-m-d H:i:s — ’, time()) . ’Unable to save Yandex content into the file’ .«\n», 3, DIR_LOGS . ’sitemap.txt’);
die(’Yandex Sitemap data export process has been failed!’);
} else { echo ’G,YA sitemaps update has been successfully completed!’; }

?>

Александр Окатьев

Вот рабочая версия файла, замените содержимое вашего файла на представленное ниже:

<?php
 // Для Opencart 3.x
//Подгружаем конфиг
require_once('config.php');

function file_get_contents_curl($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);       

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

//Назначаем переменные
//Внимание: HTTPS_SERVER - если вы используете https:// и HTTP_SERVER если http://
$siteMapSource = HTTPS_SERVER . 'index.php?route=extension/feed/google_sitemap';
$xml = file_get_contents_curl($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

$siteMapSource2 = HTTPS_SERVER . 'index.php?route=extension/feed/yandex_sitemap';
$xml2 = file_get_contents_curl($siteMapSource2);
$siteMapContent2 = simplexml_load_string($xml2);

//Записываем данные из БД в статические файлы *.xml
if (!file_put_contents('1_g_sitemap.xml', $siteMapContent->asXML())) {
    error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Google content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
    die('Google Sitemap data export process has been failed!');   
} elseif (!file_put_contents('1_ya_sitemap.xml', $siteMapContent2->asXML())) {	
	error_log(date('Y-m-d H:i:s - ', time()) . 'Unable to save Yandex content into the file' ."\n", 3, DIR_LOGS . 'sitemap.txt');
	die('Yandex Sitemap data export process has been failed!');	
} else { echo 'G,YA sitemaps update has been successfully completed!'; } 

?>
Андрей
Андрей

23 июня 2020, 16:59

Здравствуйте, Александр.
Помогите пожалуйста.
Достаточно давно использую ваше решение для формирования карты сайта. Благодарю.
Но, сегодня просмотрев карту увидел, что она формируется, только для английской (дефолтной) версии сайта, а для версий /pl , /ru не формируется. Подскажите пожалуйста, как можно это исправить?
Заранее благодарен

Александр Окатьев

Приветствую, попробуйте обратиться к карте сайта после указания языка, например

.../ru/index.php?route=feed/google_sitemap

Открывает карту сайта с нужным языком?

Андрей
Андрей

24 июня 2020, 16:48

Здравствуйте.
Благодарю за оперативный ответ.
Нет, не открывает. 404 ошибка

Андрей
Андрей

24 июня 2020, 16:50

и по этому тоже ошибка
........../ru/1_g_sitemap.xml

Александр
Александр

1 июля 2020, 19:51

php 7.2 OC Version 3.0.3.2 (rs.2) NGINX Ошибка:
Fatal error: Uncaught Error: Call to a member function asXML() on boolean in /var/www/html/opencart/sitemap-1JzDeTT.php:32 Stack trace: #0 {main} thrown in /var/www/html/opencart/sitemap-1JzDeTT.php on line 32
Сами карты генерируются. Код конфига такой:
<?php
// Для Opencart 3.x
//Подгружаем конфиг
require_once(’config.php’);

function file_get_contents_curl($url) {
$ch = curl_init();

curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

$data = curl_exec($ch);
curl_close($ch);

return $data;
}

//Назначаем переменные
Внимание: HTTPS_SERVER — если вы используете https: и HTTP_SERVER если http://
$siteMapSource = HTTPS_SERVER . ’index.php?route=extension/feed/google_sitemap’;
$xml = file_get_contents_curl($siteMapSource);
$siteMapContent = simplexml_load_string($xml);

$siteMapSource2 = HTTPS_SERVER . ’index.php?route=extension/feed/yandex_sitemap’;
$xml2 = file_get_contents_curl($siteMapSource2);
$siteMapContent2 = simplexml_load_string($xml2);

//Записываем данные из БД в статические файлы *.xml
if (!file_put_contents(’1_g_sitemap.xml’, $siteMapContent->asXML())) {
error_log(date(’Y-m-d H:i:s — ’, time()) . ’Unable to save Google content into the file’ .«\n», 3, DIR_LOGS . ’sitemap.txt’);
die(’Google Sitemap data export process has been failed!’);
} elseif (!file_put_contents(’1_ya_sitemap.xml’, $siteMapContent2->asXML())) {
error_log(date(’Y-m-d H:i:s — ’, time()) . ’Unable to save Yandex content into the file’ .«\n», 3, DIR_LOGS . ’sitemap.txt’);
die(’Yandex Sitemap data export process has been failed!’);
} else { echo ’G,YA sitemaps update has been successfully completed!’; }

?>

Олег
Олег

9 сентября 2020, 20:11

Здравствуйте!
Использую Opencart 2, генератор карты включен, работает. При запуске файла sitemap-1JzDeTT выдает ошибку —
Fatal error: Call to a member function asXML() on boolean in /home/.../www/sitemap-1JzDeTT.php on line 13
Пожалуйста, подскажите в чем может быть проблема?

Мишкин
Мишкин

12 сентября 2020, 22:34

Добрый день подскажите гугл мап вообще не фурычит,у меня 2,3, php 7.2

ошибки при коде:

Warning: simplexml_load_string(): Entity: line 1: parser error : Extra content at the end of the document in /home/mishk165/domains/qd.com.ua/public_html/sitemap-1JzDeTT.php on line 10

Warning: simplexml_load_string(): <b>Notice</b>: A non well formed numeric value encountered in <b>/home/mishk165/ in /home/mishk165/domains/qd.com.ua/public_html/sitemap-1JzDeTT.php on line 10

Warning: simplexml_load_string(): ^ in /home/mishk165/domains/qd.com.ua/public_html/sitemap-1JzDeTT.php on line 10

Fatal error: Uncaught Error: Call to a member function asXML() on boolean in /home/mishk165/domains/qd.com.ua/public_html/sitemap-1JzDeTT.php:13 Stack trace: #0 {main} thrown in /home/mishk165/domains/qd.com.ua/public_html/sitemap-1JzDeTT.php on line 13

файл .htaccess

1.To use URL Alias you need to be running apache with mod_rewrite enabled.

2. In your opencart directory rename htaccess.txt to .htaccess.

For any support issues please visit: http://www.opencart.com

Options +FollowSymlinks

Prevent Directoy listing

Options -Indexes

Prevent Direct Access to files

<FilesMatch «(?i)\.tpl|\.ini|\.log|(?<!robots)\.txt»>
Require all denied

For apache 2.2 and older, replace «Require all denied» with these two lines :

Order deny,allow
Deny from all

</FilesMatch>

SEO URL Settings

RewriteEngine On

If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URL} [R=301,L]
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap_fast [L]
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]

Additional Settings that may need to be enabled for some servers
Uncomment the commands by removing the # sign in front of it.
If you get an «Internal Server Error 500» after enabling any of the following settings, restore the # as this means your host doesn’t allow that.

1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
php_flag register_globals off

2. If your cart has magic quotes enabled, This may work to disable it:
php_flag magic_quotes_gpc Off

3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
php_value upload_max_filesize 999M

4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
php_value post_max_size 999M

5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
php_value max_execution_time 600

6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
php_value max_input_time 200

7. disable open_basedir limitations
php_admin_value open_basedir none

Display PHP errors
Uncomment the commands by removing the # sign in front of it.

php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag track_errors on
php_value error_reporting «E_ALL»

php_value max_input_vars 10000
php_value max_execution_time 600
файл robots
User-agent: *
Disallow: /*route=account/
Disallow: /*route=affiliate/
Disallow: /*route=checkout/
Disallow: /*route=product/search
Disallow: /index.php?route=product/product*&manufacturer_id=
Disallow: /admin
Disallow: /catalog
Disallow: /system
Disallow: /*?sort=
Disallow: /*&sort=
Disallow: /*?order=
Disallow: /*&order=
Disallow: /*?limit=
Disallow: /*&limit=
Disallow: /*?filter=
Disallow: /*&filter=
Disallow: /*?filter_name=
Disallow: /*&filter_name=
Disallow: /*?filter_sub_category=
Disallow: /*&filter_sub_category=
Disallow: /*?filter_description=
Disallow: /*&filter_description=
Disallow: /*?tracking=
Disallow: /*&tracking=

User-agent: Yandex
Disallow: /*route=account/
Disallow: /*route=affiliate/
Disallow: /*route=checkout/
Disallow: /*route=product/search
Disallow: /index.php?route=product/product*&manufacturer_id=
Disallow: /admin
Disallow: /catalog
Disallow: /system
Disallow: /*?sort=
Disallow: /*&sort=
Disallow: /*?order=
Disallow: /*&order=
Disallow: /*?limit=
Disallow: /*&limit=
Disallow: /*?filter=
Disallow: /*&filter=
Disallow: /*?filter_name=
Disallow: /*&filter_name=
Disallow: /*?filter_sub_category=
Disallow: /*&filter_sub_category=
Disallow: /*?filter_description=
Disallow: /*&filter_description=
Clean-param: tracking

Sitemap:https://qd.com.ua/index.php?route=extension/feed/sitemap_pro
Sitemap:https://qd.com.ua/index.php?route=extension/feed/google_sitemap
Sitemap:https://qd.com.ua/index.php?route=extension/feed/yandex_feed

извините что такой простынью,просто что б всю инфу выложить сразу,помогите пожалуйста! спасибо!

Мишкин
Мишкин

14 сентября 2020, 20:14

может кто то?? что то подсказать?

Ваш комментарий
* Разрешены домены: iCloud, Gmail, Yahoo, Rambler, Ukr.Net, Hotmail, Mail.Ru и Yandex
** Ваш E-mail адрес не будет опубликован
HTML-код не интерпретируется

Ctrl + Enter