Как мне вручную создать объект файла $ _FILES? - PullRequest
3 голосов
/ 11 сентября 2011

Я взломал Chamilo, поэтому он автоматически импортирует файл iCal, когда пользователь просматривает свою личную повестку дня.До сих пор я был в состоянии точно определить функции, которые мне нужно вызвать, чтобы это произошло.

Однако функция, которая выполняет фактический импорт, ожидает ссылку на объект файла из $_FILES суперглобальный.Он получает имя файла из $file['tmp_name'] и вызывает file_get_contents().

Я думал о дублировании функции и ее изменении, чтобы она ожидала обычный объект файла, но это кажется плохим способом обработкиЭто.Лучшим решением было бы создать объект файла, который он ожидает.Но я понятия не имею, как это сделать, и поиск в Google не помог.

У кого-нибудь есть идея?

1 Ответ

4 голосов
/ 11 сентября 2011

Если библиотека хорошо написана, это будет невозможно - даже если вы создадите искусственный массив $_FILES, вы не сможете обмануть is_uploaded_file() и move_uploaded_file(). Они будут явно проверять, был ли переданный файл действительно загружен. (Когда-то давным-давно была дыра в безопасности, которая использовала это. AFAIK, функции _uploaded_file() были введены в ответ на это.)

Вы можете попытаться построить массив $_FILES с правильными значениями - вы можете увидеть ожидаемую структуру здесь .

Если это не сработает (как сказано выше, это не должно), у вас не будет другого выбора, кроме как изменить библиотеку. Во всяком случае, на мой взгляд, это более чистый путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...