PHP: testet den Aufruf exec() [Programm ausführen]

edit | delete

Autor: Ralf v.d.Mark

eingetragen: Montag, 17. August 2020 um 10:22 Uhr (34/2020 Kalenderwoche)

geändert: Freitag, 05. April 2024 um 13:52 Uhr (14/2024 Kalenderwoche)

Keywords: testet Aufruf exec Programm ausführen cons Konstanten

Kategorien: PHP,

Text:

Um die Funktion exec() zu testen, kann man die Datei "teste_EXEC.php" (siehe Quellcode) auführen.
Wenn erfolgreich, werden alle für PHP definierten Konstanten in eine Text-Datei geschrieben.


Der Aufruf für PHP (z.B.: php83) wird jetzt dynamisch erzeugt:
$phpAliasAufruf = 'php'.(int)substr(strreplace('.', '', PHPVERSION), 0, 2);

Quellcode:  

<?php
/**
 * Diese Datei testet die Funkion exec() und schreibt, wenn erfolgreich,
 * alle für PHP definierten Konstanten in eine Text-Datei.
 *
 * PHP version 8
 *
 * @name       teste_EXEC.php
 * @author     Ralf von der Mark, Ref. 223 (Entwicklung), BLE <Ralf.vonderMark@BLE.de>
 * @copyright  2024, BLE
 * @version    05.04.2024, GIT: No
 */
$phpAliasAufruf = 'php'.(int)substr(str_replace('.', '', PHP_VERSION), 0, 2);


//Zeitzone und mehr einstellen:
date_default_timezone_set('Europe/Berlin');
setlocale(LC_ALL, 'de_DE@euro');

define('AUFRUF_PHP', $phpAliasAufruf);//Aufruf für PHP (Standard: php)
define('VERZEICHNS_SPEICHERN', 'temp/');//"/temp/" muss existieren & beschreibbar sein
define('PFAD_ABSOLUT', $_SERVER['DOCUMENT_ROOT'] . '/');//htdocs-Verzeichnis des Angebotes
define('NAME_DIESER_DATEI', basename((string)$_SERVER['SCRIPT_FILENAME']));//Name der Datei selbst
define('PFAD_ZUM_SPEICHERN', PFAD_ABSOLUT . VERZEICHNS_SPEICHERN);
define('NAME_SPEICHERDATEI', 'allePhpKonstanten_' . date('Y-m-d_H-i') . '.txt');
define('LOGDATEI_GEWUENSCHT_BOOL', false);//Wenn true, wird die Ausgabe gespeichert!

//$argv[1] = PFAD_ZUM_SPEICHERN . NAME_SPEICHERDATEI;//IF()-Bereich testen "Datei schreiben"
if (!empty($argv[1])) {
    /* Hier muss jetzt was gemacht werden und dann das Programm stoppen!
     *
     * HINWEIS: Der Pfad muss übergeben werden, da die Server-Variablen nicht
     *          zur Verfügung stehen. Man kann auch mehr Wert im $argv-Array
     *          übergeben, getrennt mit SPACE (Leertaste, chr(32)). */

    //wird in die Log geschrieben, falls LOGDATEI_GEWUENSCHT_BOOL = true.
    echo '[' . date('Y-m-d H:i:s') . '] Schreibe die Datei: "' . $argv[1] . '"' . PHP_EOL;

    file_put_contents($argv[1],
        'Enthaelt alle für PHP definierten Konstanten (Stand: ' .
        date('d.m.Y \, H:i:s') . ' Uhr)' .
        PHP_EOL . PHP_EOL .
        print_r(get_defined_constants(true), true));

    //wird in die Log geschrieben, falls LOGDATEI_GEWUENSCHT_BOOL = true.
    echo '[' . date('Y-m-d H:i:s') . '] Die Datei: "' . $argv[1] . '" sollte geschrieben sein.' . PHP_EOL;

    //...und jetzt das Programm stoppen!
    exit();
}//ENDE: if ()


if (LOGDATEI_GEWUENSCHT_BOOL === true) {
    //Hier wartet PHP auf das Ende des Programms und schreibt ERRORs in Txt-Datei
    $wartenOderLogschreiben = '>> ' . PFAD_ZUM_SPEICHERN . NAME_DIESER_DATEI . '_log.txt';
} else {
    //Wartet nicht auf Antwort der Seite! Job kann nicht mehr angehalten werden!
    $wartenOderLogschreiben = '> /dev/null &';
}//ENDE: else ==> if (LOGDATEI_GEWUENSCHT_BOOL === true)

exec(AUFRUF_PHP .
    ' ' . $_SERVER['SCRIPT_FILENAME'] .
    ' ' . PFAD_ZUM_SPEICHERN . NAME_SPEICHERDATEI . //Inhalt von $argv[1]
    ' ' . $wartenOderLogschreiben);//Log oder nicht


echo '<h1>Die Datei ' . NAME_DIESER_DATEI . ' hat den Aufruf exce() gestartet.</h1>
    <a href="/' . VERZEICHNS_SPEICHERN . NAME_SPEICHERDATEI . '">Wenn es funktioniert, finden Sie hier das Ergebnis.</a>';
exit();