# Kif PHP jipproċessa l-uploads tal-fajls

> Kif PHP jipproċessa l-uploads tal-fajls internament: multipart/form-data, fajls temporanji f'upload_tmp_dir, l-array $_FILES, limiti u kodiċijiet tal-iżbalji.

Sors: https://phpsos.de/mt/php/datei-uploads-intern/  
Stat: 25/10/2026  
Fornitur: PHP SOS, Għajnuna ta' emerġenza għal PHP u sigurtà tas-server. Għajnuna immedjata fuq WhatsApp: https://wa.me/491736494914?text=Bongu%20PHP%20SOS%2C%20g%C4%A7andna%20b%C5%BConn%20g%C4%A7ajnuna%20bis-server%20tal-PHP%20tag%C4%A7na.%20Kumpanija%3A%20%E2%80%A6%20Websajt%3A%20%E2%80%A6

**Fil-qosor:** Meta browser jgħabbi fajl, jibgħat talba POST fil-format `multipart/form-data`, fejn l-oqsma tal-formola u l-kontenut tal-fajls jidhru bħala partijiet separati wara xulxin. PHP innifsu jaqsam din it-talba, jikteb kull parti ta' fajl f'fajl temporanju fl-`upload_tmp_dir`, jniżżel id-dettalji f'`$_FILES` u biss imbagħad jibda l-iskript tagħkom. L-iskript iċaqlaq il-fajl b'`move_uploaded_file()`; dak kollu li ma jiġix mċaqlaq, PHP ineħħih fi tmiem it-talba.

## It-triq ta' fajl mill-browser sal-iskript

Għal min jieħu d-deċiżjonijiet, l-aktar importanti hu dan: upload mhuwiex proċess tal-applikazzjoni biss. Parti kbira mix-xogħol isir fl-interpretatur ta' PHP, qabel ma l-kodiċi taċ-CMS jew tal-ħanut ikun involut xejn. Għalhekk żbalji f'din il-parti ta' PHP jolqtu kull websajt, kemm jekk għandha formola għat-tlugħ ta' fajls kif ukoll jekk le.

Il-fluss fil-qosor:

1. Tintbagħat il-formola b'`method="POST"` u `enctype="multipart/form-data"`.
2. Is-server tal-web jaċċetta t-talba u jgħaddiha lil PHP, skont il-modalità tat-tħaddim permezz ta' PHP-FPM, mod_php jew interface oħra.
3. PHP jiċċekkja limiti bħal `post_max_size` u jaqsam il-kontenut skont sekwenza ta' karattri li taqsam il-partijiet, imsejħa boundary.
4. L-oqsma normali jispiċċaw f'`$_POST`, il-partijiet tal-fajls jinkitbu f'fajls temporanji u jiġu deskritti f'`$_FILES`.
5. Biss issa jibda l-iskript, jiċċekkja l-fajl u jċaqlaqh lejn id-destinazzjoni tiegħu.
6. Fi tmiem it-talba PHP ineħħi l-fajls temporanji kollha li ma ġewx mċaqalqa.

## multipart/form-data: l-istruttura ta' talba ta' upload

Talba ta' upload hija test pur b'data tal-fajls inkorporata. L-header `Content-Type` isemmi l-boundary, u fil-kontenut din is-sekwenza ta' karattri taqsam il-partijiet individwali. Kull parti għandha l-headers tagħha b'isem il-qasam u, jekk applikabbli, isem il-fajl. Eżempju qasir ħafna u bla ħsara:

```http
POST /bewerbung HTTP/1.1
Content-Type: multipart/form-data; boundary=----trenner42

------trenner42
Content-Disposition: form-data; name="vorname"

Erika
------trenner42
Content-Disposition: form-data; name="lebenslauf"; filename="lebenslauf.pdf"
Content-Type: application/pdf

%PDF-1.7 ... Dateiinhalt ...
------trenner42--
```

L-informazzjoni kollha f'dan it-test tiġi minn min jibgħat, inkluż l-isem tal-fajl u l-`Content-Type` tal-parti. PHP jaqbadha f'`$_FILES` imma ma jivverifikax jekk hix plawżibbli.

## L-array $_FILES

Għal qasam bl-isem `lebenslauf`, `$_FILES['lebenslauf']` fih, skont il-manwal ta' PHP, dawn iċ-ċwievet:

| Ċavetta | Kontenut | Affidabbli? |
|---|---|---|
| `name` | l-isem oriġinali tal-fajl għand min jibgħat | le |
| `full_path` | il-mogħdija rrapportata mill-browser, minn PHP 8.1.0 | le |
| `type` | tip MIME skont il-browser, mhux ivverifikat minn PHP | le |
| `size` | daqs f'bytes | determinat minn PHP |
| `tmp_name` | mogħdija tal-fajl temporanju fuq is-server | assenjata minn PHP |
| `error` | kodiċi ta' żball tal-ipproċessar tal-upload | issettjat minn PHP |

Fil-każ ta' oqsma b'parentesi kwadri fl-isem, pereżempju `bilder[]`, kull ċavetta fiha array b'entrata waħda għal kull fajl. L-applikazzjoni mbagħad tgħaddi pereżempju minn `$_FILES['bilder']['error']` u tasal permezz tal-istess indiċi għal `tmp_name` u `name`.

Formola tista' tibgħat ukoll qasam moħbi `MAX_FILE_SIZE` qabel il-qasam tal-fajl. Skont il-manwal dan huwa biss suġġeriment għall-browser, li jista' jiġi evitat faċilment. Tistgħu tiddependu biss fuq il-limiti li jinfurzaw is-server: f'PHP, fis-server tal-web u fl-applikazzjoni nnifisha.

## Limiti: id-direttivi ta' php.ini għall-uploads

Dawn id-direttivi jikkontrollaw l-ipproċessar tal-uploads. Il-valuri standard ġejjin mill-manwal ta' PHP u japplikaw meta ebda php.ini ma jissostitwihom.

| Direttiva | Standard | Tista' tinbidel f'|
|---|---|---|
| `file_uploads` | `1` | konfigurazzjoni tas-sistema biss |
| `upload_tmp_dir` | vojt (temp tas-sistema) | konfigurazzjoni tas-sistema biss |
| `upload_max_filesize` | `2M` | php.ini, pool, konfigurazzjoni tad-direttorju |
| `post_max_size` | `8M` | php.ini, pool, konfigurazzjoni tad-direttorju |
| `max_file_uploads` | `20` | php.ini, pool, konfigurazzjoni tad-direttorju |
| `enable_post_data_reading` | `1` | php.ini, pool, konfigurazzjoni tad-direttorju |

`post_max_size` irid ikun akbar minn `upload_max_filesize`, u `memory_limit` għandu, skont il-manwal, ġeneralment ikun akbar minn `post_max_size`. Jekk `upload_tmp_dir` ma jistax jinkiteb, PHP jaqleb għad-direttorju temp tas-sistema. B'`open_basedir` id-direttorju temp irid ikun permess, inkella l-uploads jfallu. Valuri prattiċi u l-konsegwenzi tagħhom jiddeskrivihom l-artikolu [Kif tillimitaw post_max_size u upload_max_filesize b'mod raġonevoli](https://phpsos.de/mt/blog/post-max-size-upload-limits/).

## Evalwazzjoni korretta tal-kodiċijiet tal-iżbalji

L-qasam `error` jgħid x'ġara waqt l-ipproċessar. Il-kostanti jvarjaw minn `UPLOAD_ERR_OK` (0) permezz ta' `UPLOAD_ERR_INI_SIZE` (1), `UPLOAD_ERR_FORM_SIZE` (2), `UPLOAD_ERR_PARTIAL` (3) u `UPLOAD_ERR_NO_FILE` (4) sa `UPLOAD_ERR_NO_TMP_DIR` (6), `UPLOAD_ERR_CANT_WRITE` (7) u `UPLOAD_ERR_EXTENSION` (8).

```php
<?php
declare(strict_types=1);

$datei = $_FILES['lebenslauf'] ?? null;
if ($datei === null) {
    exit('Keine Upload-Daten, eventuell wurde post_max_size überschritten.');
}

$meldung = match ($datei['error']) {
    UPLOAD_ERR_OK => null,
    UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE => 'Datei zu groß.',
    UPLOAD_ERR_NO_FILE => 'Keine Datei gewählt.',
    default => 'Upload fehlgeschlagen.',
};

if ($meldung === null && is_uploaded_file($datei['tmp_name'])) {
    $ziel = '/srv/app/uploads/' . bin2hex(random_bytes(16)) . '.pdf';
    move_uploaded_file($datei['tmp_name'], $ziel);
}
```

L-eżempju juri biss il-mekkaniżmu. Il-verifika tat-tip tal-fajl, il-ħażna barra mill-webroot u l-imblukkar tal-eżekuzzjoni tal-iskripts jiddeskrivihom il-gwida [Kif timplimentaw uploads tal-fajls b'mod sigur f'PHP](https://phpsos.de/mt/ratgeber/datei-upload-sicher/).

## Uploads u PHP2Shell: x'jfissru l-miżuri temporanji

Il-vulnerabbiltajiet PHP2Shell CVE-2026-109618 u CVE-2026-109619 jaffettwaw l-ipproċessar madwar it-talba fl-interpretatur ta' PHP. Għalhekk php.net isemmi bħala miżuri temporanji, fost oħrajn, `post_max_size = 8M` (mingħajr uploads) jew `32M` (b'uploads), `upload_max_filesize` taħtu, kif ukoll `session.upload_progress.enabled=0`. Dawn il-valuri jinkitbu f'php.ini, fil-pool ta' FPM jew fil-konfigurazzjoni tas-server, u wara jridu jerġgħu jinbdew il-workers kollha.

Awturi speċjalizzati jissuġġerixxu wkoll li t-talbiet `multipart/form-data` barra mill-mogħdijiet reali ta' upload jiġu mblukkati fil-proxy jew fil-WAF. Din hija miżura mhux uffiċjali bir-riskju li formoli jinkisru; il-bilanċ tiegħu jiddeskrivih l-artikolu [Iffiltrar tat-talbiet ta' upload fit-tarf tan-network](https://phpsos.de/mt/blog/upload-anfragen-am-rand-filtern/). Ebda waħda minn dawn il-miżuri ma tieħu post l-aġġornament għal PHP 8.5.12, 8.4.27, 8.3.36 jew 8.2.35.

## Kif jgħin PHP SOS konkretament?

- Niddeterminaw liema mill-websajts tagħkom verament jeħtieġu uploads u fuq liema mogħdijiet.
- Nissettjaw il-limiti u l-miżuri temporanji għal kull pool, nerġgħu nibdew il-workers kollha u nittestjaw il-formoli.
- Niċċekkjaw id-direttorji tal-uploads għal fajls eżegwibbli u nimblukkaw l-eżekuzzjoni tal-iskripts bħala parti mit-[tishiħ tas-server](https://phpsos.de/mt/leistungen/server-haertung/).
- Napplikaw l-aġġornament ta' PHP u niddokumentaw l-istat tal-patches għal kull websajt.


## Mistoqsijiet frekwenti

**Fejn PHP jaħżen l-ewwel il-fajls li jitgħabbew?**  
F'direttorju temporanju. B'mod awtomatiku dan huwa d-direttorju temporanju tas-sistema; bi upload_tmp_dir jista' jinbidel. Jekk il-fajl ma jiġix mċaqlaq fl-iskript, PHP ineħħih fi tmiem it-talba.

**Nista' nafda l-qasam type f'$_FILES?**  
Le. It-tip MIME jirrapportah il-browser u, skont il-manwal, PHP ma jivverifikahx. Anki name u full_path jiġu mingħand min jibgħat. It-tip reali tal-fajl tiddeterminawh fuq is-server abbażi tal-kontenut.

**Għaliex $_FILES huwa vojt għalkemm intbagħat fajl?**  
Il-biċċa l-kbira tal-każijiet it-talba kollha kienet akbar minn post_max_size. F'dak il-każ PHP jbattal $_POST u $_FILES kompletament, mingħajr kodiċi ta' żball fl-array. Kawżi oħra huma enctype nieqes fil-formola jew file_uploads mitfija.

**Jgħin kontra PHP2Shell jekk nipprojbixxu l-uploads fl-applikazzjoni?**  
Le. L-ipproċessar tad-data tat-talba jseħħ f'PHP qabel ma jaħdem il-kodiċi tal-applikazzjoni. Jaħdmu l-aġġornament ta' PHP u r-restart tal-workers kollha; limiti aktar stretti huma biss miżura temporanja.

**X'inhi d-differenza bejn upload_max_filesize u post_max_size?**  
upload_max_filesize jillimita kull fajl individwali, post_max_size l-kontenut sħiħ tat-talba, inklużi l-fajls u l-oqsma kollha. Għalhekk post_max_size irid ikun akbar minn upload_max_filesize.

## Sorsi

- [Manwal ta' PHP: Uploads bil-metodu POST](https://www.php.net/manual/de/features.file-upload.post-method.php)
- [Manwal ta' PHP: Messaġġi ta' żball fl-uploads](https://www.php.net/manual/de/features.file-upload.errors.php)
- [Manwal ta' PHP: Direttivi ta' php.ini](https://www.php.net/manual/de/ini.core.php)
- [php.net: Avviżi tas-sigurtà](https://www.php.net/)
