PHP помнят полевое содержание файла

FWIW, вот то же решение из статьи MSDN, предложенной Prakash в Python с помощью замечательного ctypes:

from ctypes import *
# get handle to  c:\boot.ini to test
handle = windll.kernel32.CreateFileA("c:\\boot.ini", 0x80000000, 3, 0, 3, 0x80, 0)
hfilemap = windll.kernel32.CreateFileMappingA(handle, 0, 2, 0, 1, 0)
pmem = windll.kernel32.MapViewOfFile(hfilemap, 4, 0, 0, 1)
name = create_string_buffer(1024)
windll.psapi.GetMappedFileNameA(windll.kernel32.GetCurrentProcess(), pmem, name, 1024)
print "The name for the handle 0x%08x is %s" % (handle, name.value)
# convert device name to drive letter
buf = create_string_buffer(512)
size = windll.kernel32.GetLogicalDriveStringsA(511, buf)
names = buf.raw[0:size-1].split("\0")
for drive in names:
    windll.kernel32.QueryDosDeviceA(drive[0:2], buf, 512)
    if name.value.startswith(buf.value):
        print "%s%s" % (drive[0:2], name.value[len(buf.value):])
        break

9
задан roflwaffle 25 August 2009 в 07:52
поделиться

3 ответа

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

Вместо этого сделайте следующее:

  • Создайте поле для загрузки файла с именем file_upload .
  • На стороне сервера обработайте загрузку в любом случае, даже если остальная часть проверки формы завершится неудачно.
  • Если проверка формы не удалась, но файл был загружен, вставьте скрытый ввод в форму с помощью имя файл , содержащий имя только что загруженного файла.
  • Отображение видимой для пользователя индикации того, что файл в порядке. Если это изображение, покажите его уменьшенную версию. Если это любой другой файл, отобразить его имя файла и / или значок.
  • Если пользователь решает загрузить другой файл в поле file_upload , обработайте загрузку и сохраните новое значение в файле .

] Псевдокод:

<?php
    $file = null;
    if (!empty($_POST['file'])) {
        $file = $_POST['file'];
    }
    if (!empty($_FILES['file_upload'])) {

        // process upload, save file somewhere

        $file = $nameOfSavedFile;
    }

    // validate form
?>


<input type="file" name="file_upload" />
<input type="hidden" name="file" value="<?php echo $file; ?>" />
<?php
    if (!empty($file)) {
        echo "File: $file";
    }
 ?>

Важное примечание

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

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

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

17
ответ дан 4 December 2019 в 13:48
поделиться

поля ввода файлов доступны только для чтения, вы не можете установить для них начальное значение

-1
ответ дан 4 December 2019 в 13:48
поделиться

Вы все равно можете загрузить файлы и отображать имена файлов вместо поля выбора файла. Чтобы запомнить поля, вы можете использовать переменную $ _SESSION.

-1
ответ дан 4 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: