2017-01-11 2 views
1

У меня есть index.php файл:Написать <?xml?> в PHP файле

<?php 
// Load resources shared across the website 
include '../path/to/other_file.php'; 
?> 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es" prefix="og: http://ogp.me/ns#"> 
<head prefix="article: http://ogp.me/ns/article#"> 
    <title>Title</title> 
</head> 

<body> 

<!-- Code --> 

</body> 
</html> 

Когда я загрузить его, он не показывает ничего. Я использовал this online tool, чтобы узнать, что происходит. Проблема возникает в строке 5.

Вероятно, это что я использую <? представить документ XHTML, но я предполагаю, что PHP думает, что следующее слово будет php (<?php //CODE ?>) вместо xml (<?xml version="1.0" encoding="UTF-8"?>)

Как я могу это исправить? Я думаю, что это называется «разбор» или «опровержение» символов.

ответ

2

Проблема возникает потому, что PHP думает, что вы пытаетесь ввести режим «PHP», когда вы делаете <?, когда на самом деле вы пытаясь получить доступ к XML. Простое решение этого - отключить так называемые «короткие короткие теги PHP», где PHP распознает <? как действительный тег открытия.

Вы можете сделать это различными способами, все, что эффективно делать то же

  1. Добавить short_open_tag=Off в вашем php.ini
  2. Добавить ini_set('short_open_tag', '0'); в верхней части указанного файла
  3. В php_value short_open_tag 0 в вашем .htaccess
  4. Используйте <?php echo "<?xml ... ?>";, чтобы добавить XML.
+1

Not 2 - 'short_open_tag' является' PHP_INI_PERDIR' и не может быть изменено с помощью 'ini_set()': http://php.net/manual/en/ini.core.php – AbraCadaver

+0

Действительно, @AbraCadaver? TIL! Я ударю по нему! – Qirel

3

Вы можете решить эту проблему с помощью простого эхо:

include '../path/to/other_file.php'; 
echo '<?xml version="1.0" encoding="UTF-8"?>'; 
?> 
0

Попытки отправить браузер, что файл PHP представляет собой файл XML с этой строкой:

header("Content-type: text/xml");

это исправить после запуска PHP тега, поэтому сценарий может переопределить заголовок

+1

Проблема возникает на сервере, потому что PHP не понимает ' Barmar

+0

Хотя отправку заголовка типа MIME, безусловно, необходимо для файла XHTML (иначе браузер будет считать его HTML-файлом), это проблема, о которой спрашивает OP. Кстати, 'application/xhtml + xml' является предпочтительным, хотя' text/xml' будет работать нормально. –