Tek bir dizin çok fazla dosya depolama sorunlarına yol açabilir. performansı sadece belli bir noktada, ama yaşayacaktır (benden çok daha fazla deneyime sahip) bir arkadaşım bazı yedekleme programları ile bu sorunları olduğunu söyledi.
bu yüzden binlerce görüntü ben hep dizindeki dosyaları 256 alt dizinleri oluşturulur ve depolanan saklamak zorunda files/{id mod 256}/{myfile_id}.jpg
korsanlara karşı kendinizi korumak için orada yapmak için bir çok şey vardır ve (hacker büyük olasılıkla root erişimi elde etmek için çalışacağız ve sonra veri zaten güvenli değil çünkü) hiçbir şey güvende olacak.
1) so ... regular backups. period.
2) audit log files (who what when). that's not security per se, but may help you in discovering security holes and fix bugs
3) set the file permissions accordingly (important on shared servers without chroot-ing)
4) double-check if an action really is done by the right user. it must be impossible to do harm by guessing the url.
Eğer dosya isimleri ve yolları-gizli yapmak istiyorsanız daha fazla var. örneğin doğrudan bu görüntüyü veren bir komut ama, resme link değil mümkündür. Bu durumda size webroot dışında dosyaları saklamak mümkün olacaktır (ayrıca, sizin dosya daha bağımsız) (sonunda kod bakın).
bir adım daha görüntüleri tanımlamak auto_increment id değerlerini önlemek olacaktır. (youtube ve flickr bunu afaik) daha iyi id bir ilişki olmadan benzersiz bir karma (md5(mt_rand());
) kullanın ve veritabanında bu saklayın.
geçerek çirkin php-yalancı gibi bir şey olurdu:
<?php
if (isset($_REQUEST['img'])) {
$hash = $_REQUEST['img']);
if (($res = getImageByHash($hash)) !== false) {
list($id, $name, $mimetype) = $res;
$path = '../images/' . ($id % 256) . '/' . $name;
if (file_exists($path)) {
header('Content-type: ' . $mimetype); // e.g. image/png
readfile($path);
exit();
}
}
}
// if any error happened, then 404 - it's dirty
header("HTTP/1.0 404 Not Found");
echo 'sorry, we couldn\'t find this image';
?>
getImageByHash() would query the db.
this solution is slower, because the webserver can't serve images directly anymore.
ve: Ben oldukça veritabanında görüntüleri saklamak istemiyorum. ihracatın büyük alacağı, bir ağrı yedeklemeler.