note 130243 added to reserved.variables.files
| From: | ivan@markify.com | Date: | Thu, 10 Apr 2025 22:53:34 +0000 |
| Subject: | note 130243 added to reserved.variables.files | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-222081@lists.php.net to get a copy of this message | ||
If anyone still needs it: class for sorting an array of files of unknown nesting depth
```
class __FILES
{
protected $currentKey = null;
protected $input = array();
protected $output= array();
protected $requiredFields = array('name', 'type', 'tmp_name',
'error', 'size', 'full_path');
public function __construct(array $input)
{
$this->input = $input;
}
public function setRequiredFields(...$_)
{
$this->requiredFields = $_;
return $this;
}
public function prepare()
{
$this->prepareMultilevelFilesArray($this->input, $this->output);
return $this;
}
public function output()
{
return $this->output;
}
protected function prepareMultilevelFilesArray($input, &$output)
{
if(is_array($input)){
foreach($input as $key => $values){
// lock field names
error, size, name,
type, tmp_name
if($this->checkRequiredFields($input)){
$this->currentKey = $key;
$this->prepareMultilevelFilesArray($values, $output);
}else
if(is_array($values)){
$this->prepareMultilevelFilesArray($values, $output[$key]);
}else{
$output[$key][$this->currentKey] = $values;
}
}
}else{
$output[$this->currentKey] = $input;
}
}
protected function checkRequiredFields($input)
{
foreach($this->requiredFields as $field){
if(!isset($input[$field])){ return false;}
}
return true;
}
}
```
Call:
```
print '<form enctype="multipart/form-data" method="POST">';
print '<input type="file" name="s[t][t1][t2][t3][t4][t5][]"
multiple="multiple" />';
print '<input type="file" name="s[t][t1][t2][t3][t4][t5]"
multiple="multiple" />';
print '<input type="file" name="s[t][t1][t2][][t3][t4][t5]"
multiple="multiple" />';
print '<input type="file" name="s[t][t1][t2][][t3][][t4][t5]"
multiple="multiple" />';
print '<input type="file" name="s[t][t1][t2][][t3][][t4][t5][]"
multiple="multiple" />';
print '<input type="submit"/>';
print '</form>';
$input = $_FILES;
$files = new __FILES($input);
$output = $files->setRequiredFields('name', 'type', 'tmp_name',
'error', 'size'/*, 'full_path'*/) // key full_path not
available on PHP-server (php -S), and available on apache2-server
->prepare()->output();
print "<pre>";
print_r([$input, $output]);exit;
```
----
Server IP: 45.112.84.4
Probable Submitter: 80.90.5.137 (proxied: 95.25.128.43)
----
Manual Page -- https://php.net/manual/en/reserved.variables.files.php
Edit -- https://main.php.net/note/edit/130243
Del: integrated -- https://main.php.net/note/delete/130243/integrated
Del: useless -- https://main.php.net/note/delete/130243/useless
Del: bad code -- https://main.php.net/note/delete/130243/bad+code
Del: spam -- https://main.php.net/note/delete/130243/spam
Del: non-english -- https://main.php.net/note/delete/130243/non-english
Del: in docs -- https://main.php.net/note/delete/130243/in+docs
Del: other reasons-- https://main.php.net/note/delete/130243
Reject -- https://main.php.net/note/reject/130243
Search -- https://main.php.net/manage/user-notes.php