Uživatelské nástroje

Nástroje pro tento web


php

Toto je starší verze dokumentu!


PHP

Soubory spuštěné jako PHP

Ve výchozím nastavení jsou jako PHP zpracovány soubory s příponou .php .phtml .inc .php3.
Soubory phps jsou zobrazeny jako zvýrazněný zdrojový kód PHP.
Toto nastavení lze změnit přes .htaccess AddType.

PHPerror2mail

PHPerror2mail nemění error_reporting, pokud má APP nastaven např E_ALL, budou v logu i notice apod. Je na APP nastavit si odpovídající error_reporting a non-fatal řešit přes error handler. Primární účel PHPerror2mail je reportovat fatal errors, které nedojdou k error handler.

Proces odeslání mailu z www a omezení

  1. Lze použít
    1. PHP funkci mail()
    2. SMTP připojení na localhost
    3. autentizované připojení na smtpc.unihost.cz
  2. mail() předá zprávu odpovídajícímu mail serveru pro www.
  3. Mail server nepřijme zprávu pokud odesílatel From není platná mail adresa nebo skutečný odesílatel Return-Path není v doméně registrované pro odesílající www server.
  4. Mail server nepřijme zprávu pro více než 30 příjemců.
  5. Limit poslaných zpráv je 1msg/1sec, tento limit se při velkém množství zpráv zvyšuje.
  6. Mail server může mít základní spam filtr, který má zabránit odesílání spamu z www serveru. Spam filtr by neměl propustit zprávy, které by jiné mail servery označily za jednoznačný spam.
  7. Spam filtr (pokud je zapojen) notifikuje odesílatele zprávy která je špatně formátovaná (obvykle BAD_HEADER).

Chci najednou poslat x tisíc mailů

To je možné, ale existuje několik limitů, které jsou nastaveny kvůli ochraně před rozesíláním spamů ze zneužitelných formulářů apod.
Viz Proces odeslání mailu z www a omezení.
Dále limit přijatých zpráv cílových mail serverů od našeho serveru. Tento limit je závislý na třetí straně a obvykle není zveřejněn (například seznam.cz).
Tzn zprávy budou vloženy do fronty a pokud neexpirují, budou v čase odeslány-doručeny. K expiraci zprávy ve frontě - prohlášení za nedoručitelnou, dojde po 48 hod, v případě odmítání cílovým mail serverem po 24 hod.
Pro odesílání velkých dávek mailů je „best practice“, jejich uložení do fronty aplikace a postupné uvolňování do fronty mail systému. V PHP lze použít například knihovnu Pear Mail_Queue.

Rozesílání mailingů

Aby zprávy nemohly být reportovány jako spam, uvádějte vždy, v textové i html podobě (obecně každé podobě zprávy) - následující text - upravte pro Vaše nasazení
Tato zpráva je Vám zaslána jako registrovanému uživateli, který vyslovil souhlas se zasíláním, na www.mojestranky.dom
z IP: a.b.c.d
datum: d.m.r
Pokud si již nepřejete dostávat tyto zprávy, klikněte zde pro odhlášení.

článek Obchodní sdělení: bez předchozího souhlasu to nejde

Maily jsou označovány jako SPAM pokud jako From uvedu email uživatele

Pokud emaily odesílané z našich www serverů jsou označovány jako SPAM a ve From použijete email uživatele/zákazníka např ja@gmail.com, je to v pořádku - součást globální SPAM ochrany (nikoliv pravidlo pouze na UniHost, ale na mnoha dalších serverech v Internetu). Některé domény mají bezpečnostní politiku, že jejich emaily nemůžou odcházet z libovolného serveru, pouze z jejich serverů, jako ochrana před rozesíláním SPAMu z cizích serverů s uvedením emailu From v jejich doméně.
Pravděpodobně v hlavičce emailu X-Spam najdete score
2.8 NOTVALID_GMAIL Claims to be from gmail.com but is not
Řešením je uvádět ve From adresu domény aplikace a do Reply to uvést požadovaný email.
Při uvádění emailu uživatele/zákazníka do From nemusí být také zpráva doručena kvůli DKIM nebo SPF. Proto je vhodné se tomuto v současné době vyhnout.

html2ps a memory limit

Rád bych použil html2ps, ale spadne mi na PHP memory limit: Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes).
Dle testování (PHP 5.2.12, html2ps 2.0.43, 2010-02-02) pro 22K stránku + 220K media potřebuje 85M RAM. Navýšení RAM pro www je možné, kontaktujte Vašeho obchodníka nebo podporu.

PDFlib

Licence PDFlib Lite neumožňuje použití na webhosting serveru, viz kapitola 4 PDFlib in Hosting Environments. Lze použít demo licenci (make demo stamp across all generated pages). Je na zákazníkovi aby si zaplatil běžnou licenci (795€ 2010-07-12).

Generování PDF v PHP

Lze použít knihovny (class) například: FPDF, R&OS pdf
Pokud víte o jiné která u nás funguje, dejte nám vědět.

Moje aplikace vyžaduje safe mode Off

Obvykle ale aplikace neuvádí důvod a žádný důvod k tomu obvykle není, vyjma lenosti vývojářů. Majorita webhostingu, z důvodů zajištění bezpečnosti, běží v safe-mode. Berou toto vývojář(i) dané aplikace na zřetel, nebo o tyto uživatele nemají zájem?
Safe-mode nijak neomezuje běžnou webovou aplikaci. V případě nasazení SElinux může být web aplikace/uživatel mnohem více omezována.
Na našich serverech je safe-mode jedním z bezpečnostních prvků, tak aby celek zajistil maximální možnou bezpečnost, kterou všichni uživatelé sdíleného webhosting serveru vyžadují. Na našich serverech nevidí uživatel na systém - aby se nemohl snažit o průnik, získání plných práv - ani na ostatní uživatele - aby nemohl číst jejich data, to je naše priorita.
Směrem k PHP6 je safe-mode zapovězen a protože udržujeme na serverech aktuální verzi PHP, budeme to akceptovat. Ale v současné době je pro PHP lepší-bezpečnější provoz se safe-mode.
Aplikace které opravdu potřebují safe-mode můžeme provozovat jako VPS. Budeme rádi pokud nás budete kontaktovat. Nebo v případě většího zájmu můžeme zřídit PHP server se safe-mode off, ale ohledně bezpečnosti jste byli varováni.

Pomalý přístup do adresáře

Čtení anebo zápis do adresáře je hodně pomalý, mám v něm více souborů.
Pokud adresář obsahuje více než 50.000 souborů (údaj se může v různých zdrojích lišit, dle použitých disků, filesystému, testované operace, apod), je stat na adresář náročný, přitom je nutné ho provést při každém přístupu pokud není synchronizovaný v cache. Obvyklým řešením je rozdělit soubory v tomto adresáři do více pod-adresářů dle zvoleného klíče, např dle přiděleného id [0-9] nebo názvu [a-z]. Tento přístup používá například PHP pro ukládání session na filesystém viz dokumentace session.save_path (There is an optional N argument to this directive that determines the number of directory levels your session files will be spread around in.).
Pro představu, načtení obsahu na server class disk poli

  • ke strukturovaným datům 80.000 souborů = 0.049s
  • jeden nafouklý adresář 500.000 souborů = 11.687s

Připojení z PHP na Mysql 4.0

Connect na Mysql 4.0 (mysql40.unihost.cz) databáze z

  • PHP 5.3 (ww2.unihost.cz) není možný přes extensions mysql ani mysqli: Connecting to 3.22, 3.23 & 4.0 is not supported. Server is 4.0.27-log
  • PHP 5.2 bez problémů
  • PHP 4 (ww1.unihost.cz) bez problémů

PHP 4 a náhodný problém session

V rámci session nejsou při některém requestu přístupná _SESSION data - vrací prázdné Array. Později zase ano - bez ztráty dat. Session_id se nezmění. Problém bude na straně PHP 4 (Apache modul) - po přesunu web aplikace na PHP 5 server problém vždy přestane. Session handler je standardní file, file existuje, obsahuje data a má správná práva. Je tedy divné, že PHP jej občas nepřečte (testováno i s session_write_close). Error reporting nic nehlásí.

Změna wwwroot

možností je mnoho, dvě nejpoužívanější - seřazeno od nej

Výchozí adresář web jako wwwroot

wwwroot umístit do výchozího adresáře domena.tld/www/web/
a knihovny (například framework) do adresáře o úroveň výš - například domena.tld/www/inc/
Pak je inc adresář nezobrazitelný z webu přímo.

wwwroot změněný přes rewrite

Pokud je celý web (veřejné www i privátní knihovny) nahrán do výchozího adresáře domena.tld/www/web/ pak přes rewrite a .htaccess nastavit například

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ www/index.php/$1 [L]

V tomto případě je potřeba ještě zohlednit umístění statického obsahu css, img, js, …
A do privátních adresářů nahrát .htaccess

Order Allow,Deny
Deny from all

Zakázání spuštění PHP per adresář

Pro adresáře kam uživatelé mohou nahrávat soubory (např avatars) je vhodné zakázat spuštění PHP. Pak nespustí škodlivé skripty například pro rozesílání spamu. Do adresáře nahrajte .htaccess s obsahem:

# zde nemaji php scripty co delat, jde nejspis o podvrzene viry, zakazat
<FilesMatch "\.(php3?|phtml|inc)$">
  Order Deny,Allow
  Deny from All
</FilesMatch>

Připojení na IMAP.unihost.cz z PHP

// přes SSL
var_dump(imap_open("{imap.unihost.cz:995/pop3/ssl/novalidate-cert}", $user, $heslo));
var_dump(imap_open("{imap.unihost.cz:993/imap/ssl/novalidate-cert}", $user, $heslo));
// resource(4) of type (imap)
 
// přes TLS
var_dump(imap_open("{imap.unihost.cz:110/pop3/tls/novalidate-cert}", $user, $heslo));
var_dump(imap_open("{imap.unihost.cz:143/imap/tls/novalidate-cert}", $user, $heslo));
// resource(4) of type (imap)
 
# novalidate-cert je nutný přestože certifikáty jsou validní a podepsané cert autoritou, kvůli akceptování kořenového certifikátu CA.
# unable to get local issuer certificate: /C=US/O=GeoTrust, Inc./CN=RapidSSL CA (errflg=2)

Testováno na PHP 5.3.9 a 5.3.10. Dokumentace imap_open.

php.1338893914.txt.gz · Poslední úprava: 2012-06-05 12:58 autor: fuxa

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki