$dir = "temp/docx";
$errors = array();
$zip = new ZipArchive;
if($zip->open($file_path) === false){
$errors[] = 'Failed to open file';
}
if (empty($errors)) {
$zip->extractTo($dir,"word/document.xml");
$zip->close();
$files = scandir($dir);
print_r($files);
Итак, по какой-то причине добыча не будет работать. Увидев, что папки пустые, я решил сделать scandir, чтобы посмотреть, удаляются ли они после завершения php. Ничего такого. Переменная $ files ничего не выводит (конечно, кроме .. и.).
Zip на самом деле является файлом docx, и после явной проверки на наличие ошибок php, похоже, считает, что zip_open работает, но я не уверен, является ли это ложным срабатыванием.
Мне интересно, если это связано с тем, что это на самом деле файл DOCX, и мне нужно явно сохранить его в виде файла ZIP на сервере. Или, возможно, потому, что это происходит сразу после загрузки, и временный файл удаляется, прежде чем можно будет что-либо с ним делать (что я считаю маловероятным, так как другие форматы работают нормально). Возможно, ни одно из моих предположений не является близким, или есть вероятность, что я все написал неправильно. Любая помощь?
Ну вот:
<?php
/*Name of the document file*/
$document = 'demo.docx';
/*Directory*/
$dir = "temp/docx/";
/**Function to extract text*/
function extracttext($filename, $action) {
//Check for extension
$ext = end(explode('.', $filename));
//Check if DOCX file
if($ext == 'docx'){
$dataFile = "word/document.xml";
//else it's probebly an ODT file
} else {
$dataFile = "content.xml";
}
//Create a new ZIP archive object
$zip = new ZipArchive;
// Open the archive file
if (true === $zip->open($filename)) {
// If successful, search for the data file in the archive
if (($index = $zip->locateName($dataFile)) !== false) {
// Index found! Now read it to a string
$text = $zip->getFromIndex($index);
// Load XML from a string
// Ignore errors and warnings
$xml = DOMDocument::loadXML($text, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
if($action == "save"){
// Save xml to file
file_put_contents($dir ."word/document.xml", $xml->saveXML());
return "File succesfully saved.";
} else if($action == "text"){
// Remove XML formatting tags and return the text
return strip_tags($xml->saveXML());
}
}
//Close the archive file
$zip->close();
}
// In case of failure return a message
return "File not found";
}
//Save xml file
echo extracttext($document, "save");
//Echo text from file
echo extracttext($document, "text");
?>
Других решений пока нет …