Можно ли сериализовать $ _FILES? - PullRequest
0 голосов
/ 26 августа 2010

Мне нужно подражать, как работает форма загрузки. Мне нужно сохранить файл в базу данных и загрузить $ _FILES в наши папки. Проблема каждого бита кода моделей и самой формы основана на устаревшем коде. У меня нет смысла разбирать весь код и начинать все сначала. Я предпочитаю, чтобы это было

Итак, моя цель - как загрузить файл, не используя предыдущую форму, а затем только сериализовать / отменить сериализацию объекта, состоящего из имени файла и URL. в то время как сам файл был записан через функцию копирования, а не загружает форму.

Ответы [ 3 ]

1 голос
/ 26 августа 2010

Если ваш код зависит от содержимого переменной $_FILES, тогда да, присвоение ей (независимо от того, является ли содержимое из сериализованной версии в базе данных или где-либо еще) должно иметь ожидаемое поведение.

Вообще говоря, придумать небольшой тест - гораздо лучший способ выяснить, сработает ли что-то для вашей конкретной ситуации, чем просить людей в Интернете спекулировать.

1 голос
/ 26 августа 2010

Единственная критическая часть массива $ _FILES для любого конкретного запроса - это часть ...['tmp_name'], поскольку она указывает, где PHP сохранил загруженный файл. Сохраните копию $ _FILES, которая настроена так, как вы хотите тестировать (с любым количеством файлов), затем вручную измените имя tmp_name, чтобы оно указывало на реальные файлы на вашем сервере, а не на случайные имена мусора, которые PHP автоматически назначает для загрузки и вы сможете повторно использовать копию данных столько раз, сколько захотите, если ваши сценарии не перемещают / не удаляют / не восстанавливают файлы, на которые вы указываете.

Итак, что-то вроде:

$_FILES['file1']['tmp_name'] = '/path/to/file/to/test/with';
$_FILES['file2']['tmp_name'] = '/some/other/path/or/file/for/testing';

$savedfiles = serialize($_FILES);

и тогда вы можете вставить

$_FILES = unserialize($savedfiles);

везде, где это подходит для тестирования вашего приложения.

1 голос
/ 26 августа 2010

Да, можно сериализовать массив $ _FILES;

$upload = serialize($_FILES["file"]);
...