| Alex300 |
|
|---|---|
|
Судя по коду Вы загружаете изображение в память, а потом записываете на диск. Можно использовать функцию
if (@copy('http://someserver.com/somefile.jpg','./somefile.jpg')) {
echo "File copied from remote!";
} else {
$errors = error_get_last();
echo 'COPY ERROR: ' . $errors['type'];
echo '<br />\n' . $errors['message'];
}
Сэкономите память не загружая в нее данные, которые не собираетесь обрабатывать. Фактически файл при скачивании все равно будет загружен в память, но при сохранении на диск память будет освобождена. И это не расходует память, выделяемую скрипту на выполнение. // Проверяем, сохранилось ли изображение if (file_exists($fullImagePath)) Это лишнее. Функция PHP в режиме командной строки как правило не имеет ограничений по памяти и времени выполнения. Этот компонент позволяет запускать Cotonti из командной строки. Не накапливайте в памяти ненужные данные. После обработки каждого товара в памяти не должно оставаться "мусора". Ненужные более данные должны быть удалены или перезаписаны следующим товаром.
Модуль файлов используется в основном для удобной загрузки файлов и привязки их к объектам (страницы, посты, товары и т.п.) через веб интерфейс и для удобного вывода файлов в веб интерфейсе. Загрузка у Вас автоматизирована. Если вы не собираетесь выводить каталог товаров в браузер - особого смысла нет.
Если он все же нужен, у него нет отдельного метода для сохранения файла, который существует локально (надо бы сделать). Но можно написать примерно так:
// $fullImagePath - Путь к файлу локально из Вашего примера
$file = new File();
$file->original_name = $originalName; // Исходное имя файла (используется для отображения пользователю)
$file->user_id = $uid;
$file->source = 'shop';
$file->source_id = $product->id; // ID сохраненного товара
$file->ext = mb_strtolower(cot_filesGetExtension($fullImagePath));
$file->mime_type = mime_content_type($fullImagePath);
$file->is_img = 1;
$file->size = filesize($fullImagePath));
Cot::$db->beginTransaction();
try {
$fileId = $file->save();
if (!fileId) {
throw new Exception('Ошибка при сохранении');
}
// Path relative to files root directory
$relativeFileName = FileService::generateFileRelativePath($objFile);
$file->path = dirname($relativeFileName);
$file->file_name = basename($relativeFileName);
$file->filesystem_name = FileService::getFilesystemName($file->source, $file->source_field);
// Path relative to site root directory
$fileFullName = Cot::$cfg['files']['folder'] . '/' . $relativeFileName;
if (!@rename($fullImagePath, $fileFullName)) {
throw new Exception('Ошибка при сохранении');
}
$file->save();
Cot::$db->commit();
} catch(\Throwable $e) {
Cot::$db->rollBack();
// не удалось сохранить файл;
}
Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english... Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/ Відредаговано: Alex300 (09.11.2024 07:29, 1 рік тому) |