У меня очень странное поведение при загрузке изображения в несколько папок. Я пытаюсь добавить загруженные изображения в 3 разные папки:
- / userimg / original (только исходное изображение)
- / userimg / 100x100 (ширина 100px и высота 100px + сделать обрезку)
- / userimg / 1000x1000 (максимальная ширина 1000 пикселей и максимальная высота 1000 пикселей)
Мой сценарий заполняет первую папку всеми выбранными изображениями (в $ _FILES), но другой папки не заполнены вообще. Если я сначала помещу папку «100x100» в массив измерений, то это папка, которая заполнена изображениями, а остальные нет. Я отлаживаю уже 2 дня и немного нервничаю: P
Вот мой сценарий:
<?php
App::uses('Folder', 'Utility');
class UserImage extends CoasterCmsAppModel
{
public $useTable = false;
/** @var array $dimensions Dimensions for photo resizing. */
public $dimensions = array(
array(
'width' => 999999,
'height' => 999999,
'crop' => false,
'autocrop' => false,
'quality' => 100,
'folder' => 'original'
),
array(
'width' => 100,
'height' => 100,
'crop' => true,
'autocrop' => true,
'quality' => 60,
'folder' => '100x100'
),
array(
'width' => 1000,
'height' => 1000,
'crop' => false,
'autocrop' => true,
'quality' => 80,
'folder' => '1000x1000'
)
);
public function uploadImages($images) {// this function is called to process the images. $images = $_FILES
if (!$images || !is_array($images)) {
throw new NotFoundException(
__('Invalid data.')
);
}
App::import('Component', 'ImageCropResize.Image');
$image = new ImageComponent(new ComponentCollection);
$userImgFolder = WWW_ROOT . 'userimg' . DS;
foreach ($this->dimensions as $dimension) {
$userImgDimensionFolder = $userImgFolder . $dimension['folder'] . DS;
$folder = new Folder($userImgDimensionFolder);
if (is_null($folder->path)) {
$folder->create($userImgDimensionFolder, 0755);
}
}
$jsonArray = [];
foreach ($images['name'] as $key => $imageName) {
$imageNameCleaned = basename($imageName);
$imageNameCleaned = str_replace(' ', '-', $imageNameCleaned);
$imageNameCleaned = strtolower($imageNameCleaned);
$imageNameCleaned = time() . '-' . $imageNameCleaned;
foreach ($this->dimensions as $dimension) {
$userImgDimensionFolder = $userImgFolder . $dimension['folder'] . DS;
$imagePath = $userImgDimensionFolder . $imageNameCleaned;
move_uploaded_file($images['tmp_name'][$key], $imagePath);
}
}
}
}
Дополнительная информация: вот Пример моего массива $ images, загруженного в функцию uploadImages:
array(
'name' => array(
(int) 0 => '1.jpg',
(int) 1 => '2.jpg',
(int) 2 => '3.jpg',
(int) 3 => '4.jpg',
(int) 4 => '5.jpg',
(int) 5 => '6.jpg',
(int) 6 => '7.JPG',
(int) 7 => '8.jpg'
),
'type' => array(
(int) 0 => 'image/jpeg',
(int) 1 => 'image/jpeg',
(int) 2 => 'image/jpeg',
(int) 3 => 'image/jpeg',
(int) 4 => 'image/jpeg',
(int) 5 => 'image/jpeg',
(int) 6 => 'image/jpeg',
(int) 7 => 'image/jpeg'
),
'tmp_name' => array(
(int) 0 => 'C:\xampp\tmp\phpB877.tmp',
(int) 1 => 'C:\xampp\tmp\phpB897.tmp',
(int) 2 => 'C:\xampp\tmp\phpB898.tmp',
(int) 3 => 'C:\xampp\tmp\phpB8A9.tmp',
(int) 4 => 'C:\xampp\tmp\phpB8AA.tmp',
(int) 5 => 'C:\xampp\tmp\phpB8AB.tmp',
(int) 6 => 'C:\xampp\tmp\phpB8AC.tmp',
(int) 7 => 'C:\xampp\tmp\phpB8AD.tmp'
),
'error' => array(
(int) 0 => (int) 0,
(int) 1 => (int) 0,
(int) 2 => (int) 0,
(int) 3 => (int) 0,
(int) 4 => (int) 0,
(int) 5 => (int) 0,
(int) 6 => (int) 0,
(int) 7 => (int) 0
),
'size' => array(
(int) 0 => (int) 4498964,
(int) 1 => (int) 372372,
(int) 2 => (int) 219612,
(int) 3 => (int) 15807,
(int) 4 => (int) 91903,
(int) 5 => (int) 56157,
(int) 6 => (int) 138041,
(int) 7 => (int) 81819
)
)
Есть мысли, чтобы направить меня в правильном направлении? И да, я действительно ценю некоторые дополнительные советы и подсказки о моем PHP коде;)
Редактирование 1 после обратной связи от Dorvalla
Вот мой новый массив $ sizes, но это, кажется, не работает:
public $dimensions = array(
0 => array(
'width' => 999999,
'height' => 999999,
'crop' => false,
'autocrop' => false,
'quality' => 100,
'folder' => 'original'
),
1 => array(
'width' => 100,
'height' => 100,
'crop' => true,
'autocrop' => true,
'quality' => 60,
'folder' => '100x100'
),
2 => array(
'width' => 1000,
'height' => 1000,
'crop' => false,
'autocrop' => true,
'quality' => 80,
'folder' => '1000x1000'
)
);