(PHP 4, PHP 5, PHP 7, PHP 8)
fopen — Bir dosya veya URL'yi açar
$dosyaismi
,$kip
,$include_path_kullan
= false
,$bağlam
= null
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. 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 Desteklenen Protokoller ve Sarmalayıcılar 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:\\dizin\\kaynak.txt", "r");
?>
kip
kip
bağımsız değişkeninde 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çılması dışında 'w' gibidir. |
'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. fseek() işlevi bu kipte etkisiz olup daima dosyanın sonuna yazar. |
'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. fseek() işlevi bu kipte etkisiz olup daima dosyanın sonuna yazar. |
'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; aksi takdirde 'x' verilmiş gibi davranır. eşdeğerdir. |
'c' | Dosya yalnızca yazmak için açılır. Dosya yoksa oluşturulur. Varsa, ne kesilir ('w' bağımsız değişkenininin aksine), ne de bu işleve yapılan çağrı başarısız olur ('x' durumunda olduğu gibi). Dosya konumlayıcı dosyanın başlangıcına yerleştirilir. Dosyayı değiştirmeye çalışmadan önce bir tavsiye kilidi (flock() bölümüne bakın) isteniyorsa bu yararlı olabilir, 'w' kullanımındaki gibi kilitlenmeden önce dosyayı kesebilir (kesme istenirse, kilit talep edildikten sonra ftruncate() kullanılabilir). requested). |
'c+' | Dosya hem okumak hem de yazmak için açılır; aksi takdirde, 'c' bağımsız değişkenindeki gibi davranır. |
'e' | Açık dosya konumlayıcıya close-on-exec bayrağını uygular. Sadece PHP, POSIX.1-2008 uyumlu sistemler üzerinde derlenmişse kullanılabilir. |
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 (Mac OS Classic)\r
karakterini kullanır.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
bağımsız değişkeninde daima son karakter olarak belirtin.Öntanımlı dönüşüm kipi
'b'
'dir. Salt metin dosyalarla çalışıyorsanız ve betiğinizde satır sonu karakteri olarak\n
kullanıyorsanız, fakat dosyalarınızın notepad'in eski sürümleri 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 't' seçeneğini belirseniz, verinizle ilgili tuhaf sorunlarla karşılaşabilirsiniz (örneğin, bozuk görüntü dosyaları ve
\r\n
karakterlerine bağlı tuhaf sorunlar).
Bilginize:
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.
Bilginize: php://output, php://input, php://stdin, php://stdout, php://stderr ve php://fd akım sarmalayıcıları için
kip
yok sayılır.
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ü bağımsız değişkenle '1' veya true
değerini aktarmalısınız.
bağlam
Akım bağlamı özkaynağı.
Başarı durumunda bir dosya tanıtıcısı aksi takdirde false
döner.
Başarısızlık durumunda bir E_WARNING
çıktılanır.
Sürüm: | Açıklama |
---|---|
7.0.16, 7.1.2 | 'e' seçeneği 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:password@example.com/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, akımı https://
şeması kullanılarak açılırsa 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:
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.
Bilginize:
dosyaismi
bir dizin olduğunda da bu işlev başarılı olabilir.dosyaismi
'nin bir dosya mı yoksa bir dizin mi olduğundan emin olamıyorsanız fopen() işlevini çağırmadan önce is_dir() kullanmanız gerekebilir.