Есть файлы "start.php" и "10.jpg", лежащие в коневом каталоге сайта. При запуске файла "start.php" код php создает файл "word.doc" c картинкой и текстом в том же каталоге. При открытии файла "word.doc" картинка внутри присутствует. Но если картинку удалить из каталога, при открытии файла "word.doc" вместо картинки видим красный крестик. Изображение не внедрилось в файл "word.doc", а вписано в виде ссылки на файл "10.jpg". Что изменить, чтобы изображение внедрялось в создаваемый файл "word.doc". Ниже содержимое файла "start.php". <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <body> <?php $str = 'MIME-Version: 1.0 Content-Location: Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="windows-1251" <html xmlns=3D"urn:schemas-microsoft-comfficeffice" xmlns:w=3D"urn:schemas-microsoft-comffice:word" xmlns=3D"http://www.w3.org/html40"> <head> <meta http-equiv=3DContent-Type content=3D"text/html; charset=3Dwindows-1251"> <meta name=3DProgId content=3DWord.Document> <meta name=3DGenerator content=3D"Microsoft Word 11"> <meta name=3DOriginator content=3D"Microsoft Word 11"> <link rel=3DFile-List href=3D"test.files/filelist.xml"> <!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Print</w:View> <w:GrammarState>Clean</w:GrammarState> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState=3D"false" LatentStyleCount=3D"156"> </w:LatentStyles> </xml><![endif]--> <style> <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Tahoma"; mso-fareast-font-family:"Tahoma";} @page Section1 {size:595.3pt 841.9pt; margin:18.0pt 19.3pt 18.0pt 18.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style> <!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"\041E\0431\044B\0447\043D\0430\044F \0442\0430\0431\043B\= 0438\0446\0430"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Tahoma"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400; width:100%; } td.br1{ border:1px solid black; } </style> <![endif]--> </head> <body> <font size=3D"4">Зелёное с красным</font><br> <img src=3D"10.jpg"> </body> </html>'; $fp = fopen ("word.doc", "w"); fwrite($fp,$str); fclose($fp); ?> </body> </html> P.S. Смайлики появились вместо комбинации символов "двоеточие+английское o". Не смог их убрать.
1. для оформления кода есть специальный тег 2. обычно так "в лоб" никто не формирует документа. Используют спец библиотеки. 3. Для "внедрения" можно попытаться записать картинку в base64 прямо в теле img
Несколько лет назад представленный здесь код работал - внедрял картинки в doc. Потом перестал. Возможно, я поменял версию php. Не знаю точно, что случилось. Не подскажете, что в php могло измениться?
1. Так он как бы и "внедряет" как вы пишете - если картинка в том же каталоге 2. Ну посмотрите код, осмыслите его хоть маленько - вы просто формируете xml документ на основе html, где указываете картинку с путем ее размещения, если картинку удалит - ее конечно же не будет в принципе вообще в любой версии php 3. опять повторюсь- так не делают. надо через спец. библиотеки формировать нет там никаких бибилотек....
Если удалить картинку то ссылка сохранится. Картинки нет. Word говорит = крестик. "Что изменить, чтобы изображение внедрялось в создаваемый файл "word.doc". Добавить картинку соответствующию ссылке Код (Text): <img src=3D"10.jpg"> Если картинка называется иначе - заменить ссылку.
Думаю, что в старом php создание файлов doc выполнялось по другому. Если в коде записана ссылка на картинку, то в документ вписывалась не ссылка, а сама картинка. Позже появились документы docx. Для них внедрять ничего не надо, так как картинки лежат рядом в архиве. Тогда в php запись файла командой fwrite($fp,$str); упростили. Теперь ссылки остаются ссылками. Проблему я решил, как смог. Вместе с созданным файлом doc в один архив добавляю и картинки. Если пользователь разархивирует zip-архив в одну папку, а не вытищит из zip-архива только doc-файл, то увидит картинки в doc-файле. Если бы я начинал решать эту задачу с нуля, то спецбиблиотеки для создания файла word были бы хорошей помощью. Но у меня уже создано больше 100 программок для создания разных doc-файлов. Слишком много пришлось бы переделывать. Спасибо за участие. Тема закрыта.