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
Вы не можете "предварительно заполнить" содержимое поле загрузки файла в целях безопасности. Кроме того, это будет означать, что файл будет повторно загружаться каждый раз при отправке формы, что не годится.
Вместо этого сделайте следующее:
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";
}
?>
Этот механизм может позволить любому пользователю требовать файлы других пользователей как свои собственные, путем включения имени файла
, которое, по их предположениям, существует на вашем сервере. Вы должны убедиться, что загруженные файлы четко связаны с конкретным пользователем, чтобы избежать этой проблемы.
имя файла
, которое, как они предположили, существует на вашем сервере. Вы должны убедиться, что загруженные файлы четко связаны с конкретным пользователем, чтобы избежать этой проблемы. включив имя файла
, которое, как они предположили, существует на вашем сервере. Вы должны убедиться, что загруженные файлы четко связаны с конкретным пользователем, чтобы избежать этой проблемы. поля ввода файлов доступны только для чтения, вы не можете установить для них начальное значение
Вы все равно можете загрузить файлы и отображать имена файлов вместо поля выбора файла. Чтобы запомнить поля, вы можете использовать переменную $ _SESSION.