Forum und email

Cambiamenti non compatibili

Anche se la maggior parte del codice PHP 5 esistente dovrebbe funzionare senza modifiche, occorre fare attenzione ai seguenti cambiamenti imcompatibili col codice precedente:

  • getrusage() restituisce NULL quando riceve argomenti non compatibili a partire da PHP 5.2.1.
  • ZipArchive::setCommentName() se ha con buon esito restituisce TRUE a partire da PHP 5.2.1.
  • ZipArchive::setCommentIndex() se ha buon esito restituisce TRUE a partire da PHP 5.2.1.
  • SplFileObject::getFilename() restituisce il nome del file, e non il percorso relativo del file, a partire da PHP 5.2.1.
  • Cambiata la priorità della variabile d'ambiente PHPRC in Win32 Ora la variabile d'ambiente PHPRC ha priorità rispetto al percorso salvato nel registro di Windows.
  • CLI SAPI non controlla più la cartella corrente in php.ini o nel file php-cli.ini In PHP 5.1.x fu aggiunta una funzionalità non documentata nella versione CLI, la quale cercava nella cartella corrente un file di configurazione PHP, potenzialmente causando comortamenti non prevedibili nel caso fosse letto un file con configurazioni inattese. Questa funzionalità è stata rimossa nel 5.2.0, e PHP non cercherà più nella CWD la presenza di php.ini o php-cli.ini. Vedere anche la sezione command line del manuale.
  • Aggiunto un allarme quando si eseguono operazioni a modulo 0 Nelle prime bersioni di PHP, l'esecuzione di intero % 0 restituiva non dei messaggi di allarme, bensì un valore FALSE inaspettato. Dal PHP 5.2.0, questa operazione crea un E_WARNING, come in tutte le altre situazioni in cui viene eseguita una divisione per 0.
    <?php
    print 10 0;
    /* Warning:  Division by zero in filename on line n */
    ?>
  • La funzione__toString() viene sempre chiamata dove possibile. Il metodo 'magico' __toString() viene ora chiamato nel contesto di stringa, ovvero, ovunque un oggetto sia usato come una stringa. La soluzione di ripiego di restituire una stringa che contiene l'identificativo dell'oggetto è stata abbandonata col PHP 5.2.0. Questo è diventato problematico poiché un identificativo di oggetto non può essere considerato univoco. Questo cambiamento significa che qualsiasi applicazione che si basi sugli identificativi come valore di ritorno è da correggere. Un tentativo di utilizzare questo valore come stringa ora risulterà in un errore fatale intercettabile.
    <?php
    class foo {}
    $foo = new foo;
    print 
    $foo;
    /* Catchable fatal error:  Object of class foo could
       not be converted to string in filename on line n */
    ?>
    Anche con __toString(), gli oggetti non possono essere usati come indici o chiavi degli array. In futuro potrà essere aggiunto un supporto integrato, ma nel PHP 5.2.x occorre fornire una funzione di hashing personalizzata o utitlizzare la nuova funzione SPL spl_object_hash(). Le eccezioni non possono essere lanciate dai metodi __toString().
    <?php
    class foo {
        public function 
    __toString() {
            throw new 
    Exception;
        }
    }

    try {
        print new 
    foo;
        
    /* Fatal error:  Method foo::__toString() must
           not throw an exception in filename on line n */
    } catch(Exception $e) {}
    ?>
  • Abbandonate le funzioni astratte statiche. A causa di una svista, PHP 5.0.x e 5.1.x permettevano funzioni astratte e statiche nelle classi. Dal PHP 5.2.x solo le interfacce possono averle.
    <?php
    abstract class foo {
        abstract static function 
    bar();
        
    /* Strict Standards:  Static function foo::bar()
           should not be abstract in filename on line n */
    }
    ?>
  • L'estensione Oracle richiede almeno Oracle 10 in Windows.
  • Aggiunto il supporto a RFC2397 (data: stream). L'introduzione dello schema di URL 'data' può portare ad un cambio nel comportamento sotto Windows. Se si lavora con un filesystem NTFS e nell'applicazione si usano i meta stream, non sarà più possibile effettuare operazioni su un file di nome 'data:' che venga raggiunto senza informazioni sul percorso. Il rimedio è utilizzare il protocollo 'file:' per accedere al file. Vedere anche » RFC 2397
    <?php
    /* when allow_url_include is OFF (default) */
    include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+";
    /* Warning:  include(): URL file-access is disabled
       in the server configuration in filename on line n */
    ?>
  • Regressione nei pattern glob() Nella versione 5.2.4 un fix di sicurezza ha causato una regressione per il pattern nella forma "/foo/*/bar/*". Dalla versione 5.2.5 invece di alzate un allarme la funzione glob() restituisce false quando le restrizioni openbase_dir sono violate.