这样的情况。我正在为我的母亲制作一个网站,她要求人们可以在完成工作后为她留下评论。一般来说,我使用最简单的方法来上传照片,结果如下:当上传最大 1mb 的照片时,没有问题。(我将限制器更改为 5mb)当上传超过 1mb 时,显示上传图像并用照片名称填充 INPUT 的脚本会陷入永恒的 loding,尽管这不会以任何方式发生......而且文件本身是上传到主机没有问题,但不是在1024px处被截断,而是上传原创。但!如果我们以 PNG 格式而不是 jpg 格式上传,那么一切正常。
如果在手机的帮助下可以正常运行。还是下载rar,怎么限制呢?
这是一个页面,您可以在其中看到作品https://cats-dogs.com.ua/portfolio
这是文件中的内容 ( https://cats-dogs.com.ua/portfolio )
<script type="text/javascript">
function hideBtn(){
$('#upload').hide();
$('#res').html("<center><div class='cssload-loader'>Идет загрузка файла</div></center>");
}
function handleResponse(mes) {
$('#upload').show();
if (mes.errors != null) {
$('#res').html("<p>Возникли ошибки во время загрузки файла: </p>" + mes.errors);
}
else {
$('#res').html("<p>Спасибо! Фото загружено. Осталось написать и отправить комментарий :)</p><p style='text-align:left;'><img src='https://cats-dogs.com.ua/images/new/" + mes.name + "' width='220'></p><p><input type='hidden' id='img' name='img' value='" + mes.name + "' /></p>");
$('.img input').val(mes.name);
$('#foto').hide();
}
}
$(function() {
$("#form").load("form-img-comm.php");
});
</script>
<div id="form"></div>
<iframe id="hiddenframe" name="hiddenframe" style="width:0px; height:0px; border:0px"></iframe>
<div id="res"></div>
<p class="img">
<input value="" type="hidden" name="photoreport">
</p>
在单独的文件中形成:
<form action="uploadimgcomm.php" method="post" target="hiddenframe" enctype="multipart/form-data" onsubmit="hideBtn();">
<input type="file" id="userfile" name="userfile" />
<input type="submit" name="upload" id="upload" value="Загрузить" />
</form>
以及加载器文件本身:
<?php
if(isset($_POST['upload'])){
//Список разрешенных файлов
$whitelist = array(".jpg", ".JPG", ".png");
$data = array();
$error = true;
//Проверяем разрешение файла
foreach ($whitelist as $item) {
if(preg_match("/$item\$/i",$_FILES['userfile']['name']) && $_FILES['userfile']['size'] <= 5242880 ) $error = false;
}
if(!$error) {
$folder = 'images/';//директория в которую будет загружен файл
if($_FILES['userfile']['tmp_name']){
$filename = $_FILES['userfile']['name'];
$source = $_FILES['userfile']['tmp_name'];
$target = $folder . $filename;
move_uploaded_file($source, $target);
$final_width_of_image = 1024;
//$final_width_of_thumbs = 750;
if(preg_match('/[.](jpg)$/', $filename)) {
$im = imagecreatefromjpeg($folder . $filename);
} else if (preg_match('/[.](jpeg)$/', $filename)) {
$im = imagecreatefromjpeg($folder . $filename);
} else if (preg_match('/[.](JPG)$/', $filename)) {
$im = imagecreatefromjpeg($folder . $filename);
} else if (preg_match('/[.](JPEG)$/', $filename)) {
$im = imagecreatefromjpeg($folder . $filename);
} else if (preg_match('/[.](gif)$/', $filename)) {
$im = imagecreatefromgif($folder . $filename);
} else if (preg_match('/[.](GIF)$/', $filename)) {
$im = imagecreatefromgif($folder . $filename);
} else if (preg_match('/[.](png)$/', $filename)) {
$im = imagecreatefrompng($folder . $filename);
}
$ox = imagesx($im);
$oy = imagesy($im);
if ($ox > 1024) {
$nx = $final_width_of_image;
$ny = floor($oy * ($final_width_of_image / $ox));
}
$nm = imagecreatetruecolor($nx, $ny);
imagecopyresampled($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);
imagejpeg($nm, $folder . $filename);
if($filename){
$data = $_FILES['userfile'];
}
else {
$data['errors'] = "Во время загрузки файла произошла ошибка";
}
}
else {
$data['errors'] = "Файл не загружен";
}
}
else{
$data['errors'] = 'Вы загружаете запрещенный тип файла или картинка слишком большая (макс. размер 5мб)';
}
//Формируем js-файл
$res = '<script type="text/javascript">';
$res .= "var data = new Object;";
foreach($data as $key => $value){
$res .= 'data.'.$key.' = "'.$value.'";';
}
$res .= 'window.parent.handleResponse(data);';
$res .= "</script>";
echo $res;
}
else{
die("ERROR");
}
?>
白名单变量对你没用,你创建它,但为什么不清楚,因为你有一个完全无法理解的正则表达式检查。
你需要像这样修改你的白名单
然后,将文件上传到服务器后,根据我的记忆裁剪大小,它是这样完成的
下面的代码是一个例子,需要调整
使用想象
应该删除正则表达式格式检查。