Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana <? na <?php
Forum PHP.pl > Forum > PHP
tikky
Witam.

Wybaczcie, że temat trochę off topic.


Mam do zainstalowania sklep internetowy shoper.pl ale wewnątrz niego wszystkie pliki php zaczynają się od:
  1. <?
a nie od
  1. <?php
Mój serwer to WampServer działający na windowsie.

Pytanie: Jakim narzędziem, softem zamienić grupowo w wielu plikach <? na <?php lub drugie rozwiązanie jak zmienić konfigurację WAMP'a aby czytał pliki <? jako PHP

Pozdrawiam

Tikky
Piniek
W ustawieniach PHP włącz short_open_tag i asp_tag
erix
Mass Text Replacer

A lepiej jest jednak używać pełnego otwarcia bloku skryptowego zamiast skróconych, gdyż niektóre hostingi mają poblokowane takie zmiany.
WebCM
Lepiej stosować <?php zamiast <?, a na końcu nie zamykać skryptu ?>, jeśli po nim nie ma kodu HTML.

Znajdź program V-Grep i zamień "<? " na "<?php " (wyrażenia regularne można wyłączyć) w plikach .php.
.radex
Cytat(WebCM @ 22.12.2008, 11:23:26 ) *
Lepiej stosować <?php zamiast <?, a na końcu nie zamykać skryptu ?>, jeśli po nim nie ma kodu HTML.

Znajdź program V-Grep i zamień "<? " na "<?php " (wyrażenia regularne można wyłączyć) w plikach .php.


No właśnie lepiej zamykać skrypt "?>"
mike
Cytat(.radex @ 22.12.2008, 11:29:57 ) *
No właśnie lepiej zamykać skrypt "?>"
No właśnie nie tongue.gif
Dużo bezpieczniej jest nie zamykać plików z kodem PHP za pomocą ?> w ogóle.
phpion
Cytat(.radex @ 22.12.2008, 13:29:57 ) *
No właśnie lepiej zamykać skrypt "?>"

Pupa Jaś:
http://framework.zend.com/manual/en/coding...matting.general
Cytat
For files that contain only PHP code, the closing tag ("?>") is never permitted. It is not required by PHP, and omitting it prevents the accidental injection of trailing white space into the response.
tikky
Włączyłem short_open_tag i asp_tag i działa.|
Swoją drogą ściągnę V-Grep i sprawdzę.


A wracając do zamykania lub nie zamykania ?>. Jaką korzyść da nie zamykanie? lub jakie zagrożenie ma jeśli zamknę.
Czy chodzi tu o prędkość przetwarzania skryptów, bezpieczeństwo czy raczej sprawę standaryzacji?
Crozin
Wyobraź sobie taką sytuacje:
index.php:
  1. <?php
  2.  
  3. require 'a.php';
  4. require 'b.php';
  5. require 'c.php';
  6.  
  7. setcookie('abc', 'value', time() + 123456789);
  8. ?>
Powiedzmy, że pliki a i c.php są "ok", a plik b.php to:
  1. <?php
  2.  
  3. //jakis kod
  4.  
  5. ?>
Jaki będzie wynik działania index.php? Bład. Ciastko się nie wyśle - powód? Cannot send session cookie - headers already sent by...

Gdzie jest błąd? W b.php jest enter (czyli do przeglądarki zostaną wysałane już nagłówki) na końcu - zauważyłeś go? Pewnie nie. Teraz wyobraź sobie, że masz 200 plików .php smile.gif
szagi3891
Bardzo słaby argument. A co jeśli plik b.php zawiera instrukcję typu :

  1. <?php
  2.  
  3. //instrukcje
  4. print 'lelele';
  5. ?>


Znacznie lepiej zmodyfikować plik główny dodając funkcje ob_start();

  1. <?php
  2.  
  3. require 'a.php';
  4. require 'b.php';
  5. require 'c.php';
  6.  
  7. setcookie('abc', 'value', time() + 123456789);
  8. ?>


W taki sposób nawet z dodatkowym enterem w pliku b.php kod główny zadziała.
Chyba że macie coś przeciwko stosowania funkcji ob_start() ?
Moim zdaniem lepiej domykać każde znaczniki zwłaszcza jeśli korzyści z niedomykania są wątpliwe.
erix
Cytat
Chyba że macie coś przeciwko stosowania funkcji ob_start() ?

Owszem, mam przeciwko, jeśli jest to pozbawione sensu tak, jak to w Twoim przypadku - obejście problemu, a nie jego rozwiązanie.
Crozin
@szagi: jeżeli ktoś świadomie najpierw wyświetla jakiś tekst, a potem dopiero wysyła nagłówki (tu ciasteczka) świadczy to tylko o jego poziomie. winksmiley.jpg
mike
Cytat(Crozin @ 23.12.2008, 08:10:38 ) *
@szagi: jeżeli ktoś świadomie najpierw wyświetla jakiś tekst, a potem dopiero wysyła nagłówki (tu ciasteczka) świadczy to tylko o jego poziomie. winksmiley.jpg
Żeby nie było niejasności. Bardzo niskim poziomie biggrin.gif

Pierwsze wersje PHP wysyłały do przeglądarki wszystko co było poza znacznikami <?php ... ?>. Dosłownie wszystko.
To rodziło problemy, kiedy ktoś wstawił sobie enter po znaczniku zamykającym kod PHP a później (w kolejnym bloku lub innym pliku) chciał przesłać nagłówki.
Z tego powodu twórcy PHP postanowili dopisać bajer żeby jedna pusta linia po tagu zamykającym była ignorowana. I tak też jest teraz. Zmiana była podyktowana wspomnianymi problemami oraz tym, że wg. wielu różnych standardów kodowania pojawia się zalecenie, żeby każdy plik kończyć pustą linią dlatego wiele edytorów doklejało tą linię.

No ale to jest kwestia jednej linii. A wyobraźmy sobie, że niechcący w projekcie liczącym setkę plików mamy po którymś znaczniku kończącym plik z kodem PHP dwie linie. Dostajemy gotowe Cannot add header information - headers already sent.

Dlatego właśnie kończenie bloku za pomocą ?> nic nie daje a jego pominięcie daje czasem bardzo dużo, więc często zalecane jest pomijanie ?>. Z pominięciem tagów kończących jest napisany na przykład Zend Framework oraz symfony.
chlebik
Zreszta ja gdzies czytalem, ze planowane jest w ogole wylaczenie opcji korzystania ze skroconej wersji znacznikow otwierajacych w wersji 6.0 (tak wiem, troche na nia jeszcze poczekamy). Gdzie niestety to juz sobie nie przypomne niestety - zatem moze lepiej pisac caly czas <?php (?>)
mike
Cytat(chlebik @ 23.12.2008, 11:07:57 ) *
Zreszta ja gdzies czytalem, ze planowane jest w ogole wylaczenie opcji korzystania ze skroconej wersji znacznikow otwierajacych w wersji 6.0 (tak wiem, troche na nia jeszcze poczekamy). Gdzie niestety to juz sobie nie przypomne niestety - zatem moze lepiej pisac caly czas <?php (?>)
PHP.net :: wiki :: todo:php60
Decyzje dotyczące tagów obejmujących kod PHP jeszcze się ważą :-)
nrm
Cytat(mike @ 23.12.2008, 10:51:12 ) *
Z pominięciem tagów kończących jest napisany na przykład Zend Framework oraz symfony.

i Kohana winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.