Fil-qosor: Is-PHP CLI (Command Line Interface) hija l-varjant ta' PHP għal-linja tal-kmand. Teżegwixxi skripts mingħajr server tal-web, pereżempju għal cronjobs, Composer jew kompiti ta' manutenzjoni. Għandha valuri standard proprji, spiss php.ini proprja u kultant saħansitra verżjoni differenti mill-websajt. Għalhekk php -v mhuwiex prova affidabbli li l-websajt hija ppatchjata wara PHP2Shell.
X'inhi l-PHP CLI?
Il-manwal ta' PHP isemmi żewġ oqsma ewlenin ta' użu ta' PHP: skripts għal websajts u skripts fuq il-linja tal-kmand. Għal dan tal-aħħar hemm SAPI proprja bl-isem cli. M'għandhiex bżonn la server tal-web u lanqas browser, biss l-interpretatur ta' PHP. Skont il-manwal hija adatta speċjalment għal kompiti li jaħdmu regolarment permezz ta' Cron taħt Linux jew permezz tal-ippjanar tal-kompiti taħt Windows.
Eżempji tipiċi fil-ħajja ta' kuljum tal-kumpanija: importazzjonijiet bil-lejl fil-ħanut, bagħtiet ta' newsletters, tindif ta' caches, aġġornamenti permezz ta' Composer jew l-għodod tal-linja tal-kmand ta' CMS bħal WP-CLI jew il-konsola ta' Symfony. Taħt Windows il-fajl jissejjaħ php.exe, il-varjant CGI php-cgi.exe.
B'differenza minn PHP-FPM, is-CLI mhijiex servizz. Kull sejħa tibda proċess ġdid, terġa' taqra l-konfigurazzjoni, skont il-manwal, u tintemm meta l-iskrip jispiċċa. Restart wara aġġornament għalhekk mhuwiex meħtieġ. L-eċċezzjonijiet huma proċessi li jaħdmu fit-tul li jinbdew permezz tas-CLI, pereżempju workers tal-queues tal-frameworks jew daemons taħt systemd jew Supervisor. Jaħdmu jiem sħaħ bl-interpretatur mgħobbi darba u jridu jerġgħu jinbdew wara aġġornament ta' PHP eżattament bħal workers tal-web.
Għall-maniġment u għat-tmexxija tal-proġetti dan ifisser: anki kompiti fl-isfond jappartjenu fl-inventarju u f'kull pjan ta' aġġornament.
Kif tiddifferenzja s-CLI mill-verżjoni tal-web?
Is-CLI, skont il-manwal, tissorpassa xi settings b'mod fiss. Ma jistgħux jinbidlu permezz tal-php.ini, biss waqt it-tħaddim b'ini_set():
| Direttiva | Valur fis-CLI | Raġuni skont il-manwal |
|---|---|---|
html_errors |
mitfi | it-tags HTML jiddisturbaw fit-terminal |
implicit_flush |
mixgħul | l-output għandu jidher immedjatament |
max_execution_time |
0 (bla limitu) | l-iskripts tal-linja tal-kmand spiss jaħdmu fit-tul |
register_argc_argv |
mixgħul | l-iskripts dejjem jirċievu $argc u $argv |
output_buffering |
mitfi | fiss, il-funzjonijiet tal-buffer jibqgħu jistgħu jintużaw |
max_input_time |
mitfi | is-CLI ma tafx GET, POST jew uploads |
Differenza oħra: Is-CLI ma tbiddilx id-direttorju għal dak tal-iskrip. Min isejjaħ php -f ordner/skript.php minn /tmp ikompli jaħdem fi /tmp. Mogħdijiet relattivi f'cronjobs għalhekk huma sors komuni ta' żbalji.
Skrip żgħir li għandu jaħdem biss fuq il-linja tal-kmand:
<?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");
Il-kontroll ta' PHP_SAPI jipprevjeni li skrip ta' manutenzjoni jiġi attivat permezz tal-browser, jekk bi żball jinsab fid-direttorju tal-web. Il-manwal jirrakkomanda espliċitament li l-SAPI tiġi vverifikata hekk minflok ma wieħed joqgħod fuq il-preżenza ta' $argv.
L-għażliet ewlenin tal-PHP CLI
L-għażliet li ġejjin joħorġu mill-ħarsa ġenerali tal-għażliet fil-manwal ta' PHP u huma utli speċjalment għall-amministraturi:
php -vjuri n-numru tal-verżjoni tas-CLI.php --inijuri liema fajls tal-konfigurazzjoni jitgħabbew.php -mjelenka l-moduli kkompilati u mgħobbija.php -iisejjaħphpinfo()u jagħti r-riżultat bħala test.php -l datei.phpjivverifika s-sintassi biss (lint). Minn PHP 8.3 anki għal diversi fajls f'daqqa.php -r 'code'jesegwixxi kodiċi direttament, mingħajr<?php.php -d name=wertissettja setting INI għal din is-sejħa.php -njinjora l-php.ini kompletament.php --ri namejuri l-konfigurazzjoni ta' estensjoni.
php --ini
php -m | grep -i -E "opcache|sodium|pdo"
php --ri session | grep upload_progress
php -l src/Controller.php src/Model.php
Is-server tal-web integrat: għall-iżvilupp biss
Bi php -S localhost:8000 is-CLI tibda server żgħir tal-web. L-output tal-eżempju fil-manwal isemmi PHP 5.4.0 bħala punt tat-tluq. Il-manwal huwa ċar: is-server iservi għall-iżvilupp, mhuwiex server tal-web sħiħ u m'għandux jaħdem fi netwerks pubbliċi u lanqas fil-produzzjoni. Jekk jaħdem b'mod permanenti fuq server u jintlaħaq minn barra, dan huwa riżultat li għandkom tneħħu.
CLI, Cron u sigurtà wara PHP2Shell
Ir-rapporti magħrufa dwar PHP2Shell isemmu PHP-FPM, mod_php, php-cgi, FrankenPHP u LiteSpeed bħala modalitajiet tat-tħaddim affettwati. Is-CLI ma tipproċessax talbiet mix-xibka. Għas-sigurtà madankollu hija importanti fi tliet aspetti:
- Prova żbaljata:
php -vjuri l-verżjoni tas-CLI. Il-websajt tista' tuża verżjoni oħra, u l-backports tad-distribuzzjonijiet spiss ma jibdlux in-numru murni. Kif tippruvaw l-istat b'mod korrett jinsab taħt Verifika tal-verżjoni ta' PHP u tal-istat tal-patch u fl-artikolu Għaliex php -v juri l-istess numru. - Persistenza permezz ta' Cron: L-attakkanti wara intrużjoni jħobbu jużaw cronjobs li jibdew skrip PHP regolarment. Indikazzjonijiet għat-tiftix jagħti Tagħrfu cronjobs moħbija bħala bieb ta' wara.
- Istess pakkett: Is-CLI normalment tiġi mill-istess sors tal-pakketti bħal PHP-FPM u tappartjeni fl-aġġornament.
Kif jgħin PHP SOS konkretament?
- Inqabblu l-verżjonijiet: Inqabblu l-istat tas-CLI u tal-web u nippruvaw liema verżjoni twassal tassew il-websajt tagħkom.
- Nivverifikaw il-cronjobs: Nelenkaw il-kompiti ppjanati kollha ta' PHP tal-utenti kollha u nassenjawhom lill-applikazzjonijiet tagħhom.
- Nassiguraw il-manutenzjoni: Nneħħu skripts ta' manutenzjoni mid-direttorju tal-web u nissettjaw kontrolli tas-SAPI.
- Nieħdu ħsieb fit-tul: Fil-kuntratt ta' manutenzjoni tas-sigurtà inżommu s-CLI, is-SAPI tal-web u l-cronjobs aġġornati flimkien.
Mistoqsijiet frekwenti
php -v juri l-verżjoni tal-websajt tiegħi?
Mhux neċessarjament. php -v juri l-verżjoni tal-varjant tal-linja tal-kmand. Il-websajt tista' taħdem permezz ta' verżjoni oħra ta' PHP-FPM jew modulu ta' Apache. Għall-websajt jgħodd l-istat tal-SAPI tal-web, li tiddeterminaw permezz tas-servizz jew ta' fajl ta' verifika għal żmien qasir.
Għaliex l-iskripts tas-CLI jaħdmu għal żmien bla limitu?
Skont il-manwal ta' PHP, is-CLI tissettja max_execution_time b'mod fiss fuq 0, jiġifieri bla limitu, għax l-iskripts fuq il-linja tal-kmand spiss jagħmlu kompiti twal. Id-dewmien jista' jiġi llimitat mill-iskrip innifsu jew minn għodod bħal timeout.
Nista' nuża s-server tal-web integrat php -S fil-produzzjoni?
Le. Il-manwal jiddeskrivih bħala għajnuna għall-iżvilupp, mhux server tal-web sħiħ, u ma jirrakkomandax l-użu f'netwerks pubbliċi u fil-produzzjoni. Għal sistemi live jappartjenu Apache, Nginx jew LiteSpeed bi PHP-FPM quddiemhom.
OPcache huwa attiv fuq il-linja tal-kmand?
B'mod predefinit le. opcache.enable_cli, skont il-manwal, huwa fuq 0. Għal skripts qosra l-cache jgħin ftit xorta waħda, għax kull sejħa hija proċess ġdid.