Php ile uzak bir web sayfasını açıp içinden veri almamız gerekirse birkaç farklı yol izleyebiliriz. Birinci grup olarak nitelendirebileceğimiz üç komutla Şimdi tek tek php ile uzak dosyayı açıp nasıl içeriğini okuyabileceğimizi inceleyeceğiz.
Bunun için bir tane a.php adında sayfa oluşturuyorum. Birinci teknik olarak en basit kullanıma sahip olan file_get_contents komutunu kullanabiliriz. kullanım olarak file_get_contents dediğimizde uzak web sitesinin adresini yazarak
<?php
$data = file_get_contents("http://www.programlamatv.com");
echo $data;
?>
Bu komutu verdiğimizde Uzak sayfayı açıp içeriğini direk bize döndercektir. İşte bunu ister herhangi bir değişkene atayarak istersek direk yazdırarak sonucunu görebilirim.
Sayfayı çağırdığımda ise olduğu gibi içeriği yazdır dediğim için açtığım sayfanın içeriğini aynen görüyorum. işte file_get_contents komutuyla herhangi bir web sitesinin adresini vererek direk içeriğini almam mümkün. Eğerki bunun içinde farklı bir adresi almam gerekiyorsa. mesela burdaki gibi çok farklı olmayarak verdigim adres yerine farklı adresi yazacağım ve çalıştıracağım.
Yalnız file_get_contents komutu herhangi bir sayfaya kaynağını görüntüle dediğimizdeki gibi olduğu gibi tek bir değişken halinde bize dönderir. Eğer ki ben satır satır sayfaya erişmek istiyorsam explode ile bu datayı parçalayabilirim. Şöyleki sadece ikinci satıra erişmek istediğimi düşünelim.
New Line yani \n yeni satır karakteri, parçalama işlemini yaparak
<?php
$data = file_get_contents("http://www.programlamatv.com");
$data = explode("\n",$data);
echo $data;
?>
Daha sonrada sıfırdan başlayacak tabiki bu dizimiz. İkinci satırı yazdırmak için birinci dizinin elemanını ver dediğimde ve sayfayı yenilediğimizde sayfanın tekrar kaynağına baktığımda yazdırma işleminin gerçekleştiğini görüyorum. İşte mevcut dataya satır satır erişmem gerekirse file_get_contents yerine file komutunuda kullanabilirim.
Şimdilik file_get_contents komutumuz yukarda kalsın. Bundan farklı olarka file komutuylada herhangi bir sayfayı açabilirim. file komutu verdiğim adresteki sayfayı açınca bana her satır bir dizi elemanı olmak üzere dizi halinde döndercektir.
Yani ben $data eşit file dediğimde ve sayfamı tekrar çağırdığımda 277 satırdan oluştuğunu görüyorum.
<?php
//$data = file_get_contents("http://www.programlamatv.com");
//echo $data;
$data = file("http://www.programlamatv.com");
echo count($data);
?>
İşte herhangi bir satır yazdırmak için yine istediğim herhangi bir satırı mesela onuncu satırı tabi sıfırdan başladığını düşünürsek parametreyi on vermem durumunda onbirinci satırı yazdırmış olacak
<?php
//$data = file_get_contents("http://www.programlamatv.com");
//echo $data;
$data = file("http://www.programlamatv.com");
echo $data[10];
?>
Sayfayı tekrar çağırdığımda ve sayfayı görüntüle dediğimde içeriğin olduğu gibi geldiğini görüyorum.
<meta name="KEYWORDS" content="" />
İşte file_get_contents komutu gibi bunuda tek bir değişken halinde yazdırmak istersem. implode ile birleştirmeye ihtiyacım var.
File komutunun bize avantajı satır satır işlem yapmamız gerekiyorsa file_get_contents ile alıp explode ile parçalamak yerine direk alıp döngüyle satır satır gezebiliriz.
<?php
//$data = file_get_contents("http://www.programlamatv.com");
//echo $data;
$data = file("http://www.programlamatv.com");
echo implode("",$data);
?>
implode ile birleştirdiğim için tek bir değişken halinde normal sayfa şeklinde karşıma açılmış oluyor. ikinci uzak sayfa açma tekniğimizde bu şekilde file komutu ile açabiliriz.
Ve temel dosya açma komutu olarakta yapmaya kalkarsak fopen ile de uzak bir dosya açabiliriz.
Bir tane resource id (kaynak numarası) için değişken tanımlayalım. fopen ile yine aynı sayfamı açıyorum.Sadece okuma işlemi yaptığımızı düşünürsek r yani okuma modu ile sayfamı açıyorum.
Daha sonra sayfayı açıp açmadığını görmek için değişkenimizi bir yazdıralım.
<?php
//$data = file_get_contents("http://www.programlamatv.com");
//echo $data;
//$data = file("http://www.programlamatv.com");
//echo implode("",$data);
$fd = fopen("http://www.programlamatv.com","r");
echo $fd;
?>
Sayfayı tekrar çağırdığımda bana Resource id #2 ile sayfayı sorunsuz açabildiğini gösteriyor.
işte açılmış sayfadan eğerki satır satır okuma işlemini yapmak istiyorsam. fgets komutunu kullanabilirim. Şöyleki ilk başta bir kontrolle sayfanın açılıp açılmadığını kontrol etmiş olalım. Sonrada fgets komutunu vererek parametresi olarakta biraz önce oluşan resource id mizi verelim. ve burdan dönen değeri yazdıralım.
<?php
//$data = file_get_contents("http://www.programlamatv.com");
//echo $data;
//$data = file("http://www.programlamatv.com");
//echo implode("",$data);
$fd = fopen("http://www.programlamatv.com","r");
if($fd){
echo fgets($fd);
}
?>
ilk satırı şu an için okuyacağından dolayı bu komutu yazıp çalıştırdığımızda muhtemelen ilk satırın gelmesini düşünüyoruz. ve sayfayı çağırıyorum. Sayfayı kaynağı görüntüle dediğimde evet ilk satırın karşıma çıktığını görüyorum
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Eğerki tüm satırları okumak istiyorsam sayfa sonunu görene kadar bir döngü içerisinde fgets komutunu kullanmam lazım. işte bunun içinde hemen bir while döngüsü kurup Sayfa sonuna ulaşmayana kadar dön diyerek feof end of file yani sayfa sonuna ulaşıp ulaşmadığını kontrol etmiş oluyoruz. ve bunu bu şekilde bir döngüye alırsam ve sayfamı tekrar çağırırsam
<?php
//$data = file_get_contents("http://www.programlamatv.com");
//echo $data;
//$data = file("http://www.programlamatv.com");
//echo implode("",$data);
$fd = fopen("http://www.programlamatv.com","r");
if($fd){
while(!feof($fd) ){
echo fgets($fd);
}
}
?>
olduğu gibi tüm sayfayı okuduğunu ve yazdırdığını görüyorum. İşte bu işlemi yaparken Biraz önceki gibi bir değişken oluşturmak istersem
<?php
//$data = file_get_contents("http://www.programlamatv.com");
//echo $data;
//$data = file("http://www.programlamatv.com");
//echo implode("",$data);
$fd = fopen("http://www.programlamatv.com","r");
unset($data);
if($fd){
while(!feof($fd) ){
$data .= fgets($fd);
}
}
?>
Değişkenimi tanımlarve bu dönme işleminde değişkene her okuduğum satırı ekleyerek yine sayfamı oluşturabilirim İşte bu üç teknikle basit anlamda sayfamızdan olduğu gibi data okuyabiliriz.
Yalnız çok önemli bir hususa değincek olursak.
Bu işlemlerin bu üç komutun çalışabilmesi için php.ini ayarlarında allow_url_fopen on
allow_url_fopen = On
şeklinde olması gerekir şimdi bunu off yapararak
allow_url_fopen = Off
tek tek tüm komutların hareket tarzlarını görelim. son komutla tekrar başlıyorum.
İlk komutu çalıştıralım
<?php
$ata = file_get_contents("http://www.programlamatv.com");
echo $data;
//$data = file("http://www.programlamatv.com");
//echo implode("",$data);
/*
$fd = fopen("http://www.programlamatv.com","r");
unset($data);
if($fd){
while(!feof($fd) ){
$data .= fgets($fd);
}
}
*/
?>
sayfayı çağırdığımda file-access id disable hatasının verildiğini görüyorum
Warning: file_get_contents() [
function.file-get-contents]: URL file-access is disabled in the server configuration in
D:\htdocs\a.php on line
2
Warning: file_get_contents(http://www.programlamatv.com) [
function.file-get-contents]: failed to open stream: no suitable wrapper could be found in
D:\htdocs\a.php on line
2demekki bu parametre on değilse file_get_contents ile data okumam mümkün değil
birde file komutunu deniyorum. evet. yine aynı hatayı aldım.
<?php
//$ata = file_get_contents("http://www.programlamatv.com");
//echo $data;
$data = file("http://www.programlamatv.com");
echo implode("",$data);
/*
$fd = fopen("http://www.programlamatv.com","r");
unset($data);
if($fd){
while(!feof($fd) ){
$data .= fgets($fd);
}
}
*/
?>
Warning: file() [
function.file]: URL file-access is disabled in the server configuration in
D:\htdocs\a.php on line
4
Warning: file(http://www.programlamatv.com) [
function.file]: failed to open stream: no suitable wrapper could be found in
D:\htdocs\a.php on line
4
Warning: implode() [
function.implode]: Invalid arguments passed in
D:\htdocs\a.php on line
5Yani file komutu ile okumak içinde bu ayarın aktif olmasına ihtiyacım var
Ve son fgets i denediğimde yine aynı sonucu alıyorum
<?php
//$ata = file_get_contents("http://www.programlamatv.com");
//echo $data;
//$data = file("http://www.programlamatv.com");
//echo implode("",$data);
$fd = fopen("http://www.programlamatv.com","r");
unset($data);
if($fd){
while(!feof($fd) ){
$data .= fgets($fd);
}
}
?>
Warning: fopen() [
function.fopen]: URL file-access is disabled in the server configuration in
D:\htdocs\a.php on line
6
Warning: fopen(http://www.programlamatv.com) [
function.fopen]: failed to open stream: no suitable wrapper could be found in
D:\htdocs\a.php on line
6Doğal olarak bu üç komutun çalışması için php.ini de
allow_url_fopen komutunun On şeklinde olması lazım
allow_url_fopen = On
İşte bu on olduğunda yapmak istediğim işleme göre file_get_contents ile direk sayfayı okuyabilirim. veya file ile dizi halinde satır satır sayfayı okuyabilirim.
veya fopen ile satır satır yine sayfayı okuyabilirim. Burdaki yaklaşıma şöyle bakabilirsiniz. Ben niye file_get_contents varken fopen ile uğraşayım Yalnız file_get_contents bize olduğu gibi sayfanın tamamını ve tek bir değişken halinde verir sayfanın büyük içerikli olduğunu düşünürseniz veya normal bir sayfadan ziyade datayı içeren herhangi bir dosya olduğunu düşünürseniz veya bir dosyayı indirmek için bu mantıkları kullanmak istediğinizi düşünürseniz file_get_contents ile çok büyük bir dosya okuyamaya kalkmış olursunuz ve hafıza yetersiz ise sonuca ulaşamazsınız. Bundan dolayı bu gibi durumlarda fopen ile satır satır okuyarak çok büyük dosyalarada erişebilirsiniz. İşte bu temel işlevleri kullanarak Bu üç komutu sayfaları okumak için kullanmamız mümkündür.