Я думал об этом некоторое время, и, действительно, аххудо было правильно, SSI не имеет встроенной функции обнаружения файлов, поэтому управление потоком ограничено.
В качестве отступления я нашелссылка на расширенную версию SSI (системы на основе VMS)
http://wasd.vsm.com.au/doc/env/env_0400.html
и были некоторые расширения, которые позволяли бы вам проверять существование файла в некотором роде.
Однако чаще, чем нет, если бы вы использовали SSI, он, вероятно, работал бы в среде LAMP, поэтому можно было бы воспользоваться возможностью SSI запускать скрипт CGI / PHP в операторе включения.
Без особых проблем можно прибегнуть к:
<body>
<!--#include virtual="insert_intro.html" -->
<h2>Insert An Existing File</h2>
<!--#include
virtual='checkFileExists.php?fn=insert_help.html&df=insert_default.html' -->
<h2>Insert a Non-Existing File</h2>
<!--#include
virtual='checkFileExists.php?fn=insert_no_help.html&df=insert_default.html' -->
</body>
, который использует PHP-скрипт для выполнения всей проверки файлов:
<?php
$theFileName = $_GET['fn'];
$theDefault = $_GET['df'];
if ( file_exists($theFileName) === TRUE ) {
include($theFileName);
} else {
include($theDefault);
}
?>
Я передаю два имени файла,предполагаемый файл и файл резервной копии / файла по умолчанию, скрипт проверяет первый и, если он не найден, использует второй.
При таком подходе возникает вопрос: зачем использовать SSI, когда доступен PHP?В некоторых случаях, особенно в устаревшей системе, может существовать большой веб-сайт, основанный на SSI, и обходной путь, хотя и менее изящный, решит проблему.
PHP не является обязательным, сценарий PERL также будетработа.
Наконец, я попытался использовать PHP apache_setenv
, но не смог понять, как передавать переменные окружения между PHP, Apache и SSI (я также пытался установить переменные $ _SERVER и $ _ENV, нобез успеха).