File Upload Tutorial
HTML
<form enctype="multipart/form-data" action="action.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
<input name="userfile" type="file" />
<input type="submit" value="Go" />
</form>
action.php
yükleme işleyecek bir PHP dosyası adıdır (aşağıda gösterilmiştir)
MAX_FILE_SIZE
türü ile giriş hemen önce yer almalıdır file
. Bu değer kolayca böylece güvenerek edilmemelidir istemci üzerinde manipüle edilebilir. Ana yararı bunu yükledim önce kendi dosya çok büyük olduğunu, erken uyarı ile kullanıcıya sunmaktır.
- Sen türü
file
ile giriş adını değiştirmek, ancak herhangi bir boşluk içermediğinden emin olabilirsiniz. Ayrıca (aşağıda) PHP dosyasında karşılık gelen değerini güncelleştirmek.
PHP
<?php
$uploaddir = "/www/uploads/";
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "Success.\n";
} else {
echo "Failure.\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>
Yükleme-için klasörün aksi takdirde bir PHP komut dosyası yüklemek ve sunucuya üzerine onu çalıştırmak mümkün olacağını, HTTP üzerinden erişebileceği bir yerde yer olmamalıdır.
Değerini yazdırma $_FILES
oluyor ne gibi bir ipucu verebilir. Örneğin:
Array
(
[userfile] => Array
(
[name] => Filename.ext
[type] =>
[tmp_name] =>
[error] => 2
[size] => 0
)
)
Bu yapı dosyanın adı, MIME tipi, büyüklüğü ve hata kodu olarak bazı bilgiler verir.
Error Codes
0 Indicates that there was no errors and file has been uploaded successfully
1 Indicates that the file exceeds the maximum file size defined in php.ini. If you would like to change the maximum file size, you need to open your php.ini file, identify the line which reads: upload_max_filesize = 2M and change the value from 2M (2MB) to whatever you need
2 Indicates that the maximum file size defined manually, within an on page script has been exceeded
3 Indicates that file has only been uploaded partially
4 Indicates that the file hasn't been specified (empty file field)
5 Not defined yet
6 Indicates that there´s no temporary folder
7 Indicates that the file cannot be written to the disk
php.ini
Configuration
Büyük dosyalar ile bu kurulumunu çalıştırırken hatalar alabilirsiniz. Bu tuşların için php.ini
dosyasını kontrol edin:
max_execution_time = 30
upload_max_filesize = 2M
Uygun olarak bu değerleri artırmaya yardımcı olabilir. Apache kullanırken, bu dosyaya değişiklikleri yeniden başlatma gerektirir.
Yüklenip gibi dosya tmp dizinine yazılır gibi maksimum bellek izin verilen değer (via set memory_limit
) burada bir rol oynamıyor. Tmp dizininin konumu isteğe upload_tmp_dir
ile kontrol edilir.
Checking file mimetypes
Siz kullanıcı yükleme şeyin filetype kontrol etmelisiniz - en iyi uygulama izin filetypes listesine karşı doğrulamak için. Herhangi bir dosyayı sağlayan potansiyel bir risk olduğu a user could potentially upload PHP code to the server and then run it.
Mime türlerini doğrulamak için çok yararlı fileinfo
extension (that supersedes the older mime_content_type
a> işlevini) kullanabilirsiniz.
// FILEINFO_MIME set to return MIME types, will return string of info otherwise
$fileinfo = new finfo(FILEINFO_MIME);
$file = $fileinfo->file($_FILE['filename']);
$allowed_types = array('image/jpeg', 'image/png');
if(!in_array($file, $allowed_types))
{
die('Files of type' . $file . ' are not allowed to be uploaded.');
}
// Continue
More Information
Sen PHP.net manual de dosya yükleme işleme hakkında daha fazla bilgi edinebilirsiniz.
For PHP 5.3+
//For those who are using PHP 5.3, the code varies.
$fileinfo = new finfo(FILEINFO_MIME_TYPE);
$file = $fileinfo->file($_FILE['filename']['tmp_name']);
$allowed_types = array('image/jpeg', 'image/png');
if(!in_array($file, $allowed_types))
{
die('Files of type' . $file . ' are not allowed to be uploaded.');
}
// Continue
More Information
Sen PHP.net documentation de FILEINFO_MIME_TYPE daha okuyabilirsiniz.