PHP: Загрузка файла
Я здесь с проблемой, сделать загружать XML-файл в PHP.
у Меня есть форма, которая позволяет мне выбрать файл:
<form id="upload" action='' method='post' enctype="multipart/form-data" >
<input id='uploaded_file' type='file' name='uploaded_file' title="Procurar ficheiro" />
<input class="btn btn-primary" type="submit" name ="submitA_" value="Upload"/>
</form>
у Меня есть код, чтобы прочитать файл (через DOM), а затем импортировать данные в БД:
$uploaded = (object) $_FILES['uploaded_file']; //line 42
$import->dom->load( $uploaded->tmp_name );
$import->updateDB();
что происходит, когда файл является относительно большой (9MB), объект $uploaded->tmp_name
и остается пустым, и, вследствие этого, не сделан загружать BD, следует вниз warning PHP:
Warning: DOMDocument::load(): Empty string supplied as input on line 42
$uploaded->error
- NULL
и результат var_dump($uploaded);
:
Object(stdClass)#2 (0) { }
Примечание: php.ini
я upload_max_filesize = 128M
max_execution_time = 60
2 answers
Проблема заключается в конфигурации PHP (php.ini
):
post_max_size = 8M
Если размер данных, размещенные превышает post_max_size
и тогда superglobais $_POST
и $_FILES
пусты.
Находится здесь на совет, чтобы проверить, если возникают проблемы при загрузки файлов на PHP, чтобы проверить, всегда в php.ini
:
Post_max_size - максимальный размер размещенные данные
Upload_max_filesize - максимальный размер файла
Memory_limit - ограничение памяти
Max_execution_time - время ожидания выполнения
Max_input_time - время ожидания input
Принимая во внимание, что размер post_max_size
должна превышать upload_max_filesize
. memory limit
активен на вашем сценария должно быть больше post_max_size
.
На Основе ответ SOEN и документации PHP
Я Сначала не было достигнуто воспроизвести вашу ошибку, ваш код слегка адаптированы. Здесь я получил:
DOMDocument::load(): I/O warning : failed to load external entity
Несмотря на то, что сообщение ясно с точки зрения input/output не очень помогает, когда контекст загрузки.
В соответствии с эта ошибка сообщалось, DOMDocument::load() не учитывает include_path, что требует что path абсолютный сообщили, что не имеет никакого смысла, поскольку значение этого параметра, $_FILES уже является абсолютным.
", упрямство, провел значение, передаваемое в ДАР, realpath()
. То же, что realpath
не повлияло на данные, это, продолжил path абсолютный правильно, я смог воспроизвести вашу ошибку. Возможно, даже потому, что ДАР force cast string ((string) FALSE
), что создает пустую строку.
Пошел за временный файл, и даже не существовало (!). Повторно загрузил файл, и она работала, но файл все еще испарится.
Всех этих проблем, единственным правдоподобным, и до сих пор свободной от непредвиденных был вернуться к бе-а-ба загрузки файлов, и на самом ДЕЛЕ загрузить файл.
Дано случае учителю на вопрос, не стал, очень безопасно и просто сделал это:
if( $uploaded -> error == ERR_OK ) {
move_uploaded_file( $uploaded -> tmp_name, './uploaded.xml' );
}
И провел файл отправлен, здесь назван uploaded.xml, метода DOM:
$dom = new DOMDocument;
$dom -> load( './uploaded.xml' );