Вьюшка
<?php $form = ActiveForm::begin([
'options' => ['enctype'=>'multipart/form-data']
]); ?>
<?=$form->field($model, 'image')->fileInput() ?>
<?=Html::submitButton('Update') ?>
<?php ActiveForm::end(); ?>
Валидация в модели:
public $image;
public function rules()
{
return [
[['image'], 'image', 'types' => 'png,jpg', 'skipOnEmpty' => false],
];
}
Контроллер
{
$dir = Yii::getAlias('@frontend/../web/uploads/test/');
$uploaded = false;
$model = new Test();
if ($model->load($_POST)) {
//$file = UploadedFile::getInstances($model, 'image');
$file = UploadedFile::getInstance($model, 'image');
$model->image = $file;
if ($model->validate()) {
$uploaded = $file->saveAs( $dir . $model->image->name );
}
}
return $this->render('test',[
'model' => $model,
'uploaded' => $uploaded,
'dir' => $dir,
]);
}
Итак, все работает все отлично грузит. И при этом возникло 3 вопроса и одна большая проблема:
1) Есть ли такой валидатор для нескольких изображений ? Например, я хочу загрузить 10 картинок, нужно будет прогонять каждую через
$model->validate(), присваивая значения
image, или можно как-то проще ?
2) Безопасен ли коробочный валидатор для изображений? То есть, смогут ли пройти изображения со вредоносным кодом внутри (всякие там евалы и тп.) ?
3) Как сделать транслит из русских символов в забугорные, есть ли фильтр из коробки?
И большая проблема:
К примеру, я хочу загрузить изображение, создать уменьшенную копию и наложить водный знак.
Я подключил плагин
imagine и добавил тестовый пример из документации:
if ($model->validate()) {
$uploaded = $file->saveAs( $dir . $model->image->name );
Image::thumbnail($dir.$model->image->name, 120, 120)->save($dir.'thumb-test-image.jpg', ['quality' => 50]);
}
Каково же было мое удивление, когда эта штука ложит апач. При этом нет никаких логов в php и yii2, только логи апача, да и те непонятные:
[Mon Apr 28 20:07:27.348978 2014] [mpm_winnt:notice] [pid 5284:tid 336] AH00428: Parent: child process 1304 exited with status 3221226519 -- Restarting.
[Mon Apr 28 20:07:27.533998 2014] [bw:notice] [pid 5284:tid 336] mod_bw : Memory Allocated 0 bytes (each conf takes 40 bytes)
[Mon Apr 28 20:07:27.533998 2014] [bw:notice] [pid 5284:tid 336] mod_bw : Version 0.92 - Initialized [0 Confs]
[Mon Apr 28 20:07:27.533998 2014] [bw:notice] [pid 5284:tid 336] mod_bw : Supported resolution for Timers [ Min: 1 Max: 1000000 ]
[Mon Apr 28 20:07:27.533998 2014] [bw:notice] [pid 5284:tid 336] mod_bw : Enabling High resolution timers [ 1 ms ]
[Mon Apr 28 20:07:28.969246 2014] [ssl:warn] [pid 5284:tid 336] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]
[Mon Apr 28 20:07:38.281074 2014] [ssl:warn] [pid 1892:tid 356] AH01909: RSA certificate configured for test.ru:443 does NOT include an ID which matches the server name
[Mon Apr 28 20:07:38.282074 2014] [ssl:warn] [pid 1892:tid 356] AH01909: RSA certificate configured for tdd.com:443 does NOT include an ID which matches the server name
...
[Mon Apr 28 20:07:38.292076 2014] [ssl:warn] [pid 1892:tid 356] AH01909: RSA certificate configured for default:443 does NOT include an ID which matches the server name
[Mon Apr 28 20:07:38.292076 2014] [ssl:warn] [pid 1892:tid 356] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Mon Apr 28 20:07:38.389088 2014] [bw:notice] [pid 1892:tid 356] mod_bw : Memory Allocated 0 bytes (each conf takes 40 bytes)
[Mon Apr 28 20:07:38.389088 2014] [bw:notice] [pid 1892:tid 356] mod_bw : Version 0.92 - Initialized [0 Confs]
[Mon Apr 28 20:07:38.389088 2014] [bw:notice] [pid 1892:tid 356] mod_bw : Supported resolution for Timers [ Min: 1 Max: 1000000 ]
[Mon Apr 28 20:07:38.390088 2014] [bw:notice] [pid 1892:tid 356] mod_bw : Enabling High resolution timers [ 1 ms ]
[Mon Apr 28 20:07:38.905153 2014] [ssl:warn] [pid 1892:tid 356] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]
[Mon Apr 28 20:07:38.905153 2014] [ssl:warn] [pid 1892:tid 356] AH01909: RSA certificate configured for test.ru:443 does NOT include an ID which matches the server name
[Mon Apr 28 20:07:38.906153 2014] [ssl:warn] [pid 1892:tid 356] AH01909: RSA certificate configured for tdd.com:443 does NOT include an ID which matches the server name
...
[Mon Apr 28 20:07:38.914155 2014] [ssl:warn] [pid 1892:tid 356] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Mon Apr 28 20:07:39.417240 2014] [mpm_winnt:notice] [pid 1892:tid 356] AH00354: Child: Starting 32 worker threads.