Feeds:
Wpisy
Komentarze

Posts Tagged ‘php’

php i lokalizacja

http://pl2.php.net/manual/en/ref.gettext.php#73376

Można użyć stringów lub gettext

Zalety gettext

1. Trochę szybsze w działaniu niż tablica stringów:

gettext PHP 174 (napisany w PHP)

String ID 289 (tablica stringów)

gettext Ext. 306 (rozszerzenie zewnętrzne ładowane przez PHP)

2. Praca z tłumaczeniami jest szybsza

Nie trzeba dodawać kolejnych zmiennych jeśli pojawi się nowy tekst. Po prostu piszemy w jednym języku i komunikaty zamykamy tak: echo _(Jakiś tekst).

Ale co jeśli zmienimy tekst z którego robione są inne tłumaczenia? Jak wtedy to działa?

3. Kodowanie

http://pl.php.net/manual/en/function.bind-textdomain-codeset.php#42631

http://pl.php.net/bind_textdomain_codeset

http://www.gnu.org/software/gettext/manual/gettext.html#Charset-conversion

powinno tak działać

bind_textdomain_codeset($domain, ‚UTF-8’);

ale w pliku messages chafset ustawiony jest na CHARSET. więc chyba muszę ręcznie zmienić na UTF-8.

4. Plik testowy

Jak już mamy utworzony plik php z ze stringami otoczonymi _() to wydajemy polecenie (opcja -n jeśli jeden plik tłumaczeń dla wielu plików, aby xgettext wstawił linię z lokalizacją pliku)

xgettext -n *.php

Zostanie stworzony plik messages.po, który będzie zawierał stringi do przetłumaczenia dla wszystkich plików php. W tym pliku CHARSET zmieniamy na UTF-8 w moim przypadku. Potem generujemy skompilowany plik tłumaczeń.

msgfmt messages.po

i powstanie messages.po.

5. Linki

http://www.onlamp.com/pub/a/php/2002/06/13/php.html

http://mel.melaxis.com/devblog/2005/08/06/localizing-php-web-sites-using-gettext/

http://pl2.php.net/gettext

http://www.gnu.org/software/gettext/manual/gettext.html

gettext w Ruby

http://manuals.rubyonrails.com/read/chapter/105

Reklamy

Read Full Post »

php i logowanie

Po angielsku authentication.

http://pl.wikibooks.org/wiki/PHP/Sesje

http://pl.wikibooks.org/wiki/PHP/Autoryzacja_i_logowanie

http://en.wikibooks.org/wiki/Programming:PHP/sessions

Bezpieczny układ to sessions, cookies, ssl.

Uwaga na błąd w session_destroy(). Naprawiony 2008-03-07.

2006-04-10 Trick-Out Your Session Handler

Można także zrobić autentykację (uwierzytelnianie) HTTP. Wyskakuje wtedy okno gdzie podaje się login i hasło. Patrz ISBN 978-83-246-1171-3 s. 172

Read Full Post »

php i mysqli

http://devzone.zend.com/node/view/id/686

mysqli nie oferuje persistent connections. Więc jeśli potrzebujesz więcej niż milion zapytań na godzinę nie używaj tego.

mysqli umożliwia styl proceduralny i obiektowy.

mysqli umożliwia prepared statements
a) wtedy można przyspieszyć powtarzające się operacje
b) a także serwer mysql chroni przeciwko SQL injection attacks

Da się także używać tranzakcji.

http://www.devshed.com/c/a/MySQL/Implementing-the-commit-and-rollback-Methods-with-mysqli-and-PHP-5/

Read Full Post »

php best practices

http://www.odi.ch/prog/design/php/guide.php

Read Full Post »

php i autoload

Możemy sprawdzać czy przed ładowaniem czy istnieje już w pamięci klasa, wtedy nie ładujemy pliku.

class_exists('myClass') || require('path/to/myClass.class.php');

Możemy także zdefiniować magiczną funkcję __autoload. Pliki zawierające definicję klasy, będą ładowane podczas tworzenia obiektu danej klasy.

Jaki plik załadować określamy w klasie __autoload:

   function __autoload($filename) {
      require_once "{$filename}.php";
   }

   $myobject = new myobject();

A co jeśli w innym pliku załadowanym będzie inna definicja funkcji __autoload? Nadpisze to naszą własną definicję. Możemy wtedy użyć sp1_autoload_register()

// Our autoload functions
   function my_autoload1_function($filename) {
      @require_once "{$filename}-example1.php";
   }

   function my_otherautoload1_function($classname) {
      @require_once "{$classname}-example2.php";
   }

   // Register them using sp1_autoload_register()
   // Pass the function names to this function and it will register the functions.
   sp1_autoload_register('my_autoload1_function');
   sp1_autoload_register('my_otherautoload1_function');

   $myobject = new myobject();

Tylko, że użycie sp1_autoload_register() usuwa wcześniejsze definicje __autoload. Zatem przed użuciem sp1_autoload_register() dodajmy poprzednie definicje do rejestru a potem nasze.

   // Check to see if we already have an __autoload defined, and if so, register it.
   if (function_exists('__autoload')) {
      sp1_autoload_register('__autoload');
   }

   // Register the other functions.
   sp1_autoload_register('my_autoload1_function');
   sp1_autoload_register('my_otherautoload1_function');

Read Full Post »

http://www.destr0yr.com/article.php/Gmail_and_sSMTP

Uwaga! Jeśli skompilujemy z flagą mailwrapper, to zniknie /usr/sbin/sendmail. Mailwrapper jest po to aby, użyć innych MTA. Jeśli nie wiemy, co takiego, lepiej nie włączać tej flagi.

emerge ssmtp (USE="ipv6 -mailwrapper -md5sum ssl")
cd /etc/ssmtp

W /etc/ssmtp/ssmtp.conf ustawiamy:
root=youraccount@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=
hostname=youraccount@gmail.com
UseSTARTTLS=YES
AuthUser=youraccount
AuthPass=yourpasword
FromLineOverride=YES

W /etc/ssmtp/revaliases:
root:youraccount@gmail.com:smtp.gmail.com:587
mainuser:youraccount@gmail.com:smtp.gmail.com:587

Potrzebujemy jeszcze program mail

emerge mailx

Sprawdzamy:

echo test | mail -s "testing ssmtp" user@domain.tld

lub

$ mail user@domain.tld
To: user@domain.tld
From: ssmtp@localhost
Subject: sSMTP test
Message body.

Sprawdzamy pocztę (user@domain.tld) aby się upewnić, że mail doszedł.

Jeśli coś nie poszło, to mail ląduje w ~/dead.letter. Można go wysłać ponownie:

cat ~/dead.letter | sendmail user@domain.tld

Dalsze źródła:
http://forums.gentoo.org/viewtopic-p-3011748.html
http://forums.gentoo.org/viewtopic-t-412468.html
http://gentoo-wiki.com/HOWTO_Gmail_and_sSMTP

Read Full Post »

Php4 i Php5 na gentoo

Polecanym rozwiązaniem w środowisku wielu użytkowników jest użycie suphp:

http://www.howtoforge.com/apache2_suphp_php4_php5

http://www.gentoo.org/proj/en/php/php4-php5-configuration.xml#doc_chap4

http://futurepages.net/apache-with-multiple-php-versions/

w /etc/make.conf trzeba dodać linię
APACHE2_MPMS="prefork"
a potem
emerge apache

/etc/portage/package.use
=dev-lang/php-4* cgi force-cgi-redirect
=dev-lang/php-5* cgi force-cgi-redirect

emerge ‚=dev-lang/php-4*’ ‚=dev-lang/php-5*’

/etc/portage/package.use
www-apache/mod_suphp mode-force
emerge mod_suphp

komunikaty podczas emerge mod_suphp

* You can manipulate several configure options of this
* ebuild through environment variables:
* SUPHP_MINUID: Minimum UID, which is allowed to run scripts (default: 1000)
* SUPHP_MINGID: Minimum GID, which is allowed to run scripts (default: 100)
* SUPHP_APACHEUSER: Name of the user Apache is running as (default: apache)
* SUPHP_LOGFILE: Path to suPHP logfile (default: /var/log/apache2/suphp_log)

/etc/conf.d/apache2
APACHE2_OPTS=”-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D SUPHP”

Pliki hostowane będą w /var/www. Przyjmiemy, że właściciel i grupa będzie apache. Aby zmienić właściciela i grupę rekursywnie:
chown -R apache: /var/www/

Teraz jeszcze należy ustawić, aby suphp pozwalał na uruchamianie plików należących do apache:apache. Jednak te wartości ustawia się numerycznie. Aby sprawdzić jakie to są wartości wykonujemy polecenie: id apache. UID to user id, a gid to group id.

/etc/suphp
; Minimum UID
min_uid=81

; Minimum GID
min_gid=81

Kolejna sprawa to jednoczesne działanie php4 i php5.
w /etc/suphp ustawiamy jako domyślne php5 dla plików *.php.
[handlers]
;Handler for php-scripts
x-httpd-php=php:/usr/lib/php5/bin/php-cgi
x-httpd-php5=php:/usr/lib/php5/bin/php-cgi
x-httpd-php4=php:/usr/lib/php4/bin/php-cgi
x-httpd-phtml=php:/usr/lib/php5/bin/php-cgi

teraz tworzymy dwa katalogi php4 i php5:
mkdir /var/www/localhost/htdocs/php{4,5}

A także plik info.php do sprawdzania uruchomionej wersji php o zawartośći:
<?php
phpinfo()
?>

Ostatnia rzecz to plik .htaccess umieszczony w katalogu php4 o zawartości:
AddHandler x-httpd-php4 .php

Umieszczamy kopie pliku info.php w katalogach php4 i php5.

W przęglądarce ustawiamy adres http://localhost/php4/info.php a potem http://localhost/php5/info.php.

Pierwsza strona powinna nam pokazać php4 a druga php5.

Możemy także zainstalować mysql

emerge –config mysql

Read Full Post »