Сообщения формы HTML - Использование флажков с атрибутом длинного имени - PullRequest
0 голосов
/ 26 ноября 2011

У меня проблемы с кодировкой. Я сделал PHP-скрипт восстановления файла, который позволит человеку поставить флажок рядом с именем файла - и затем, когда они нажмут кнопку «Восстановить» внизу, он восстановит нужный файл из резервной копии.

К сожалению, похоже, проблема. Полный путь и имя файла указаны в атрибуте «name» флажка, поэтому он передается следующему сценарию в качестве местоположения и файла, которые необходимо восстановить.

Как пример:

<input type="checkbox" name="/backups/Sunday/111111111111-com/www/components/com_virtuemart/" />

Посмотрите, как долго атрибут "name"? Во многих случаях восстановление работает, но как только атрибут name становится длиннее, он больше не работает. В указанном выше атрибуте поле «name» имеет длину 63 символа.

Теперь, если пробуют другой:

<input type="checkbox" name="/backups/Sunday/111111111111-com/www/components/com_virtuemart/js/" />

Вышеуказанный атрибут "name" имеет длину 67 символов. НЕ РАБОТАЕТ.

В сценарии, в котором публикуются данные POST, я сделал var_dump ($ _ POST); чтобы увидеть, что было на выходе. В первом случае, когда атрибут name имел длину 63 символа, var_dump отображает его. Но во втором случае, когда атрибут был длиной 67 символов, он не отображается, и поэтому файл не восстанавливается.

Есть ли способ обойти это ограничение размера атрибута? Я посмотрел в Интернете и увидел несколько сообщений, в которых люди говорили, что нет никаких ограничений на длину атрибута «имя», но, очевидно, есть одно.

Спасибо!

1 Ответ

0 голосов
/ 26 ноября 2011

Это отравление suhosin php, которое делает это без сомнения. Вы можете либо отредактировать каталог конфигурации suhosin, либо использовать другой подход.

Возможно, самым простым способом без перекодирования фрагмента вашего скрипта для постоянного использования псевдонимов или сохранения массива key => value было бы просто сделать имя ваших входных данных «files []» и указать путь к файлу как значение флажка. тогда вы можете просто сделать

foreach($_POST['files'] as $f) {
 //$f is the file path
}

Однако сам я не люблю делать такие вещи. Я бы попытался где-нибудь сохранить массив ключ => значение. Если вы не хотите использовать базу данных, просто сериализуйте массив php в файл, а затем просто установите флажки с целочисленным ключом массива для каждого файла. Затем в сценарии обработки вы можете просто получить файлы из сохраненного массива по указанным целочисленным индексам

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