Перейти к содержимому
Поиск
Php Разработка

PHP: полный мануал с примерами, функциями и ООП

Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Александр НекрасовИзменено:
Практический мануал PHP: от переменных и функций к объектной модели интернет-магазина
PHP 8.5.11468 глав6256 карточек справочника
Дерево руководства

Глава 429 · После первых изображений, файлов и объектов

Gmagick: имена изображения и настоящий путь файла

Прочитать вход, отличить имя последовательности от текущего кадра и сохранить квитанцию реального файла.

Открыть файл методом read и сохранить превью

Сервис превью получает файл с диска и должен сохранить доступную браузеру копию. Начнём с собственной цветной мишени 320×200: полосы показывают цветные границы, градиент — плавные тона, чёрно-белый участок — мелкие детали. Путь данных здесь простой: encoding.ppm → объект Gmagick → preview.png. Чтение не является художественным фильтром, поэтому рисунок сохраняется.

Прочитанный PPM сохранён в PNG: цветные полосы, серый градиент и мелкие детали
Прочитанный PPM сохранён в PNG: цветные полосы, серый градиент и мелкие детали
$image = new Gmagick();
$image->read(__DIR__ . "/encoding.ppm");
$loaded = $image->getImageFilename();
$image->setImageFormat("PNG");
$image->writeImage(__DIR__ . "/preview.png");

new Gmagick создаёт объект; read получает строковый путь и читает изображение. __DIR__ — папка текущей программы, точка соединяет её с именем файла. Стрелка -> вызывает метод у объекта. Метод read возвращает тот же Gmagick, а не содержимое файла строкой. getImageFilename читает имя текущего изображения. После явного writeImage оно в проверенной версии меняется на путь записанного файла, поэтому исходное имя сохраняем до записи.

Открыть файл методом read и сохранить превьюСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__.'/gm100-export-fixture.php';
gmRestore();
$image=new Gmagick();$returned=$image->read(__DIR__.'/encoding.ppm');
$loadedName=basename($image->getImageFilename());$signature=$image->getImageSignature();
$image->setImageDepth(8);$image->setImageFormat('PNG');$image->writeImage(__DIR__.'/gm100-export-read-preview.png');
$afterName=basename($image->getImageFilename());

gmReport('gm100-export-read',["gmagick.read", "gmagick.getimagefilename"],["gm100-export-read-preview.png"],['same_object'=>$returned===$image,'input_name'=>$loadedName==="encoding.ppm",'explicit_output_name'=>$afterName==="gm100-export-read-preview.png",'pixels_kept'=>$signature===$image->getImageSignature()],$errors??[],['loaded_basename'=>$loadedName,'written_basename'=>$afterName],[]);
echo "read: input=encoding.ppm output=preview.png same-object=yes\n";
Ожидаемый результат
read: input=encoding.ppm output=preview.png same-object=yes

Распакуйте архив и выполните php example.php. Вложенные .b64 содержат все входы; helper проверяет SHA256 и восстанавливает PPM. gmPng сохраняет копию в PNG8. gmJpegHeader читает SOF0/SOF2 и коэффициенты компонентов из настоящего JPEG, gmPngInterlace читает IHDR. metrics.json содержит результаты и проверки. JPEG/PNG и квитанции появятся после выполнения; исходные файлы не берутся из внешней папки.

Полная программа создаёт PNG и проверяет исходное имя, новый путь и сохранность пикселей. Упражнение: исходник лежит рядом с программой, но её запустили из другой папки. Решение: использовать __DIR__, а не полагаться на текущий рабочий каталог процесса. Если файл не существует или декодер не может прочитать данные, обрабатывайте GmagickException; один setter имени ничего не загрузит.

Опора для первых шагов: первое изображение Gmagick, путь и файл, объект и метод.

Как выбирать текущий кадр: навигация по последовательности.

Связанные шаги: имена и путь записи, кодирование JPEG/PNG, окружение и рабочий объект, качество, метаданные и глубина файла.

Задать имя последовательности без переименования файла

У задания может быть своё плановое имя, а у загруженного кадра — имя исходного файла. Эти две строки хранятся отдельно. В примере planned-batch.png относится к объекту последовательности, encoding.ppm — к текущему изображению. На странице остаётся та же мишень: изменение имени не изменяет пиксели.

Имя planned-batch.png относится к объекту; на диске записан отдельный preview.png
Имя planned-batch.png относится к объекту; на диске записан отдельный preview.png
$image = new Gmagick();
$image->setFilename("planned-batch.png");
$image->readImage(__DIR__ . "/encoding.ppm");
$sequenceName = $image->getFilename();
$frameName = $image->getImageFilename();

setFilename по официальному контракту задаёт имя перед чтением или записью, getFilename возвращает имя последовательности. В свежем объекте нашего runtime оно пустое; после setter/readImage остаётся planned-batch.png. У текущего кадра getImageFilename возвращает путь encoding.ppm. Сам setFilename не создаёт файл planned-batch.png и не переименовывает существующий. Полная программа записывает preview отдельным явным путём.

Задать имя последовательности без переименования файлаСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__.'/gm100-export-fixture.php';
gmRestore();
$image=new Gmagick();$initial=$image->getFilename();$ret=$image->setFilename('planned-batch.png');
$planned=$image->getFilename();$image->readImage(__DIR__.'/encoding.ppm');
$frame=basename($image->getImageFilename());gmPng($image,'gm100-export-sequence-name-preview.png');

gmReport('gm100-export-sequence-name',["gmagick.setfilename", "gmagick.getfilename", "gmagick.getimagefilename"],["gm100-export-sequence-name-preview.png"],['initial_empty'=>$initial==="",'sequence_name_roundtrip'=>$ret===$image&&$planned==="planned-batch.png"&&$image->getFilename()===$planned,'frame_name_separate'=>$frame==="encoding.ppm",'no_implicit_file'=>!file_exists(__DIR__."/planned-batch.png")],$errors??[],[],[]);
echo "names: sequence=planned-batch.png frame=encoding.ppm setter-writes=no\n";
Ожидаемый результат
names: sequence=planned-batch.png frame=encoding.ppm setter-writes=no

Распакуйте архив и выполните php example.php. Вложенные .b64 содержат все входы; helper проверяет SHA256 и восстанавливает PPM. gmPng сохраняет копию в PNG8. gmJpegHeader читает SOF0/SOF2 и коэффициенты компонентов из настоящего JPEG, gmPngInterlace читает IHDR. metrics.json содержит результаты и проверки. JPEG/PNG и квитанции появятся после выполнения; исходные файлы не берутся из внешней папки.

Упражнение: хотите сохранить результат в папку exports. Решение: построить разрешённый путь и передать его writeImage. Не считать значение getFilename доказательством, что файл уже существует. Имена последовательности особенно полезно отличать от имён отдельных кадров при переходе к анимациям.

Как выбирать текущий кадр: навигация по последовательности.

Связанные шаги: имена и путь записи, кодирование JPEG/PNG, окружение и рабочий объект, качество, метаданные и глубина файла.

Изменить имя кадра, сохранив его пиксели

Дадим текущему изображению понятную внутреннюю метку catalog-frame.png. Этот setter меняет строку имени кадра, а не имя файла на диске. Поэтому после него мишень выглядит точно так же, encoding.ppm продолжает существовать, а catalog-frame.png сам не появляется.

Пиксели не изменились после setImageFilename: это настройка имени текущего изображения
Пиксели не изменились после setImageFilename: это настройка имени текущего изображения
$image = new Gmagick(__DIR__ . "/encoding.ppm");
$image->setImageFilename("catalog-frame.png");
$label = $image->getImageFilename();
echo $label;

setImageFilename принимает обязательную строку и возвращает Gmagick. getImageFilename без аргументов читает имя текущего изображения; в многостраничном объекте это имя выбранного кадра. В полной программе фиксируется пиксельная подпись до setter, затем сравнивается после него. PNG-превью сохраняется из копии, чтобы демонстрационная запись не перезаписала имя исследуемого объекта.

Изменить имя кадра, сохранив его пикселиСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__.'/gm100-export-fixture.php';
gmRestore();
$image=new Gmagick(__DIR__.'/encoding.ppm');$before=$image->getImageSignature();
$ret=$image->setImageFilename('catalog-frame.png');$name=$image->getImageFilename();
gmPng($image,'gm100-export-frame-name-preview.png');

gmReport('gm100-export-frame-name',["gmagick.setimagefilename", "gmagick.getimagefilename"],["gm100-export-frame-name-preview.png"],['frame_name_roundtrip'=>$ret===$image&&$name==="catalog-frame.png",'pixels_kept'=>$image->getImageSignature()===$before,'original_file_exists'=>file_exists(__DIR__."/encoding.ppm"),'not_renamed_on_disk'=>!file_exists(__DIR__."/catalog-frame.png")],$errors??[],[],[]);
echo "frame-name: catalog-frame.png pixels=same disk-rename=no\n";
Ожидаемый результат
frame-name: catalog-frame.png pixels=same disk-rename=no

Распакуйте архив и выполните php example.php. Вложенные .b64 содержат все входы; helper проверяет SHA256 и восстанавливает PPM. gmPng сохраняет копию в PNG8. gmJpegHeader читает SOF0/SOF2 и коэффициенты компонентов из настоящего JPEG, gmPngInterlace читает IHDR. metrics.json содержит результаты и проверки. JPEG/PNG и квитанции появятся после выполнения; исходные файлы не берутся из внешней папки.

Ожидаемая строка короткого примера — catalog-frame.png. Упражнение: переименовать файл на файловой системе. Решение: это другая операция над файлами; изменение image filename её не выполняет. Для конвейера сохраните исходную метку до экспорта, поскольку writeImage может изменить имя кадра на реальный путь результата.

Как выбирать текущий кадр: навигация по последовательности.

Связанные шаги: имена и путь записи, кодирование JPEG/PNG, окружение и рабочий объект, качество, метаданные и глубина файла.

Отделить план, имя кадра и реальный путь записи

Соберём три разных значения в одном задании: план batch-plan.png, метку кадра label-only.png и настоящий destination. Выходной PNG записывается только по последнему пути. После записи getFilename сохраняет план, а getImageFilename сообщает фактический выходной путь.

Реальный результат writeImage(destination): выбранный путь важнее текстовой метки
Реальный результат writeImage(destination): выбранный путь важнее текстовой метки
$image = new Gmagick();
$image->setFilename("batch-plan.png");
$image->read(__DIR__ . "/encoding.ppm");
$image->setImageFilename("label-only.png");
$image->setImageFormat("PNG");
$image->writeImage(__DIR__ . "/actual.png");

Это модель «настройка последовательности → метка кадра → аргумент операции записи». Все три значения являются строками, но выполняют разные роли. Полная программа читает два getter до и после writeImage, проверяет наличие настоящего файла и отсутствие label-only.png. Для пути вывода здесь используется заданная программой папка; произвольное имя из формы не становится разрешением на запись куда угодно.

Отделить план, имя кадра и реальный путь записиСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__.'/gm100-export-fixture.php';
gmRestore();
$image=new Gmagick();$image->setFilename('batch-plan.png');$image->read(__DIR__.'/encoding.ppm');
$image->setImageFilename('label-only.png');$beforeWrite=[$image->getFilename(),$image->getImageFilename()];
$destination=__DIR__.'/gm100-export-explicit-path-actual.png';$image->setImageDepth(8);$image->setImageFormat('PNG');$image->writeImage($destination);
$afterWrite=[$image->getFilename(),basename($image->getImageFilename())];

gmReport('gm100-export-explicit-path',["gmagick.read", "gmagick.setfilename", "gmagick.getfilename", "gmagick.setimagefilename", "gmagick.getimagefilename"],["gm100-export-explicit-path-actual.png"],['before_names'=>$beforeWrite===["batch-plan.png","label-only.png"],'sequence_kept'=>$afterWrite[0]==="batch-plan.png",'frame_updated_by_write'=>$afterWrite[1]==="gm100-export-explicit-path-actual.png",'real_file_written'=>is_file($destination),'label_file_absent'=>!file_exists(__DIR__."/label-only.png")],$errors??[],['before_write'=>$beforeWrite,'after_write'=>$afterWrite],[]);
echo "path: explicit-file=written sequence-name=kept frame-name=updated\n";
Ожидаемый результат
path: explicit-file=written sequence-name=kept frame-name=updated

Распакуйте архив и выполните php example.php. Вложенные .b64 содержат все входы; helper проверяет SHA256 и восстанавливает PPM. gmPng сохраняет копию в PNG8. gmJpegHeader читает SOF0/SOF2 и коэффициенты компонентов из настоящего JPEG, gmPngInterlace читает IHDR. metrics.json содержит результаты и проверки. JPEG/PNG и квитанции появятся после выполнения; исходные файлы не берутся из внешней папки.

Упражнение: в журнале нужны исходник и результат. Решение: сохранить getImageFilename до записи и отдельно зафиксировать путь destination после неё. Если читать только getter в самом конце, исходное значение может быть уже потеряно. Этот пример показывает поведение данной сборки явно, не полагаясь на название метода.

Как выбирать текущий кадр: навигация по последовательности.

Связанные шаги: имена и путь записи, кодирование JPEG/PNG, окружение и рабочий объект, качество, метаданные и глубина файла.

Показать ошибку чтения и выбрать известную замену

В задании отсутствует входной файл. Сервис может либо отклонить обработку, либо по отдельной договорённости выдать известную заглушку. Здесь выбирается собственная схема товара product.ppm. Это другая картинка; подпись результата не выдаёт её за восстановленную пропавшую мишень.

Реально выбранный запасной product.ppm; это другая картинка, а не восстановленный пропавший файл
Реально выбранный запасной product.ppm; это другая картинка, а не восстановленный пропавший файл
$image = new Gmagick();
try { $image->read(__DIR__ . "/missing-input.png"); }
catch (GmagickException $error) {
    $image = new Gmagick();
    $image->read(__DIR__ . "/product.ppm");
}

try/catch отделяет операцию, которая может завершиться исключением, от решения сервиса. В реальном приложении такую замену разрешают только для подходящих ошибок и фиксируют причину в журнале; проблемы прав записи или нехватки ресурсов не следует скрывать произвольной картинкой. В полной программе отсутствующий файл заранее известен, ошибка сохраняется в metrics.json, а новый объект получает явную метку fallback-product.

Показать ошибку чтения и выбрать известную заменуСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__.'/gm100-export-fixture.php';
gmRestore();
$candidate=new Gmagick();$errors=['missing_input'=>gmTry(fn()=>$candidate->read(__DIR__.'/missing-input.png'))];
$replacement=new Gmagick();$replacement->read(__DIR__.'/product.ppm');
$replacement->setImageFilename('fallback-product');$label=$replacement->getImageFilename();
gmPng($replacement,'gm100-export-import-policy-replacement.png');

gmReport('gm100-export-import-policy',["gmagick.read", "gmagick.setimagefilename", "gmagick.getimagefilename"],["gm100-export-import-policy-replacement.png"],['failure_recorded'=>$errors["missing_input"]["ok"]===false,'replacement_label'=>$label==="fallback-product",'replacement_matches_input'=>$replacement->getImageSignature()===(new Gmagick(__DIR__."/product.ppm"))->getImageSignature()],$errors??[],[],[]);
echo "import: missing=caught replacement=explicit-product label=stored\n";
Ожидаемый результат
import: missing=caught replacement=explicit-product label=stored

Распакуйте архив и выполните php example.php. Вложенные .b64 содержат все входы; helper проверяет SHA256 и восстанавливает PPM. gmPng сохраняет копию в PNG8. gmJpegHeader читает SOF0/SOF2 и коэффициенты компонентов из настоящего JPEG, gmPngInterlace читает IHDR. metrics.json содержит результаты и проверки. JPEG/PNG и квитанции появятся после выполнения; исходные файлы не берутся из внешней папки.

Ожидается GmagickException для missing-input и сохранённая схема товара. Упражнение: клиент требует строго свой исходник. Решение: передать ошибку обработчику задания и не выполнять ветку замены. При повторном чтении используйте отдельный объект или осознанно очистите прежнюю последовательность, чтобы не смешивать входы.

Как выбирать текущий кадр: навигация по последовательности.

Связанные шаги: имена и путь записи, кодирование JPEG/PNG, окружение и рабочий объект, качество, метаданные и глубина файла.

Сохранить превью и квитанцию с настоящим именем

После записи нужен надёжный отчёт: какое имя планировалось, какая метка была у источника и какой файл действительно получен. Функция savePreview возвращает квитанцию с basename, размером и SHA256 результата. Видимый PNG и JSON относятся к одному действию записи.

Превью товара записано; рядом создаётся JSON-квитанция с фактическим путём, размером и SHA256
Превью товара записано; рядом создаётся JSON-квитанция с фактическим путём, размером и SHA256
$image = new Gmagick(__DIR__ . "/product.ppm");
$image->setFilename("catalog-job");
$image->setImageFilename("tea-original");
$receipt = savePreview($image, "preview.png");
echo $receipt["written_basename"];

Функция полностью приведена ниже. Она сначала читает оба имени, затем проверяет разрешённую форму basename, задаёт PNG и пишет файл в папку примера. Небольшой preg_match допускает латинские строчные буквы, цифры и дефис перед .png; это политика нашего экспорта, а не правило Gmagick. После записи вычисляется хеш фактических байтов. Возвращаемый массив связывает метаданные задания с файлом, но сам по себе не заменяет запись.

Сохранить превью и квитанцию с настоящим именемСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__.'/gm100-export-fixture.php';
gmRestore();
function savePreview(Gmagick $image,string $basename):array {
    if(!preg_match('/^[a-z0-9-]+\.png$/D',$basename))throw new InvalidArgumentException('Use a simple PNG basename');
    $planned=$image->getFilename();$sourceLabel=$image->getImageFilename();
    $image->setImageDepth(8);$image->setImageFormat('PNG');$path=__DIR__.'/'.$basename;$image->writeImage($path);
    return ['planned_sequence'=>$planned,'source_label'=>$sourceLabel,'written_basename'=>basename($image->getImageFilename()),'sha256'=>hash_file('sha256',$path),'bytes'=>filesize($path)];
}
$image=new Gmagick(__DIR__.'/product.ppm');$image->setFilename('catalog-job');$image->setImageFilename('tea-original');
$receipt=savePreview($image,'gm100-export-receipt-preview.png');file_put_contents(__DIR__.'/gm100-export-receipt-receipt.json',json_encode($receipt,JSON_PRETTY_PRINT|JSON_THROW_ON_ERROR));
$errors=['invalid_name'=>gmTry(fn()=>savePreview($image,'../escape.png'))];

gmReport('gm100-export-receipt',["gmagick.setfilename", "gmagick.getfilename", "gmagick.setimagefilename", "gmagick.getimagefilename"],["gm100-export-receipt-preview.png"],['receipt_tracks_real_file'=>$receipt["written_basename"]==="gm100-export-receipt-preview.png"&&$receipt["bytes"]>0,'labels_kept_in_receipt'=>$receipt["planned_sequence"]==="catalog-job"&&$receipt["source_label"]==="tea-original"],$errors??[],$receipt,[]);
echo "receipt: real-file=bound planned-and-source-names=recorded invalid-name=rejected\n";
Ожидаемый результат
receipt: real-file=bound planned-and-source-names=recorded invalid-name=rejected

Распакуйте архив и выполните php example.php. Вложенные .b64 содержат все входы; helper проверяет SHA256 и восстанавливает PPM. gmPng сохраняет копию в PNG8. gmJpegHeader читает SOF0/SOF2 и коэффициенты компонентов из настоящего JPEG, gmPngInterlace читает IHDR. metrics.json содержит результаты и проверки. JPEG/PNG и квитанции появятся после выполнения; исходные файлы не берутся из внешней папки.

Упражнение: пользователь передал ../escape.png. Решение: функция отклоняет такое имя до writeImage. Для настоящего сервиса каталог назначения задаётся сервером, а публичное имя файла отделяется от внутренних абсолютных путей. Исходные и выходные имена не следует выводить посетителю как служебные пути операционной системы.

Синтаксис функции и проверки имени: параметры и return, регулярные выражения, исключения.

Как выбирать текущий кадр: навигация по последовательности.

Связанные шаги: имена и путь записи, кодирование JPEG/PNG, окружение и рабочий объект, качество, метаданные и глубина файла.

Функции и методы этой темы

Откройте карточку, чтобы увидеть договор функции, примеры, ограничения и связанные инструменты.

Gmagick::getfilenameПрочитать имя, связанное с последовательностью

PECL gmagick >= Unknown · gmagick

Gmagick::getfilename(): string

Без аргументов возвращает string с именем, связанным с последовательностью. В свежем объекте проверенной сборки это пустая строка; после setFilename значение сохраняется при чтении кадра и явной записи другим путём. Это не обязательно имя текущего кадра и не подтверждение существования файла на диске. Для журнала задания храните это значение как planned_sequence, а фактический выход — отдельно. Если нужен текущий кадр, используйте getImageFilename.

Gmagick::getfilename(): string

Параметров нет: вызов записывается с пустыми скобками.

Официальная ошибка — GmagickException. Дополнительно PHP проверяет типы аргументов; прикладные ограничения пути и пресета в наших функциях дают InvalidArgumentException до вызова библиотеки. Не смешивайте эти уровни проверки.

Два самостоятельных применения: Задать имя последовательности без переименования файла; Отделить план, имя кадра и реальный путь записи.

Отметка PHP.net: PECL gmagick >= Unknown. Unknown не сообщает известную минимальную версию. Наблюдения относятся к PHP 8.3.6/Gmagick 2.0.6RC1/GraphicsMagick 1.3.42 Q16; поведение экспортного кодера подтверждается реальными файлами.

Gmagick::getimagefilenameПолучить имя текущего изображения

PECL gmagick >= Unknown · gmagick

Gmagick::getimagefilename(): string

Без аргументов возвращает строку с именем конкретного изображения в последовательности, то есть текущего выбранного кадра. После read это путь источника; после setImageFilename — присвоенная метка. В нашей сборке явный writeImage меняет значение на выходной путь. Поэтому исходную метку для квитанции сохраняют до записи. Getter не возвращает содержимое файла и не гарантирует, что пользовательская метка существует на диске. Для пустого состояния не вызывайте методы кадра без обработки ошибки.

Gmagick::getimagefilename(): string

Параметров нет: вызов записывается с пустыми скобками.

Официальная ошибка — GmagickException. Дополнительно PHP проверяет типы аргументов; прикладные ограничения пути и пресета в наших функциях дают InvalidArgumentException до вызова библиотеки. Не смешивайте эти уровни проверки.

Два самостоятельных применения: Открыть файл методом read и сохранить превью; Изменить имя кадра, сохранив его пиксели.

Отметка PHP.net: PECL gmagick >= Unknown. Unknown не сообщает известную минимальную версию. Наблюдения относятся к PHP 8.3.6/Gmagick 2.0.6RC1/GraphicsMagick 1.3.42 Q16; поведение экспортного кодера подтверждается реальными файлами.

Gmagick::readПрочитать изображение по явному пути

PECL gmagick >= Unknown · gmagick

Gmagick::read(string $filename): Gmagick

Читает изображение из обязательной строки filename и возвращает Gmagick. В нашем примере это тот же объект, а не массив пикселей или строка файла. __DIR__ привязывает относительный вход к папке программы. Имя, присвоенное setFilename или setImageFilename, само по себе чтение не выполняет. Для отсутствующего файла реально получен GmagickException. При повторном использовании объекта учитывайте, что он может хранить последовательность изображений; для независимого задания используйте новый объект или осознанную очистку. Успешный разбор формата и успешная запись результата — отдельные действия.

Gmagick::read(string $filename): Gmagick
ПараметрТип и обязательностьНазначение
$filenamestring; обязательныйСтроковый путь к читаемому изображению.

Официальная ошибка — GmagickException. Дополнительно PHP проверяет типы аргументов; прикладные ограничения пути и пресета в наших функциях дают InvalidArgumentException до вызова библиотеки. Не смешивайте эти уровни проверки.

Два самостоятельных применения: Открыть файл методом read и сохранить превью; Показать ошибку чтения и выбрать известную замену.

Отметка PHP.net: PECL gmagick >= Unknown. Unknown не сообщает известную минимальную версию. Наблюдения относятся к PHP 8.3.6/Gmagick 2.0.6RC1/GraphicsMagick 1.3.42 Q16; поведение экспортного кодера подтверждается реальными файлами.

Gmagick::setfilenameЗадать имя перед чтением или записью

PECL gmagick >= Unknown · gmagick

Gmagick::setfilename(string $filename): Gmagick

Обязательная строка filename задаёт имя перед чтением или записью; официальный результат — Gmagick. В примере getter подтверждает новое значение, но setter не создаёт и не переименовывает файл. На текущем runtime имя последовательности остаётся отдельным от имени прочитанного изображения. Чтобы запись была однозначной, наша прикладная функция передаёт назначение непосредственно в writeImage. Пользовательское имя нельзя без проверки считать разрешённым путём файловой системы.

Gmagick::setfilename(string $filename): Gmagick
ПараметрТип и обязательностьНазначение
$filenamestring; обязательныйИмя, связанное с последовательностью перед чтением/записью; само по себе не файловая операция.

Официальная ошибка — GmagickException. Дополнительно PHP проверяет типы аргументов; прикладные ограничения пути и пресета в наших функциях дают InvalidArgumentException до вызова библиотеки. Не смешивайте эти уровни проверки.

Два самостоятельных применения: Задать имя последовательности без переименования файла; Отделить план, имя кадра и реальный путь записи.

Отметка PHP.net: PECL gmagick >= Unknown. Unknown не сообщает известную минимальную версию. Наблюдения относятся к PHP 8.3.6/Gmagick 2.0.6RC1/GraphicsMagick 1.3.42 Q16; поведение экспортного кодера подтверждается реальными файлами.

Gmagick::setimagefilenameЗадать имя конкретного кадра

PECL gmagick >= Unknown · gmagick

Gmagick::setimagefilename(string $filename): Gmagick

Принимает обязательную строку filename и возвращает Gmagick. Меняет имя текущего изображения в последовательности, сохраняя его пиксели. Это не операция rename на диске и не выбор другого кадра. Примеры проверяют неизменность пиксельной подписи и отсутствие автоматически созданного файла с именем метки. После явной записи текущее имя может измениться; журнал должен отдельно хранить исходную метку и фактическое назначение.

Gmagick::setimagefilename(string $filename): Gmagick
ПараметрТип и обязательностьНазначение
$filenamestring; обязательныйИмя текущего изображения в последовательности.

Официальная ошибка — GmagickException. Дополнительно PHP проверяет типы аргументов; прикладные ограничения пути и пресета в наших функциях дают InvalidArgumentException до вызова библиотеки. Не смешивайте эти уровни проверки.

Два самостоятельных применения: Изменить имя кадра, сохранив его пиксели; Отделить план, имя кадра и реальный путь записи.

Отметка PHP.net: PECL gmagick >= Unknown. Unknown не сообщает известную минимальную версию. Наблюдения относятся к PHP 8.3.6/Gmagick 2.0.6RC1/GraphicsMagick 1.3.42 Q16; поведение экспортного кодера подтверждается реальными файлами.

Источники и обсуждения

Код и руководство с собой

Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.

Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.

Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.