Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite galera..
Estou tentando gerar um sitemap com php
So que tenho que por o limit 1200
mais que isso ele nao gera e se deixar sem limit
Obs: o banco de dados contem mais de 10 mil registros
<?php
// Data e hora atual
$datetime = new DateTime(date('Y-m-d H:i:s'));
// A linha abaixo me retornará uma data no seguinte formato: 2017-11-22T00:06:23-02:00
$date = $datetime->format(DateTime::ATOM); // ISO8601
// Gera o arquivo XML do sitemap
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>'.ConfigPainel('site_url').'</loc>
<lastmod>'.$date.'</lastmod>
<changefreq>weekly</changefreq>
<priority>1.00</priority>
</url>';
$Query = DBRead('cidades','*',"WHERE status ='1' ORDER BY nome ASC");
if (is_array($Query)) { foreach ($Query as $modcid) {
$xml .='
<url>
<loc>'.ConfigPainel('site_url').''.$modcid['subdominio'].'/</loc>
<lastmod>'.$date.'</lastmod>
<changefreq>weekly</changefreq>
<priority>1.00</priority>
</url>';
//$QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC");
$QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC LIMIT 1200");
if (is_array($QueryR)) { foreach ($QueryR as $v) {
$Queryc = DBRead('cidades', '*',"WHERE id='{$v['cidade']}' ORDER BY nome ASC")[0];
if(empty($v['slug'])) {
}else{
$urlseo = ''.ConfigPainel('site_url').''.$Queryc['subdominio'].'/list/'.$v['slug'].'/';
$xml .='
<!-- INICIO DA EMPRESA '.TRIM($v['titulo']).' -->
<url>
<loc>'.$urlseo.'</loc>
<lastmod>'.$date.'</lastmod>
<changefreq>weekly</changefreq>
<priority>0.85</priority>
</url>
<!-- FIM DA EMPRESA '.TRIM($v['titulo']).' -->
';
}
}}
}}
$xml .= '
</urlset>';
// Abre o arquivo ou tenta cria-lo se ele não exixtir
$arquivo = fopen('../sitemap.xml', 'w');
if (fwrite($arquivo, $xml)) {
Redireciona('./index.php?sucesso');
} else {
Redireciona('?erro');
}
fclose($arquivo);
// Compactar arquivo sitemap para GZIP
$data = implode("", file("sitemap.xml"));
$gzdata = gzencode($data, 9);
$fp = fopen("sitemap.xml.gz", "w");
fwrite($fp, $gzdata);
fclose($fp);
// Envia para o Google o novo sitemap gerado
$urlSitemap = "http://www.google.com/webmasters/sitemaps/ping?sitemap=".ConfigPainel('site_url')."";
// Arquivos a serem enviados
$Files = ['sitemap.xml', 'sitemap.xml.gz'];
// Envia os dois arquivos sitemap gerados para a URL do Google
foreach ($Files as $file) {
$url = $urlSitemap . $file;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
}
?>
Caso ouve outra forma que eu possa gerar este sitemap com php fico grato...>
2 horas atrás, Frank K Hosaka disse:
Para testar o seu código, eu fiz um monte de gambiarra, espero que você não copie, mas adapte ao seu código original, principalmente porque não considerei o campo slug no directory_guia. Acredito que o problema no seu código é que ele pede para fazer a consulta, mas não traz os resultados da consulta:
<?php
// mysql: cidades(id,nome,status,subdominio)
// directory_guia(id, id_cidade, status, titulo)
function ConfigPainel($qualquer){return "frank.com";}
$pdo=new PDO("mysql:host=localhost;dbname=laravel","root","");
$datetime = date('Y-m-d H:i:s');
$date = date('Y-m-d');
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>'.ConfigPainel('site_url').'</loc>
<lastmod>'.$date.'</lastmod>
<changefreq>weekly</changefreq>
<priority>1.00</priority>
</url>';
$smt = $pdo->query('select * from cidades WHERE status=1 ORDER BY nome ASC');
$Query = $smt->fetchAll(PDO::FETCH_DEFAULT); foreach ($Query as $modcid) {
$xml .='
<url>
<loc>'.ConfigPainel('site_url').''.$modcid['subdominio'].'/</loc>
<lastmod>'.$date.'</lastmod>
<changefreq>weekly</changefreq>
<priority>1.00</priority>
</url>';
$stm = $pdo->query("select * from directory_guia WHERE id_cidade=".$modcid['id']." AND status=1 ORDER BY titulo ASC LIMIT 1200");
$QueryR = $stm->fetchAll(PDO::FETCH_DEFAULT);
if (is_array($QueryR)) {
foreach ($QueryR as $v) {
$stm = $pdo->query("select * from cidades WHERE id=".$v['id_cidade']."
ORDER BY nome ASC");
$Queryc = $stm->fetchAll(PDO::FETCH_DEFAULT);
if(empty($v['slug'])) { }else{
$urlseo = ''.ConfigPainel('site_url').''.$Queryc['subdominio'].
'/list/'.$v['slug'].'/';
$xml .='
<!-- INICIO DA EMPRESA '.TRIM($v['titulo']).' -->
<url>
<loc>'.$urlseo.'</loc>
<lastmod>'.$date.'</lastmod>
<changefreq>weekly</changefreq>
<priority>0.85</priority>
</url>
<!-- FIM DA EMPRESA '.TRIM($v['titulo']).' --> ';}}}}}
$xml .= '
</urlset>';
$arquivo = fopen('sitemap.xml', 'w');
if (fwrite($arquivo, $xml)) {
header('location:sitemap.xml'); exit;} else {
header('location:?erro');}
fclose($arquivo);
$data = implode("", file("sitemap.xml"));
$gzdata = gzencode($data, 9);
$fp = fopen("sitemap.xml.gz", "w");
fwrite($fp, $gzdata);
fclose($fp);
$urlSitemap = "http://www.google.com/webmasters/sitemaps/ping?sitemap=".
ConfigPainel('site_url')."";
$Files = ['sitemap.xml', 'sitemap.xml.gz'];
foreach ($Files as $file) {
$url = $urlSitemap . $file;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);}
?>

@Frank K Hosaka obrigado vou fazer a adaptação, fico grato...
Para testar o seu código, eu fiz um monte de gambiarra, espero que você não copie, mas adapte ao seu código original, principalmente porque não considerei o campo slug no directory_guia. Acredito que o problema no seu código é que ele pede para fazer a consulta, mas não traz os resultados da consulta:
<?php
// mysql: cidades(id,nome,status,subdominio)
// directory_guia(id, id_cidade, status, titulo)
if (is_array($Query)) {