PHP5 is not capable of addressing files with multi-byte characters in their names at all (including Arabic language).
<?php
if(isset($_POST['submit'])){
$Arabic = new \ArPHP\I18N\Arabic();
// Continue only if the file was uploaded via HTTP POST
if (is_uploaded_file($_FILES['image']['tmp_name'])) {
// Is file size less than 1 MB = 1,048,576 Byte
if ($_FILES['image']['size'] < 1048576) {
// Detect MIME Content-type for a file
$mime = mime_content_type($_FILES['image']['tmp_name']);
// List of accepted MIME Content-type
$images = array('image/jpeg', 'image/gif', 'image/png', 'image/svg+xml');
if (in_array($mime, $images)) {
// PHP5 is not capable of addressing files with multi-byte characters in their names at all.
// This is why we use Transliteration functionality in Arabic class
$filename = trim($Arabic->ar2en($_FILES['image']['name']));
// Moves an uploaded file to a new location
move_uploaded_file ($_FILES['image']['tmp_name'], $dir.DIRECTORY_SEPARATOR.$filename);
} else {
echo '<h3>You can upload image file only (i.e. gif, jpg, png, and svg)!</h3>';
}
} else {
echo '<h3>You can not upload file bigger than 1MB!</h3>';
}
} else {
echo '<h3>You have to select file first to upload it!</h3>';
}
}
?>
<form action="safe_upload.php" method="post" enctype="multipart/form-data">
<input name="image" type="file" size="60">
<input name="submit" type="submit" value="Upload">
</form><br />