2013-03-12 13 views
7

Próbuję włączyć rozszerzenie .zip w PHP, ale funkcja poniżej zwraca false.Włącz rozszerzenie zip dla PHP

if (!extension_loaded('zip')) { 
    return false; 
} 

Jak mogę włączyć rozszerzenie .zip bez użycia php.ini?

Czy można włączyć korzystanie z ini_set()?

+0

Co to jest system operacyjny? –

+0

jest tam plik ZIP z pewnym opisem wymienionym podczas wykonywania __phpinfo(); __ – Waygood

+0

Istnieją implementacje użytkownika ZIP w rozszerzeniu ZIP. Chociaż interfejs API zwykle się różni. – mario

Odpowiedz

2

Jeśli na serwerze jest dostępne rozszerzenie ZIP, można go dynamicznie wczytać (dl()) (< 5.3).

if (!extension_loaded('zip')) { 
    // Attempt to load the zip 
    $prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : ''; 
    dl($prefix . 'zip.' . PHP_SHLIB_SUFFIX); 

    if (!extension_loaded('zip')) { 
     // Couldn't load the ZIP module dynamically, either 
     return false; 
    } 
} 

Jeśli używasz wersji 5.3.0 powyżej, nie będzie w stanie wykorzystać dl chyba że to działa w wierszu polecenia lub wbudowane w serwer WWW.

Pozostawia to twoją jedyną opcję modyfikacji php.ini, jeśli nie możesz przekompilować z wbudowanym modułem do PHP. Nie można tego zrobić za pomocą ini_set, ponieważ będzie ono stosowane tylko w czasie wykonywania, podczas gdy wszystkie wymagane moduły będą już załadowane przez plik wykonywalny PHP podczas uruchamiania.

+1

Ta funkcja została usunięta z niektórych SAPI w PHP 5.3. –

+0

dl nie będzie włączony w niektórych przypadkach w php5.4, więc lepiej jest przekompilować php za pomocą --enable-gzip –

+1

Wyraźnie stwierdził, że nie chce używać 'php.ini'. Jeśli nie może tego użyć, czy naprawdę myślisz, że może przekompilować? –

1

Użyj tego,

if (!extension_loaded('zip')) 
{ 
    $prefix = (PHP_SHLIB_SUFFIX == 'dll') ? 'php_' : ''; 
    dl($prefix . 'zip.' . PHP_SHLIB_SUFFIX); 
    if (!extension_loaded('zip')) 
    { 
     return false; 
    } 
} 
+1

Wygląda to tak samo jak powyżej. Nie widziałem żadnej różnicy ... – asitha