我是php的新手,直到现在我一直在用我有限的知识,阅读和谷歌的帮助创建一个网站。我已经谈到了上传图片的观点,我真的很想了解最佳做法,而不是让事情变得非常低效。
我的项目网站允许用户上传图像(设置了多个标记),一旦上传(并显示在另一页面上),这些图像中的一些图像不会以正确的旋转显示。我已经阅读了exif-read-data(http://www.php.net/manual/en/function.exif-read-data.php)。 在我的网站上,我访问图像标题,找到方向...然后使用一些代码(我发现解决了iphone的问题)我将每个图像加载到内存中,旋转并保存。
我的php页面包含允许用户通过单个文件上传按钮添加多个图像的表单。表单操作将它定向到process_post.php,它处理从db插入到页面重定向的所有内容。
代码段(仅适用于图片部分)
//put all the uploaded images into an array
$files=array();
$fdata=$_FILES['upfile1'];
for($i=0;$i<count($fdata['name']);++$i){
$files[]=array(
'name' =>$fdata['name'][$i],
'type' => $fdata['type'][$i],
'tmp_name'=>$fdata['tmp_name'][$i],
'error' => $fdata['error'][$i],
'size' => $fdata['size'][$i]
);
}
foreach ($files as $file) {
if ($file['error'] == 0) {
$directory = 'C:\inetpub\wwwroot\site\form_uploads\\';
$dbimagepath = 'form_uploads/';
$filename = $file['name'];
//ensure the filename is unique//
while (file_exists($directory . $filename)){$filename = mt_rand() . $filename;}
$fullpath = $directory . $filename;
$image = imagecreatefromstring(file_get_contents($file['tmp_name']));
$exif = exif_read_data($file['tmp_name']);
if (!empty($exif['Orientation'])){
switch($exif['Orientation'])
{
case 3: // 180 rotate left
$image=imagerotate($image, 180, -1);
break;
case 6: // 90 rotate right
$image=imagerotate($image, -90, -1);
break;
case 8: // 90 rotate left
$image=imagerotate($image, 90, -1);
break;
}
}
if (imagejpeg($image, $fullpath, 100)){
//next database insert
效率 既然图像上传大小太大(即我使用的是5x 9MB图像并且速度很慢)是否有更好的方法来实现这一结果,或者当我开始使用我的托管空间时速度是否会提高?
真的很感谢一些专业的反馈,谢谢大家!