Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Проблема с PHP. Не работает <? ... ?>


Автор: Vitalik 28.7.2007, 18:44
Доброго времени суток! smile

Вопрос у меня по ходу пустяковый.. Но вот не знаю как с ним справиться..

Дело в том, что поставил недавно "новые" версии Apache/PHP/MySQL и возникла некоторая проблема. Сразу после установки все работало, но после перезагрузки почему-то перестал "читаться" php-код внутри тегов <? ... ?>. Если же заменить их на <?php ... ?>, то все работает прекрасно..
Кода на php собралось очень много и менять везде теги не представляется приемлемым, да и привык я к старому оформлению. Наверняка, в php есть какая-то настройка, позволяющая решить этот вопрос, но вот о ней то я и не знаю..
Установленные версии: Apache 2.0.54, PHP 5.2.0. Раньше очень долго сидел на Apache 1.3.20 и PHP 4.3.1, как-то не решался перейти.
Также почему-то при перезапуске службы Apache выдавала пару раз ошибку..

Ставил все с нуля, на чистую систему (WinXP SP2), при чем даже пару раз ставил на разные компы.. Все повторялось в точности также..

Заранее благодарен за помощь  smile 

Автор: Daevaorn 28.7.2007, 19:02
Используй полную форму. Это хороший стиль. А подкорректировать старые исходники можно и автоматическим путем: либо скриптом, либо контекстной заменой. Вобщем не проблема.

Автор: Mal Hack 28.7.2007, 21:15
Как уже было сказано выше, это считается хорошим тоном: писать <?php .. ?>, а не  <? .. ?>.
Если очень надо, для совместимости, то надо включить в php.ini директиву short_open_tags.

http://forum.vingrad.ru/forum/topic-131851.html

Автор: Vitalik 28.7.2007, 21:31
Цитата(Daevaorn @  28.7.2007,  18:02 Найти цитируемый пост)
Используй полную форму. Это хороший стиль.

Ну раз хороший стиль, то буду, конечно, использовать полную форму smile Спасибо за совет! smile
Но вот менять все старые исходники....  smile 

Цитата(Daevaorn @  28.7.2007,  18:02 Найти цитируемый пост)
А подкорректировать старые исходники можно и автоматическим путем: либо скриптом, либо контекстной заменой. Вобщем не проблема.

Ну это не проблема, если знать КАК это сделать  smile
Собственно можешь подсказать, как можно это сделать "скриптом" и "контекстной заменой"?.. К сожалению мне эти "способы" ни о чем сейчас не говорят.. :-(
Вроде слышал и может даже встречал текстовые редакторы, позволяющие делать поиск и замену в нескольких файлах.. Но ни к одному из них я так и не привязался, поэтому даже наверное и не вспомню их..

Добавлено через 4 минуты и 43 секунды
Цитата(Mal Hack @  28.7.2007,  20:15 Найти цитируемый пост)
Как уже было сказано выше, это считается хорошим тоном: писать <?php .. ?>, а не  <? .. ?>.

То есть вполне возможно, что в новых версиях PHP просто отключили старый (короткий) вариант тегов, так получается?..
Следовательно это не у меня проблемы, а просто такова объективная реальность, угу? smile

Цитата(Mal Hack @  28.7.2007,  20:15 Найти цитируемый пост)
Если очень надо, для совместимости, то надо включить в php.ini директиву short_open_tags.
http://forum.vingrad.ru/forum/topic-131851.html

Огромнейшее спасибо тебе и за указание на эту директиву, и за очень полезную ссылочку про конфигурацию php!  smile 
Сейчас буду изучать  smile 

Автор: Mal Hack 28.7.2007, 22:00
Vitalik, да, данную директиву по умолчанию выключили.
Я думаю, что в будущем, вообще отменят. По крайней мере, <% %> - ASP стиля с 6 ветки больше не будет, если не изменяет память.

Да всегда пожалуйста, спрашивай не стесняйся smile

Автор: Vitalik 30.7.2007, 22:27
Извините за навящевость.. но..

Цитата(Daevaorn @  28.7.2007,  18:02 Найти цитируемый пост)
А подкорректировать старые исходники можно и автоматическим путем: либо скриптом, либо контекстной заменой. Вобщем не проблема.

Просветит меня кто-нибудь как это проще сделать? smile
Может прогу какую-нить посоветуете? smile

Заранее спасибо smile

Автор: Anarki 30.7.2007, 23:26
Цитата(Vitalik @  31.7.2007,  01:27 Найти цитируемый пост)
Может прогу какую-нить посоветуете?

На том же самом php, с рекурсивным обходом каталогов.
Код

<?php
// замена шорт тегов
// Настройки
$mask = '/\.php$/i'; // маска файла, регулярное выражение 
$dir = '.'; // путь к файлам, в которых произойдет замена
$recursive = 1; // вложенные директории?
$backup = 1; // делать бекапы?
header("Content-Type: text/plain\n\n");
if (!is_dir($dir)) {
    die('Это не директория');
}

function walk($dir) {
    global $mask,$recursive;
    if(substr($dir,-1) == '/') {
         $dir = substr($dir,0,-1);
    }
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if ($file == '.' || $file == '..') continue;
            $path = $dir.'/'.$file;
            if (is_file($path)) {
             
             if (preg_match($mask,$file)) {
                 convert_tags($path);
             }
            } elseif ($recursive && is_dir($path)) {
             walk($path);
            }
        }
        closedir($dh);
    }
}
function convert_tags($path) {
    global $backup;
    $pattern = '#<\?\s+(.*?)\?>#s';
    $pattern2 = '#<\?=\s+(.*?)\?>#s';
    $contents = file_get_contents($path);
    if (preg_match('#<\?=?\s+.*?\?>#s',$contents)) {
        $contents = preg_replace($pattern,'<?php $1 ?>',$contents);
        $contents = preg_replace($pattern2,'<?php echo $1 ?>',$contents);
        if (is_writable($path)) {
            if ($backup && copy($path,$path.'.bkp')) {
                $fp = fopen($path,'wb');
                if ($fp) {
                    fwrite($fp,$contents);
                    echo 'Сконвертированы теги в файле'.$path."\n";
                    fclose($fp);
                } else {
                    echo 'Невозможно открыть файл для записи '.$path."\n";
                }
            } else {
                echo 'Невозможно сделать бекап, конвертация отменена'."\n";
            }
        } else {
            echo 'Отсутсвуют права на запись в файл '.$path."\n";
        }
    }
}

walk($dir);
echo 'Завершено';
?>

Правда не учитывается что теги могут быть вложенными


Автор: Vitalik 31.7.2007, 00:33
Хе-хе  smile 
Сильно  smile
Спасибки большое за код smile

Я тоже частенько для решения различных задач люблю PHP использовать, уж очень он удобный  smile 
А тут как-то даже и не ожидал такого подхода к решению проблемы smile

Автор: NNaarreekk 31.7.2007, 00:58
Я только не понял в чем конкретно разница??? smile 

Автор: Diesel Draft 31.7.2007, 10:06
А не проще было настройки в php.ini поменять 

Автор: Vitalik 31.7.2007, 13:28
Цитата(NNaarreekk @  30.7.2007,  23:58 Найти цитируемый пост)
Я только не понял в чем конкретно разница??? 

Между чем и чем?
Реально не понял. Даже не догадываюсь о чем твой вопрос..

Цитата(Diesel Draft @  31.7.2007,  09:06 Найти цитируемый пост)
А не проще было настройки в php.ini поменять 

Проще чем что?
Не очень понимаю о чем ты.
Настройки то теперь уже поменяны. Остается просто привести старый код в надлежащий вид.

Автор: Diesel Draft 31.7.2007, 13:33
ну когда ты пере установил то поменялись настройки, но ты их можешь включить опять

Автор: SamDark 31.7.2007, 14:58
Diesel Draft, 
Цитата

Как уже было сказано выше, это считается хорошим тоном: писать <?php .. ?>, а не  <? .. ?>.

Автор: Diesel Draft 31.7.2007, 15:03
SamDark, согласен. И кстати это не хороший тон, а необходимость. Но когда у тебя очень много файлов и сервер твой то можно этим пожертвовать

Автор: Mal Hack 31.7.2007, 19:38
Для совместимости, как вариант, можно включить short_open_tags в .htaccess, т.к. не всегда бывает доступ к серверному php.ini.

Автор: Diesel Draft 1.8.2007, 12:19
Но у него свой сервер, он сам сказал

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)