一段时间后,我和我的一些朋友开始创建我们自己的文件托管/共享服务,我们在内部(私下)使用。这不是公共服务器,也不是仅供我们使用的公共服务器。
整个事情都遵循以下规范。
使用文件需要一点点,更不用说php.ini必须重写一下,允许将近1 GB的内存专用于脚本并将执行时间延长到400秒。
问题:
因此规格足以处理负载,但有更好的方法来优化下面提供的代码,使其能够运行8000多张图像并且不会滞后于系统?更不用说在浏览500多个文件后停止了。
这是实际脚本的代码。
function make_thumb($src,$dest,$desired_width) {
/* read the source image */
$de_width = 100;
$source_image = imagecreatefromjpeg($src);
$width = imagesx($source_image);
$height = imagesy($source_image);
/* find the "desired height" of this thumbnail, relative to the desired width */
$desired_height = floor($height*($desired_width/$width));
/* create a new, "virtual" image */
$virtual_image = imagecreatetruecolor($desired_width,$desired_height);
/* copy source image at a resized size */
imagecopyresampled($virtual_image,$source_image,0,0,0,0,$desired_width,$desired_height,$width,$height);
/* create the physical thumbnail image to its destination */
imagejpeg($virtual_image,$dest,75);
}
function get_files($images_dir,$exts = array('jpg','png','gif','jpeg')) {
$files = array();
if($handle = opendir($images_dir)) {
while(false !== ($file = readdir($handle))) {
$extension = strtolower(get_file_extension($file));
if($extension && in_array($extension,$exts)) {
$files[] = $file;
}
}
closedir($handle);
}
return $files;
}
/* function: returns a file's extension */
function get_file_extension($file_name) {
return substr(strrchr($file_name,'.'),1);
}
$images_dir = 'data/'.$key.'/photos/';
$thumbs_dir = 'data/'.$key.'/photos/f/';
$thumbs_width = 100;
$images_per_row = 6;
/** generate photo gallery **/
$image_files = get_files($images_dir);
if(count($image_files)) {
$index = 0;
foreach($image_files as $index=>$file) {
$index++;
$thumbnail_image = $thumbs_dir.$file;
if(!file_exists($thumbnail_image)) {
$extension = get_file_extension($thumbnail_image);
if($extension) {
fm_thumb($images_dir.$file,$thumbnail_image,$thumbs_width);
}
}
echo '<a href="',$images_dir.$file,'" rel="gallery"><img src="',$thumbnail_image,'" class="photo-link"/></a>';
if($index % $images_per_row == 0) { echo '<div class="clear"></div>'; }
}
echo '<div class="clear"></div>';
}
else {
echo '<p>There are no images in this gallery.</p>';
}
答案 0 :(得分:0)
您可以使用可以在服务器上安装的ImageProcessor,或者在任何编译语言中编写一个,它会比php快,并且您可以根据您使用的应用程序限制资源使用。
您可以使用shell_exec('console command here')
来完成此过程。