Hallo
Ich versuche grade mit einem Kolegen von mir cronjobs zu erstellen mit PHP
aller dings haut das nicht so ganz hin.
Entweder verstehen wir das falsch oder die funktion ist kaputt
Also der fehler ist einfach er erstellt keine Cronjobs
Und ja ich gucke bei den Richtigen benutzer nach (www-data)
Übrigends haben wir ein Root server der auf Debian Wheezy basiert.
Wir haben das bis jetzt so aufgebaut:
Fehler:
Fehler Datei:
Fehler ist bei der Save Funktion
MfG
HoneyKing
Ich versuche grade mit einem Kolegen von mir cronjobs zu erstellen mit PHP
aller dings haut das nicht so ganz hin.
Entweder verstehen wir das falsch oder die funktion ist kaputt
Also der fehler ist einfach er erstellt keine Cronjobs
Und ja ich gucke bei den Richtigen benutzer nach (www-data)
Übrigends haben wir ein Root server der auf Debian Wheezy basiert.
Wir haben das bis jetzt so aufgebaut:
PHP-Code:
function timestamp_mysql2german($date) {
$stamp['min'] = sprintf("%02d",
substr($date, 14, 2));
$stamp['std'] = sprintf("%02d",
substr($date, 11, 2));
$stamp['days'] = sprintf("%02d",
substr($date, 8, 2));
$stamp['month'] = sprintf("%02d",
substr($date, 5, 2));
$stamp['date'] = sprintf("%02d %02d",
substr($date, 8, 2),
substr($date, 5, 2));
$stamp['time'] = sprintf("%02d %02d",
substr($date, 11, 2),
substr($date, 14, 2));
return $stamp;
}
$dateTime = timestamp_mysql2german($ende);
$crontab = new Crontab();
//$crontab->add($dateTime['min'].' '.$dateTime['std'].' '.$dateTime['days'].' '.$dateTime['month'].' * /var/www/virtual/tld-domain.de/htdocs/sh/stopserver.sh '.$_POST['port']);
//$crontab->add(array($dateTime['min'] , $dateTime['std'] , $dateTime['days'] , $dateTime['month'] , "*" , "/var/www/virtual/tld-somian.de/htdocs/sh/stopserver.sh ".$_POST['port']));
$sexy = array($dateTime['min'] , $dateTime['std'] , $dateTime['days'] , $dateTime['month'] , "*" , "/var/www/virtual/tld-domain.de/htdocs/sh/stopserver.sh ".$_POST['port']);
$crontab->add($sexy);
$crontab->save();
Code:
Warning: tempnam(): open_basedir restriction in effect. File(/tmp) is not within the allowed path(s): (/var/www/virtual/tld-domain.de/:/var/www/virtual/tld-domain.de/phptmp/:/usr/share/php/) in /var/www/virtual/tld-domain.de/htdocs/templates/cronjob.php on line 162 Warning: fopen(): Filename cannot be empty in /var/www/virtual/tld-domain.de/htdocs/templates/cronjob.php on line 163 Warning: fwrite() expects parameter 1 to be resource, boolean given in /var/www/virtual/tld-domain.de/htdocs/templates/cronjob.php on line 165 Warning: fclose() expects parameter 1 to be resource, boolean given in /var/www/virtual/tld-domain.de/htdocs/templates/cronjob.php on line 167 Warning: unlink(): open_basedir restriction in effect. File() is not within the allowed path(s): (/var/www/virtual/tld-domain.de/:/var/www/virtual/tld-domain.de/phptmp/:/usr/share/php/) in /var/www/virtual/tld-domain.de/htdocs/templates/cronjob.php on line 169
Fehler ist bei der Save Funktion
PHP-Code:
<?php
/**
* @author Mark Wecke <mark.wecke@googlemail.com>
*/
class Crontab {
/**
* Speichert die geparsten Einträge aller eingetragenen Cronjobs des Users
*
* @var array
*/
protected $rows = array();
public function __construct() {
$this->_parse();
}
/**
* Liest alle eingetragenen Cronjobs des Users aus und parst sie in ein Array
*/
protected function _parse() {
$rows = array();
exec('crontab -l', $rows);
if(!empty($rows))
{
if(substr($rows[0], 0, 10) == 'no crontab') {
return;
}
foreach($rows AS $row) {
$this->rows[] = $this->_parseRow($row);
}
}
}
/**
* Splittet eine Zeile der Crontab in ein Array auf
*
* @param String $row
* @return Array
*/
protected function _parseRow($row) {
return preg_split('/\s+/', trim($row), 6);
}
/**
* Entfernt alle Whitespaces aus dem Hinzugefügten Cronjob
* Wird auf alle Felder bis auf das Command Feld angewendet
*
* @see Cronjob::add()
* @param string $cell
* @return string
*/
protected function _sanitize($cell) {
return preg_replace('/\s+/', '', $cell);
}
/**
* Liefert alle Cronjobs als Array
*
* @return array
*/
public function getAll() {
return $this->rows;
}
/**
* Findet alle eingetragen Cronjobs die mit den Suchparameters übereinstimmen
* <dl>
* <dt>minute, hoer, dom(day of month), month, dow(day of week), command</dt>
* <dd>Sucht in dem entsprechenden Feld, find nur komplette übereinstimmungen</dd>
* <dt>commadSW</dt>
* <dd>Findet alle Einträge die mit dem übergebenen Wert anfangen</dd>
* <dt>commandPM</dt>
* <dd>Findet alle Einträge auf die der übergebene RegEx passt(muss mit delimiter übergeben werden)<br />Beispiel:<br />
* /# Comment ID1$/ - findet alle Einträge mit dem Kommentar '# Comment ID1' am Ende
* </dd>
* </dl>
* Beispiel:<br />
* <pre>
* $crontab = new Crontab();
* $crontab->find(array(
* 'hour' => 12,
* 'commandSW' => 'php '
* ));
* </pre>
* Findet alle Cronjobs die zwischen 12 und 12:59 aufgerufen werden und des Befehl mit 'php ' startet
*
* @param array[optional] $spec
* @return array
*/
public function find(array $spec=array()) {
$result = array();
foreach($this->rows AS $i => $row) {
if((!isset($spec['minute']) || $spec['minute'] == $row[0])
&& (!isset($spec['hour']) || $spec['hour'] == $row[1])
&& (!isset($spec['dom']) || $spec['dom'] == $row[2])
&& (!isset($spec['month']) || $spec['month'] == $row[3])
&& (!isset($spec['dow']) || $spec['dow'] == $row[4])
&& (!isset($spec['command']) || $spec['command'] == $row[5])
&& (!isset($spec['commandSW']) || $spec['commandSW'] == substr($row[5], 0, strlen($spec['commandSW'])))
&& (!isset($spec['commandPM']) || preg_match($spec['commandPM'], $row[5]))
) {
$result[$i] = $row;
}
}
return $result;
}
/**
* Entfernt alle Cronjobs die mit den Suchparameters übereinstimmen<br />
* gleiche Suchparameter wie Crontab::find() und zusätzlich 'row' damit kann gezielt eine Zeile gelöscht werden
*
* @param array $spec
* @return int Anzahl der gelöschten Zeilen
* @see Crontab::find()
*/
public function remove(array $spec) {
if(isset($spec['row'])) {
unset($this->rows[$spec['row']]);
return true;
}
$rows = $this->find($spec);
foreach($rows AS $i => $row) {
unset($this->rows[$i]);
}
return count($rows);
}
/**
* Benötigt eine Zeile der Crontab als String oder numerisches Array. <br />
* Minute, Stunde, Tag im Monat, Monat, Tag der Woche, Befehl
*
* @param array|string $row
* @return boolean
*/
public function add($row) {
if(is_string($row)) {
$row = $this->_parseRow($row);
if(count($row) != 6) {
return false;
}
} else if(is_array($row)) {
if(count($row) != 6) {
return false;
}
$command = array_pop($row);
$row = array_map(array($this, '_sanitize'), $row);
$row[] = $command;
} else {
return false;
}
$this->rows[] = $row;
return true;
}
/**
* Speichert alle Cronjobs in die Crontab Datei des Users
*
* @return boolean
*/
public function save() {
$file = tempnam(sys_get_temp_dir(), 'PHP_CRONTAB');
$handle = fopen($file, 'w');
foreach($this->rows AS $row) {
fwrite($handle, implode(' ', $row).PHP_EOL);
}
fclose($handle);
exec("crontab $file");
unlink($file);
$tmp = $this->rows;
$this->_parse();
return ($tmp === $this->rows);
}
}
?>
HoneyKing
Kommentar