Hey,
Zit met een vervelend probleem. Heb een tijdje terug een script moeten maken, dat op regelmatige basis(=cron) een XML bestand van 4 gekoppelde tabellen uit de DB maakt. Maar om een of andere reden doet deze het niet als de server hem uitvoert.
Voer ik hem zelf uit, dan maakt hij wel de XML file aan, anders niet. Heb even volgend stukje code erin gezet:
Maar dit geeft me buiten een paar notices in dat tekstbestand, niet veel meer.PHP Code:
ini_set('error_reporting', E_ALL);
error_reporting(E_ALL);
ini_set('log_errors',TRUE);
ini_set('html_errors',FALSE);
ini_set('error_log','errorlog.txt');
ini_set('display_errors',FALSE);
Om nog wat verder te testen, heb ik eerst gewoon getest met een cron die een simpele mail stuurt, en dat lukt. Dan heb ik geprobeerd een naar een bestand te schrijven met dit simpel stuk code:
Helaas doet zelfs dit niks. Alles wat geCHMOD moet zijn, is geCHMOD, dus daar kan het ook niet liggen.PHP Code:
$fp = fopen('test.txt', 'w+');
fwrite($fp, 'test');
fclose();
Het commando:
Dank bij voorbaat!Code:/usr/local/bin/php -q /home/beheerder/domains/xxx/csv.php
- PHP Cronjob schrijft niet weg
-
19-12-2009, 04:37 #1
- Berichten
- 68
- Lid sinds
- 18 Jaar
PHP Cronjob schrijft niet weg
-
In de schijnwerper
-
19-12-2009, 07:18 #2
- Berichten
- 935
- Lid sinds
- 17 Jaar
zit de database connectie in je cron.php bestand?
-
19-12-2009, 07:25 #3
- Berichten
- 137
- Lid sinds
- 16 Jaar
Als je test.txt nou alvast aanmaakt (en CHMOD) doet hij het dan wel?
-
19-12-2009, 10:49 #4
- Berichten
- 206
- Lid sinds
- 15 Jaar
ik denk eerder dat de gehele cronjob niet wordt uitgevoerd.
Waar definieer je om de hoeveel tijd de cronjob moet uitvoeren, in een admin panel of zit je direct in het cron-bestand te editen?
wat je ook kan proberen is
Code:php -q /home/beheerder/domains/xxx/csv.php
Code:wget -O /dev/null -q http://www.url.nl/script.php
-
19-12-2009, 18:37 #5
- Berichten
- 68
- Lid sinds
- 18 Jaar
Ja die zit erin, en heb ik getest, als ik een foute waarde ingeef bij de verbinding, dan geeft hij een warning.
Als je test.txt nou alvast aanmaakt (en CHMOD) doet hij het dan wel?
ik denk eerder dat de gehele cronjob niet wordt uitgevoerd.
Waar definieer je om de hoeveel tijd de cronjob moet uitvoeren, in een admin panel of zit je direct in het cron-bestand te editen?
wat je ook kan proberen is
Code:
php -q /home/beheerder/domains/xxx/csv.php
En als je het echt niet via de interne php parser aan de praat krijgt kun je altijd wget nog proberen
Code:
wget -O /dev/null -q http://www.url.nl/script.php
Ik werk via Direct Admin, daar het Cron beheer. Die 2 regeltjes ga ik eens proberen, maar of het gaat helpen weet ik niet.
Het lijkt alsof er iets is met schrijven naar een bestand, vanaf ik dat doet, stopt het script blijkbaar volledig... Zonder zelfs een fout te geven, want fouten slaagt ie wel op in een txt-bestand(de functie error_log van php zelf).
Hier is mijn code:
PHP Code:<?php
/**
* @author Yoni Nijs
* @copyright 2009
*/
ini_set('error_reporting', E_ALL);
error_reporting(E_ALL);
ini_set('log_errors',TRUE);
ini_set('html_errors',FALSE);
ini_set('error_log','/home/beheerder/domains/xxx/csv/error.txt');
ini_set('display_errors',FALSE);
/**
* Algemene instellingen opslagen in constanten
**/
define('DB_SERVER', 'localhost');
define('DB_SERVER_USERNAME', 'xxx');
define('DB_SERVER_PASSWORD', 'xxx');
define('DB_DATABASE', 'xxx');
/**
* Verbinding met de MySQL server via MySQLi laag maken
**/
$obj = new mysqli(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE);
/**
* Bepaalde velden van de tabel producten ophalen
**/
$res1 = $obj->query("SELECT products_id,
products_quantity,
products_model,
products_image,
products_price,
manufacturers_id
FROM products");
$res2 = $obj->query("SELECT manufacturers_id, manufacturers_name FROM manufacturers");
$fabrikanten = array();
while ($row = $res2->fetch_array(MYSQLI_ASSOC)) {
$fabrikanten[$row['manufacturers_id']] = $row['manufacturers_name'];
}
$res3 = $obj->query("SELECT products_id, products_name, products_description FROM products_description");
$beschrijvingen = array();
while ($row = $res3->fetch_array(MYSQLI_ASSOC)) {
$beschrijvingen[$row['products_id']] = array('products_name' => $row['products_name'],
'products_description' => $row['products_description']);
}
$res4 = $obj->query("SELECT p.products_id as products_id,
c.categories_name as categories_name
FROM products_to_categories p
INNER JOIN categories_description c ON (p.categories_id=c.categories_id)
WHERE language_id=4");
$categories = array();
while ($row = $res4->fetch_array(MYSQLI_ASSOC)) {
$categories[$row['products_id']] = $row['categories_name'];
}
$doc = new DOMDocument();
$doc->formatOutput = true;
$r = $doc->createElement("producten");
$doc->appendChild($r);
while ($row = $res1->fetch_array(MYSQLI_ASSOC)) {
if ($row['products_image'] != 'no_image.jpg') {
$b = $doc->createElement("product");
$voorraad = $doc->createElement("voorraad");
$voorraad->appendChild($doc->createTextNode($row['products_quantity']));
$b->appendChild($voorraad);
$prijsex = $doc->createElement("prijs_excl");
$prijsex->appendChild($doc->createTextNode(round($row['products_price'], 2)));
$b->appendChild($prijsex);
$prijsinc = $doc->createElement("prijs_incl");
$prijsinc->appendChild($doc->createTextNode(round($row['products_price'] * 1.19,
2)));
$b->appendChild($prijsinc);
$prodcode_fabr = $doc->createElement("prodcode_fabr");
$prodcode_fabr->appendChild($doc->createTextNode($row['products_model']));
$b->appendChild($prodcode_fabr);
$afbeelding = $doc->createElement("afbeelding");
$afbeelding->appendChild($doc->createTextNode("http://www.computerconnections.nl/images/" .
$row['products_image']));
$b->appendChild($afbeelding);
$fabrikant = $doc->createElement("fabrikant");
$fabrikant->appendChild($doc->createTextNode($fabrikanten[$row['manufacturers_id']]));
$b->appendChild($fabrikant);
$temp = explode('<BR>', $beschrijvingen[$row['products_id']]['products_description'],
2);
$beschrijving = $doc->createElement("beschrijving");
$beschrijving->appendChild($doc->createTextNode($temp[0]));
$b->appendChild($beschrijving);
$productnaam = $doc->createElement("productnaam");
$productnaam->appendChild($doc->createTextNode($beschrijvingen[$row['products_id']]['products_name']));
$b->appendChild($productnaam);
$categorie = $doc->createElement("categorie");
$categorie->appendChild($doc->createTextNode($categories[$row['products_id']]));
$b->appendChild($categorie);
$deeplink = $doc->createElement("deeplink");
$deeplink->appendChild($doc->createTextNode("http://www.xxx.nl/product_info.php?products_id=" .
$row['products_id']));
$b->appendChild($deeplink);
$r->appendChild($b);
}
}
$doc->save("list.xml");
$fp = fopen('test.txt', 'w+');
fwrite($fp, 'test');
fclose();
-
19-12-2009, 19:09 #6
- Berichten
- 206
- Lid sinds
- 15 Jaar
hm, ok, de cronjob wordt dus wel uitgevoerd.
Twee dingen die zo in mij opkomen;
* cron heeft niet de juiste rechten om naar het bestand te schrijven. Gezien je schrijft dat alles juist is gechmod, denk ik niet dat dat het geval is.
* cron kan het pad naar test.txt niet vinden. Misschien moet je dat absoluut opgeven ipv. relatief (dus fopen('/home/..../test.txt')?
Wat je wellicht kunt proberen is een soort log weg te schrijven naar de database gezien je daarmee schijnbaar wel connectie hebt (dus bijvoorbeeld testen if file_exists('jouwbestand') schrijf dan iets in de database weg en anders iets anders? Of laat debug meldingen naar je mail sturen?
-
21-12-2009, 14:21 #7
- Berichten
- 68
- Lid sinds
- 18 Jaar
ik denk eerder dat de gehele cronjob niet wordt uitgevoerd.
Waar definieer je om de hoeveel tijd de cronjob moet uitvoeren, in een admin panel of zit je direct in het cron-bestand te editen?
wat je ook kan proberen is
Code:php -q /home/beheerder/domains/xxx/csv.php
Code:wget -O /dev/null -q http://www.url.nl/script.php
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic