Praegune olukord: PHP2Shell. Kaks kriitilist PHP turvaauku (CVSS 9,2) lubavad kahjulikku koodi ilma sisselogimata. Paigad alates 21.10.2026.Mida nüüd teha →

PHP käsureal (CLI)

PHP CLI käivitab skripte ilma veebiserverita, näiteks cron-tööde ja hoolduse jaoks. See käitub teisiti kui veebiversioon ega näita sageli seisu, mida teie veebisait kasutab.

Seis Lugemisaeg 4 minPHP teadmised

Lühidalt: PHP CLI (Command Line Interface) on PHP variant käsurea jaoks. See käivitab skripte ilma veebiserverita, näiteks cron-tööde, Composeri või hooldusülesannete jaoks. Sellel on omad vaikeväärtused, sageli oma php.ini ja vahel isegi teine versioon kui veebisaidil. Seetõttu ei ole php -v usaldusväärne tõend, et veebisait on pärast PHP2Shelli paigatud.

Mis on PHP CLI?

PHP käsiraamat nimetab PHP kaht peamist kasutusvaldkonda: skriptid veebisaitide jaoks ja skriptid käsureal. Viimase jaoks on olemas eraldi SAPI nimega cli. See ei vaja veebiserverit ega brauserit, ainult PHP interpretaatorit. Käsiraamatu järgi sobib see eriti ülesannetele, mis töötavad regulaarselt cron-i kaudu Linuxis või ülesannete ajastaja kaudu Windowsis.

Tüüpilised näited ettevõtte igapäevaelus: öised impordid poes, uudiskirjade saatmine, vahemälude puhastamine, uuendused Composeri kaudu või CMS-ide käsurea tööriistad nagu WP-CLI või Symfony konsool. Windowsis kannab fail nime php.exe, CGI variant php-cgi.exe.

Erinevalt PHP-FPM-ist ei ole CLI teenus. Iga väljakutse käivitab uue protsessi, loeb käsiraamatu järgi seadistuse uuesti sisse ja lõpeb, kui skript on valmis. Taaskäivitus pärast uuendust ei ole seetõttu vajalik. Erandid on pikalt töötavad protsessid, mis käivitatakse CLI kaudu, näiteks raamistike järjekorra-workerid või deemonid systemd või Supervisori all. Need töötavad päevi ühe korra laaditud interpretaatoriga ja tuleb pärast PHP uuendust samamoodi uuesti käivitada nagu veebiworkerid.

Juhtkonnale ja projektijuhtidele tähendab see: ka taustaülesanded kuuluvad inventuuri ja igasse uuenduskavasse.

Kuidas CLI veebiversioonist erineb?

CLI kirjutab käsiraamatu järgi mõned sätted kindlalt üle. Neid ei saa php.ini kaudu muuta, ainult käitusajal ini_set() abil:

Direktiiv Väärtus CLI-s Põhjendus käsiraamatu järgi
html_errors väljas HTML-sildid segavad terminalis
implicit_flush sees väljund peab ilmuma kohe
max_execution_time 0 (piiramatu) käsurea skriptid töötavad sageli kaua
register_argc_argv sees skriptid saavad alati $argc ja $argv
output_buffering väljas kindlalt seotud, puhverdusfunktsioonid jäävad kasutatavaks
max_input_time väljas CLI ei tunne GET-i, POST-i ega üleslaadimisi

Veel üks erinevus: CLI ei vaheta skripti kataloogi. Kes kutsub php -f ordner/skript.php välja kaustast /tmp, töötab edasi kaustas /tmp. Suhtelised teed cron-töödes on seetõttu sage veaallikas.

Väike skript, mis peab töötama ainult käsureal:

<?php
if (PHP_SAPI !== 'cli') {
    http_response_code(403);
    exit('Nur für die Kommandozeile.');
}
$tage = (int) ($argv[1] ?? 30);
$grenze = time() - $tage * 86400;
$alt = 0;
foreach (glob(__DIR__ . '/cache/*.tmp') ?: [] as $datei) {
    if (filemtime($datei) < $grenze) { $alt++; }
}
fwrite(STDOUT, "Dateien älter als $tage Tage: $alt\n");

Kontroll PHP_SAPI vastu takistab, et hooldusskripti brauseri kaudu käivitataks, kui see peaks kogemata veebikataloogis asuma. Käsiraamat soovitab selgesõnaliselt SAPI-t nii kontrollida, mitte tugineda $argv olemasolule.

PHP CLI olulisimad valikud

Järgmised valikud pärinevad PHP käsiraamatu valikute ülevaatest ja on administraatoritele eriti kasulikud:

  1. php -v näitab CLI versiooninumbrit.
  2. php --ini näitab, millised seadistusfailid laaditakse.
  3. php -m loetleb sissekompileeritud ja laaditud moodulid.
  4. php -i kutsub välja phpinfo() ja väljastab tulemuse tekstina.
  5. php -l datei.php kontrollib ainult süntaksit (lint). Alates PHP 8.3-st ka mitme faili korraga.
  6. php -r 'code' käivitab koodi otse, ilma <?php-ta.
  7. php -d name=wert seab INI sätte selle väljakutse jaoks.
  8. php -n ignoreerib php.ini täielikult.
  9. php --ri name näitab laienduse seadistust.
php --ini
php -m | grep -i -E "opcache|sodium|pdo"
php --ri session | grep upload_progress
php -l src/Controller.php src/Model.php

Sisseehitatud veebiserver: ainult arenduseks

Käsuga php -S localhost:8000 käivitab CLI väikese veebiserveri. Käsiraamatu näidisväljund nimetab lähtepunktiks PHP 5.4.0. Käsiraamat on ühemõtteline: server on mõeldud arenduseks, ei ole täisväärtuslik veebiserver ning ei tohi töötada avalikes võrkudes ega tootmises. Kui see töötab serveris püsivalt ja väljastpoolt kättesaadavana, on see leid, mis tuleks kõrvaldada.

CLI, cron ja turvalisus pärast PHP2Shelli

PHP2Shelli teated nimetavad mõjutatud töörežiimidena PHP-FPM-i, mod_php-d, php-cgi-d, FrankenPHP-d ja LiteSpeedi. CLI ei töötle võrgust tulevaid päringuid. Turvalisuse seisukohast on see siiski kolmel viisil oluline:

  • Vale tõend: php -v näitab CLI versiooni. Veebisait võib kasutada teist versiooni ja distributsioonide backportid ei muuda kuvatavat numbrit sageli. Kuidas seisu õigesti tõendada, leiate lehelt PHP versiooni ja paigaseisu kontroll ja artiklist Miks php -v näitab sama numbrit.
  • Püsivus cron-i kaudu: Ründajad kasutavad pärast sissemurdmist meelsasti cron-töid, mis käivitavad PHP skripti regulaarselt. Otsimise vihjeid annab artikkel Peidetud cron-tööde tuvastamine tagauksena.
  • Sama pakett: CLI pärineb enamasti samast paketiallikast kui PHP-FPM ja kuulub uuendusse.

Kuidas PHP SOS konkreetselt aitab?

  • Versioonide võrdlemine: Võrdleme CLI ja veebi seisu ning tõendame, millist versiooni teie veebisait tegelikult edastab.
  • Cron-tööde kontroll: Loetleme kõik planeeritud PHP ülesanded kõigi kasutajate juures ja seostame need rakendustega.
  • Hoolduse kaitsmine: Viime hooldusskriptid veebikataloogist välja ja seame SAPI kontrollid.
  • Püsiv hooldus: Turvahoolduslepingu raames hoiame CLI, veebi-SAPI ja cron-tööd koos ajakohasena.

Korduma kippuvad küsimused

Kas php -v näitab minu veebisaidi versiooni?

Mitte tingimata. php -v näitab käsurea variandi versiooni. Veebisait võib töötada teise PHP-FPM versiooni või Apache'i mooduli kaudu. Veebisaidi jaoks loeb veebi-SAPI seis, mille saate teenuse või ajutise kontrollifaili kaudu kindlaks teha.

Miks CLI skriptid töötavad piiramatult kaua?

PHP käsiraamatu järgi seab CLI max_execution_time kindlalt väärtusele 0, see tähendab piiramatu, sest käsurea skriptid täidavad sageli pikki ülesandeid. Tööaega saab piirata skripti enda kaudu või tööriistadega nagu timeout.

Kas ma tohin sisseehitatud veebiserverit php -S tootmises kasutada?

Ei. Käsiraamat kirjeldab seda arenduse abivahendina, mitte täisväärtusliku veebiserverina, ja ei soovita kasutada avalikes võrkudes ega tootmises. Elavate süsteemide ees peavad olema Apache, Nginx või LiteSpeed koos PHP-FPM-iga.

Kas OPcache on käsureal aktiivne?

Vaikimisi mitte. opcache.enable_cli on käsiraamatu järgi 0. Lühikeste skriptide jaoks ei anna vahemälu nagunii palju, sest iga väljakutse on uus protsess.

Allikad

Kohene kontakt

Iga tund loeb. Kirjutage meile kohe.

Kirjeldage lühidalt süsteemi, PHP versiooni ja tähelepanekut. Võtame teiega ühendust, selgitame olukorra välja ja töötame kaugtööna, kuni intsident on lõpetatud ja dokumenteeritud.

Kohene abi