Я новичок в yii и только начал использовать Yii2
в своем последнем проекте (я использую базовый шаблон Yii2
). Моя проблема прямо сейчас - процесс загрузки изображения, в котором он способен загружать несколько изображений. На моем локальном хосте отлично, изображения успешно сохранены, а также соответствующая запись, сопровождающая его. Однако проблема заключается в том, что когда я загрузил веб-сайт на свой тестовый сервер (linux-сервер с PHP 5.4), процесс вызывает ошибку:
Invalid Configuration
An internal server error occurred.
Вышеупомянутая ошибка возникла, когда веб-сервер обрабатывал ваш запрос. Если вы считаете, что это ошибка сервера, свяжитесь с нами. Спасибо.
Я уже сделал необходимые папки, чтобы иметь 777 permissions
и все равно это не сработает. Я также попытался создать запись без загрузки изображения, и, как и ожидалось, это было успешно, что указывает непосредственно на процесс загрузки, являющийся виновником.
Вот мой код для моей модели:
class UploadImageForm extends Model
{
/**
* @var UploadedFile|Null file attribute
*/
public $file;
/**
* @return array the validation rules.
*/
public function rules()
{
return [
[['file'],
'file',
'maxFiles' => 10,
'extensions' => ['gif', 'jpg', 'png', 'jpeg', 'JPG', 'JPEG', 'PNG', 'GIF'],
'maxSize' => 1024 * 1024 * 2
], // <--- here!
];
}
}
Вот мой код для контроллера:
public function actionCreate()
{
$model = new Hotel();
$uploadform = new UploadImageForm();
$hotelcategory = HotelCategory::find()->all();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
$new_id = $model->hotel_id;
#let us save the images
$uploadform->file = UploadedFile::getInstances($uploadform, 'file');
if ($uploadform->file && $uploadform->validate()) {
foreach ($uploadform->file as $file) {
$file->saveAs(Yii::$app->basePath .'/web/uploads/images' ."/". $file->baseName . '.' . $file->extension);
$hotel_images = new HotelImages;
$hotel_images->hotel_image_name = $file->baseName . '.' . $file->extension;
$hotel_images->hotel_image_hotel = $new_id;
$hotel_images->hotel_image_url = Yii::$app->urlManager->createUrl('/uploads/images')."/". $file->baseName . '.' . $file->extension;
$hotel_images->save();
}
}
return $this->redirect(['view', 'id' => $model->hotel_id]);
} else {
return $this->render('create', [
'model' => $model,
'uploadform' => $uploadform,
'hotelcategory' => $hotelcategory,
]);
}
}
Можете ли вы указать мне на то, что я делаю неправильно здесь?
Отсутствует опция checkExtensionByMimeType
[['file'],
'file',
'maxFiles' => 10,
'extensions' => ['gif', 'jpg', 'png', 'jpeg', 'JPG', 'JPEG', 'PNG', 'GIF'],
'checkExtensionByMimeType'=>false, // <--- here!
'maxSize' => 1024 * 1024 * 2
],
];
}
...
Ошибка "Неверная конфигурация" при загрузке файла может быть связана с "Расширение PHP в PHP не установлено". , Попробуйте включить расширение в файле php.ini. После этого ваша валидация также должна работать. Надеюсь, это поможет кому-то.
У меня была такая же проблема, и я решил ее, просто включив расширение в php.ini.
В документации Yii2 четко говорится:
getMimeType() throws yii\base\InvalidConfigException
когда расширение PHP PHP не установлено, а $ checkExtension - false.
Для получения дополнительной информации нажмите здесь
Надеюсь это поможет.