(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.