Hola compañeros,
Estoy intentando programar mediante cronjob varios PHP pero pasa completamente de mí.
Así está el cronjob, donde las rutas son correctas:
* * * * * /usr/bin/php /kunden/homepages/45/d3251151/htdocs/web/_cronjobs/application/controllers/updates.php
Uno de estos PHP actualiza la base de datos con unas estadísticas que genera la web y además, actualiza el sitemap:
Código PHP:
<?php
class Updates extends Controller
{
function Updates()
{
parent::Controller();
// $this->output->enable_profiler(TRUE);
}
function index($check=NULL)
{
$this->misc($check);
$this->sitemaps($check);
}
/*
*
* actualizaciones varias
*
*/
function misc($check=NULL)
{
$carry = $check=='cron'
? chr(13)
: '<br />';
echo 'Inicio misc: ',date('h:i:s') . $carry;
// $this->load->model('admin/category_model');
// $this->lang->load('admin/categories');
/*
*
* Actualizar los contadores de catalogs, directories y requests
*
*/
$tmp = $this->db->select('id, catalogs_count, directories_count, requests_count')->get('categories')->result_array();
foreach ($tmp as $row)
{
// actualizar contador catalogs
$row['catalogs_count'] = $this->db->where('category_id', $row['id'])->count_all_results('catalogs_categories');
// actualizar contador directories
$row['directories_count'] = $this->db->where('category_id', $row['id'])->count_all_results('directories_categories');
// actualizar contador requests
$row['requests_count'] = $this->db->where('category_id', $row['id'])->count_all_results('requests_categories');
// actualizar contador total
$row['count'] = $row['catalogs_count']+$row['directories_count']+$row['requests_count'];
$this->db->where('id', $row['id'])->update('categories', $row);
}
echo 'Categories: actualizar los contadores de catalogs, directories y requests.' . $carry;
echo 'Fin: ',date('h:i:s') . $carry . $carry;
}
/*
*
* Generar SITEMAP
*
*/
// *TODO: separar en varios sitemaps: catalogs, directories, requests, etc.
function sitemaps($check=NULL)
{
$carry = $check=='cron'
? chr(13)
: '<br />';
echo 'Inicio sitemaps: ',date('h:i:s') . $carry;
$this->load->model('sitemap_model');
$data = array();
// Inicio
array_push($data, array(
'loc' => '',
'lastmod' => date('Y-m-d'),
'changefreq' => 'daily',
'priority' => 1
));
// empresas
$tmp = $this->sitemap_model->get_sitemap('directories'); // pasar como parametro qué datos obtener: catalogs, directories, requests...
foreach ($tmp as $row)
{
array_push($data, array(
'loc' => get_friendly_url('directories', $row),
'lastmod' => date('Y-m-d', strtotime($row['modified'])),
'changefreq' => 'daily',
'priority' => 1
));
}
unset($tmp);
// productos
$tmp = $this->sitemap_model->get_sitemap('catalogs');
foreach ($tmp as $row)
{
array_push($data, array(
'loc' => get_friendly_url('catalogs', $row),
'lastmod' => date('Y-m-d', strtotime($row['modified'])),
'changefreq' => 'daily',
'priority' => 1
));
}
unset($tmp);
// trabajos
$tmp = $this->sitemap_model->get_sitemap('requests');
foreach ($tmp as $row)
{
array_push($data, array(
'loc' => get_friendly_url('requests', $row),
'lastmod' => date('Y-m-d', strtotime($row['created'])),
'changefreq' => 'daily',
'priority' => 1
));
}
unset($tmp);
// páginas estáticas
$tmp = array(
PAGES_FAQ_URL.'.html',
PAGES_ABOUT_URL.'.html',
PAGES_CONTACT_URL.'.html',
PAGES_PRIVACY_URL.'.html',
PAGES_COPYRIGHT_URL.'.html',
PAGES_WORK_WITH_US_URL.'.html',
);
foreach ($tmp as $row)
{
array_push($data, array(
'loc' => $row,
'lastmod' => '',
'changefreq' => 'monthly',
'priority' => 0.5
));
}
unset($tmp);
// crear sitemap
$this->output->set_header("content-type: text/xml");
$body = $this->load->view('sitemaps/index', array('list'=>$data), TRUE);
// crear archivo XML
$filename = '../sitemap.xml';
if (file_exists($filename))
{
unlink($filename);
}
$ddf = fopen($filename, 'w');
fwrite($ddf, $body);
fclose($ddf);
echo 'sitemap.xml creado.' . $carry;;
echo 'Fin: ',date('h:i:s') . $carry . $carry;
}
}
¿Que estoy haciendo mal? ¿Puede que no sea suficiente hacer la llamada directamente desde el cronjob a esta clase Updates y deba de ser llamada por alguien?
Gracias!