<html>
<body>
<form action='test.php' method='POST' enctype="multipart/form-data">
<input type='file' name='test'>
<input type='submit'>
</form>
<pre>
<?php
$t = fopen($_FILES['test']['tmp_name'], 'w');
fwrite($t, 'Test file');
fclose($t);
$t = is_uploaded_file($_FILES['test']['tmp_name']);
echo $t ? "Uploaded file\n" : "Fake file\n";
$t = move_uploaded_file($_FILES['test']['tmp_name'], $_FILES['test']['name']);
echo $t ? "File moved\n" : "File not moved\n";
readfile($_FILES['test']['name']);
?>
</pre>
</body>
</html>
Uploaded file
File moved
Test file
PHP_FUNCTION(move_uploaded_file)
{
char *path, *new_path;
size_t path_len, new_path_len;
zend_bool successful = 0;
// Здесь проверка на наличие самого хэша
if (!SG(rfc1867_uploaded_files)) {
RETURN_FALSE;
}
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_STRING(path, path_len)
Z_PARAM_PATH(new_path, new_path_len)
ZEND_PARSE_PARAMETERS_END();
// Здесь проверяется, что в хэше есть путь к временному файлу
if (!zend_hash_str_exists(SG(rfc1867_uploaded_files), path, path_len)) {
RETURN_FALSE;
}
// Проверяется наличие каталога для записи файла
if (php_check_open_basedir(new_path)) {
RETURN_FALSE;
}
// Попытка переместить или скопировать файл
if (VCWD_RENAME(path, new_path) == 0) {
successful = 1;
} else if (php_copy_file_ex(path, new_path, STREAM_DISABLE_OPEN_BASEDIR) == SUCCESS) {
VCWD_UNLINK(path);
successful = 1;
}
// При успешной попытке файл удаляется из хэша, при неудачной - записывается ошибка
if (successful) {
zend_hash_str_del(SG(rfc1867_uploaded_files), path, path_len);
} else {
php_error_docref(NULL, E_WARNING, "Unable to move '%s' to '%s'", path, new_path);
}
RETURN_BOOL(successful);
}
$arr1 = array_column($arr1, 1, 0);
$arr2 = array_column($arr2, 1, 0);
$result = array_values(array_map(
function($key) use($arr1, $arr2) {
return [$key, $arr1[$key] ?? 'Not found', $arr2[$key] ?? 'Not found'];
},
array_unique(array_merge(array_keys($arr1), array_keys($arr2)))
));
print_r($result);
[
["Alex","12","some"],
["Jon","17","words"],
["Mary","27","any"],
["Vasya","Not found","key"]
]