(PHP 4, PHP 5)
fopen — Bir dosya veya URL'yi açar
$dosyaismi
, string $kip
[, bool $include_path_kullan
= false
[, resource $bağlam
]] )
fopen() işlevi dosyaismi
ile
belirtilen özkaynak için bir akım açar.
dosyaismi
Eğer dosyaismi
"şema://...", biçeminde
belirtilmişse bir URL belirtildiği varsayılır ve PHP bu şema için bir
protokol eylemcisi (başka bir deyişle bir sarmalayıcı) bulmaya çalışır.
Eğer bu protokol için kayıtlı bir sarmalayıcı yoksa PHP, sorunun
giderilmesine yardımcı olmanız için bir uyarı verip belirtilen dosya
ismini sıradan bir dosya gibi ele alarak işleme devam eder.
Eğer PHP dosyaismi
ile belirtilen dosyanın bir
yerel dosya olduğuna karar verirse bu dosya üzerinde bir akım açmaya
çalışır. Dosya PHP için erişilebilir olmalıdır, yani dosyanın bu erişim
için yeterli izinlere sahip olduğundan emin olmanız gerekir. safe_mode
,
veya open_basedir yönergesi
etkinse bunlarla ilgili kısıtlamalar uygulanabilir.
Eğer PHP dosyaismi
ile belirtilen dosyanın bir
URL olduğuna ve bununla ilgili kayıtlı bir protokol olduğuna karar
verirse ve bu protokol bir ağ protokolü olarak kaydedilmişse PHP allow_url_fopen yönergesinin etkin
olup olmadığına bakar. Eğer yönergeye 'Off' değeri atanmışsa PHP bir
uyarı verip işlevin başarısız olmasını sağlar.
Bilginize:
Desteklenen protokolleri Supported Protocols and Wrappers bölümünde bulabilirsiniz. Bazı protokoller (sarmalayıcılar) bağlam ve/veya php.ini seçeneklerini destekler. Kullanılabilecek seçeneklerin neler olduğunu öğrenmek için protokolle ilgili sayfaya bakınız (örneğin, http sarmalayıcısı user_agent php.ini yönergesini kullanır).
Windows platformunda dosya yolunu belirtmekte kullanılan tersbölü çizgilerini öncelemeyi unutmayın. Daha da iyisi dosya yolunu belirtmek için bölü çizgilerini kullanın. Örnek:
<?php
$dt = fopen("c:\\veri\\bilgi.txt", "r");
?>
kip
kip
değiştirgesinde akım için gerekli erişim
türü belirtilir. Şunlardan biri olabilir:
Kip |
Açıklama |
---|---|
'r' | Akım sadece okumak için açılır; dosya konumlayıcı dosyanın başlangıcına yerleştirilir. |
'r+' | Akım hem okumak hem de yazmak için açılır; dosya konumlayıcı dosyanın başlangıcına yerleştirilir. |
'w' | Akım sadece yazmak için açılır; dosya konumlayıcı dosyanın başlangıcına yerleştirilir ve dosya uzunluğu sıfır yapılır. Dosya mevcut değilse oluşturulmaya çalışılır. |
'w+' | Akım hem okumak hem de yazmak için açılır; dosya konumlayıcı dosyanın başlangıcına yerleştirilir ve dosya uzunluğu sıfır yapılır. Dosya mevcut değilse oluşturulmaya çalışılır. |
'a' | Akım sadece yazmak için açılır; dosya konumlayıcı dosyanın sonuna yerleştirilir. Dosya mevcut değilse oluşturulmaya çalışılır. |
'a+' | Akım hem okumak hem de yazmak için açılır; dosya konumlayıcı dosyanın sonuna yerleştirilir. Dosya mevcut değilse oluşturulmaya çalışılır. |
'x' |
Dosya oluşturulur ve sadece yazmak için açılır; dosya konumlayıcı
dosyanın başlangıcına yerleştirilir. Dosya zaten mevcutsa
fopen() FALSE döndürürek başarısız olur ve
E_WARNING seviyesinde bir hata üretir. Dosya
mevcut değilse oluşturulmaya çalışılır. Bu işlem,
open(2) sistem çağrısı için
O_EXCL|O_CREAT seçeneklerini belirtmeye
eşdeğerdir.
|
'x+' |
Dosya oluşturulur ve hem okumak hem de yazmak için açılır; dosya
konumlayıcı dosyanın başlangıcına yerleştirilir. Dosya zaten
mevcutsa fopen() FALSE döndürürek başarısız
olur ve E_WARNING seviyesinde bir hata
üretir. Dosya mevcut değilse oluşturulmaya çalışılır. Bu işlem,
open(2) sistem çağrısı için
O_EXCL|O_CREAT seçeneklerini belirtmeye
eşdeğerdir.
|
Bilginize:
Her işletim sistemi ailesinin farklı satır sonlandırma kuralları vardır. Bir metin dosyasını yazarken işletim sisteminizin gerektirdiği satır sonlandırma karakterlerini kullanmanız gerekir. Unix ve türevleri satırları sonlandırmak için
\n
, Windows ailesi\r\n
, Mac'ler ise\r
karakterini kullanırlar.Dosyalarınızı yazarken yanlış satır sonlandırma karakterleri kullanırsanız, dosyayı başka uygulamalarda açtığınızda tuhaf görünebilir.
Windows'un
\n
karakterlerini şeffaf olarak\r\n
karakterlerine dönüştürmesini sağlayan bir metin kipi dönüşüm seçeneği ('t') vardır. Eğer satır sonlandırma karakterlerinin değişmeden kalmasını istiyorsanız ikil kipi devreye sokan 'b' seçeneğini kullanabilirsiniz. Bu seçenekleri ('b' veya 't')kip
değiştirgesinde daima son karakter olarak belirtin.Öntanımlı dönüşüm kipi kullandığınız PHP sürümüne ve SAPI'ye bağlıdır. Bu bakımdan uyumluluk için daima uygun seçeneği belirtmelisiniz. Salt metin dosyalarla çalışıyorsanız ve betiğinizde satır sonu karakteri olarak
\n
kullanıyorsanız, fakat dosyalarınızın notepad gibi uygulamalarla da okunabilmesini istiyorsanız 't' kipini kullanmanız, diğer tüm durumlarda ise 'b' kipini kullanmanız gerekir.İkil dosyalarla çalışırken 'b' seçeneğini belirtmezseniz, verinizle ilgili tuhaf sorunlarla karşılaşabilirsiniz (örneğin, bozuk resim dosyaları ve
\r\n
karakterlerine bağlı tuhaf sorunlar).
Bilginize:
Uyumluluk adına, dosyaları fopen() ile açarken daima 'b' seçeneğini kullanmanızı hararetle tavsiye ederiz.
Bilginize:
Tekrar, uyumluluk adına, dosyanızı 't' seçeneğinin kullanılmasını gerektirmeyecek satır sonlandırma karakterleri ile yazmanızı ve dosyayı açarken daima 'b' seçeneğini kullanmanızı hararetle tavsiye ederiz.
include_path_kullan
Açacağınız dosyanın aranacağı yollara include_path yönergesinde belirtilen
yolları da dahil etmek isterseniz, isteğe bağlı olan bu üçüncü
değiştirgeyle '1' veya TRUE
değerini aktarmalısınız.
bağlam
Bilginize: Bağlamsal destek PHP 5.0.0 ile eklenmiştir. Bağlamlar hakkında bilgi edinmek için Akım İşlevleri belgesine bakınız.
Başarı durumunda bir dosya tanıtıcısı aksi takdirde FALSE
döner.
Dosya başarıyla açılamazsa E_WARNING
seviyesinde
bir hata üretilir. Bu uyarının çıktılanmaması için işlev isminin başına
@ karakterini
ekleyebilirsiniz.
Sürüm: | Açıklama |
---|---|
4.3.2 | PHP 4.3.2'den beri, ikil ve metin ayrımı yapan tüm platformlar için ikil kip öntanımlıdır. PHP sürümünüzü yükselttikten sonra sorunlarla karşılaşırsanız, betiğinizi taşınabilir duruma getirene kadar sorundan kurtulmak için 't' seçeneğini kullanmayı deneyebilirsiniz. |
4.3.2 | 'x' ve 'x+' seçenekleri eklendi. |
Örnek 1 - fopen() örnekleri
<?php
$dt = fopen("/home/rasmus/file.txt", "r");
$dt = fopen("/home/rasmus/file.gif", "wb");
$dt = fopen("http://www.example.com/", "r");
$dt = fopen("ftp://user:[email protected]/somefile.txt", "w");
?>
Microsoft IIS, SSL kullanırken bir close_notify göndermeden bağlantıyı kapatarak protokolle çelişir. Verinin sonuna ulaştığınız zaman PHP bunu "SSL: Fatal Protocol Error" (SSL: "Ölümcül Protokol Hatası") olarak raporlar. Bu sorunu bertaraf etmek için error_reporting değerini uyarıları içermeyecek bir seviyeye indirmek gerekir. PHP'nin 4.3.7 ve sonraki sürümleri, akımı https:// şemasını kullanarak açarsanız hatalı IIS sunucu yazılımını saptayıp uyarıları engelleyebilir. Bir ssl:// soketi oluşturmak için fsockopen() kullanılacaksa uyarıları saptayıp engellemekten geliştirici sorumludur.
Bilginize: Güvenli kip etkinken, PHP, betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığını sınar.
PHP'nin sunucu modülü sürümünü kullanıyorsanız ve dosyaları okumak ve yazmak ile ilgili sorunlar bakımından deneyimliyseniz, sunucu sürecinin bu dosya ve dizinlere erişim izninin olması gerektiğini aklınızdan çıkarmamalısınız.