Diğer SAPI'lerden dikkate değer farklılıklar

CLI SAPI'nin diğer SAPI'lerden dikkate değer farklılıkları:

  • CLI SAPI'den farklı olarak, çıktıya hiçbir başlık yazılmaz.

    CGI SAPI HTTP başlıklarını önlemek için bir yol sunsa da, CLI SAPI'de onları etkinleştirecek eşdeğer bir seçenek yoktur.

    CLI öntanımlı olarak sessiz kipte başlar, -q ve --no-header seçenekleri eski CGI betiklerinin kullanımına uyumluluk için tutulmaktadır.

    Çalışma dizinini betiğinki ile aynı yapmaz. (-C ve --no-chdir seçenekleri uyumluluk için tutulmaktadır)

    Düz metin hata iletileri (HTML biçimlendirmesi yok).

  • Kabuk ortamında birşey ifade etmedikleri için CLI SAPI tarafından geçersiz kılınan bazı php.ini yönergeleri vardır:

    Geçersiz kılınan php.ini yönergeleri
    Yönerge CLI SAPI öntanımlı değeri Yorum
    html_errors FALSE Hata iletileri HTML etiketleri ile karıştırılmışken, kabukta bunları okumak oldukça zor olacağı için bu yönerge öntanımlı olarak FALSE değerlidir.
    implicit_flush TRUE Kabuk ortamında, print, echo ve arkadaşlarından gelen çıktıların önbellekte tutulmadan hemen çıktıya yazılması istenir. Eğer standart çıktıyı ertelemek veya işlemek isterseniz çıktı önbellekleme kullanabilirsiniz.
    max_execution_time 0 (sınırsız) HTML üretmek için yazılan uygulamalar genellikle çok çabuk işletilse de, kabuk ortamlarında PHP kullanımının sonsuz olasılığı olduğu için, kabuk uygulamaları daha fazla işletim zamanı harcama eğilimindedirler, bu nedenle azami işletim süresi sınırsız olarak belirtilmiştir.
    register_argc_argv TRUE

    Bu ayarın TRUE olması, CLI SAPIde çalıştırılan betiklerin argc (uygulamaya aktarılan değiştirge sayısı) ve argv (gerçek değiştirgeler dizisi) değerlerine her zaman erişebilmesi anlamına gelir.

    CLI SAPI kullanırken $argc ve $argv PHP değişkenleri uygun değerlere ayarlanır. Bu değerleri $_SERVER dizisinde de bulabilirsiniz. Örnek: $_SERVER['argv']

    output_buffering FALSE

    Bu yönergenin öntanımlı değeri FALSE olmasına rağmen Çıktı tamponlama işlevleri kullanılabilmektedir. functions are available.

    max_input_time FALSE

    PHP CLI, GET, POST ve dosyaların karşıya yüklenmesini desteklemez.

    Bilginize:

    Bu yönergeler php.ini yapılandırma dosyasından veya özel bir yapılandırma dosyasından başka bir değerle ilklendirilemezler. Bu sınırlamanın sebebi bu değerlerin bütün yapılandırma dosyaları çözümlendikten sonra uygulanmasıdır. Fakat, çalışma anında bunların değerleri değişirilebilir (olsa da register_argc_argv gibi bazıları için bu bir şey değiştirmez).

    Bilginize:

    Komut satırı betikleri için ignore_user_abort yönergesinin On olması önerilir. Daha fazla bilgi için ignore_user_abort() işlevine bakınız.

  • Kabuk ortamında G/Ç akımları ile kolay çalışmak için bazı sabitler tanımlanmıştır.

  • CLI SAPI geçerli dizini betiğin işletildiği dizine değiştirmez.

    Örnek 1 - CLI SAPI farkını gösteren örnek:

    <?php
    // deneme.php isimli basit deneme uygulamamız
    echo getcwd(), "\n";
    ?>

    CGI sürümününü kullanınca, çıktı şöyle olur:

    $ pwd
    /tmp
    
    $ php -q bir_dizin/deneme.php
    /tmp/bir_dizin
    

    Bu açıkça gösteriyor ki PHP geçerli dizinini betiğin çalıştığı dizine değiştiriyor.

    CLI SAPI kullanımı sonucu:

    $ pwd
    /tmp
    
    $ php -f bir_dizin/deneme.php
    /tmp
    

    Bu, PHP'de kabuk araçları yazarken daha fazla esneklik imkanı verir.

    Bilginize:

    CGI SAPI bu CLI SAPI davranışını komut satırından çalışırken -C seçeneği ile destekler.