İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Curl ile Alınan İçerikte Array Problemi

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Selam

PHP:
$al = curl_init();
            curl_setopt($al, CURLOPT_URL ,"domainismi");
            curl_setopt($al, CURLOPT_RETURNTRANSFER,1);
            curl_setopt($al, CURLOPT_USERAGENT, 'Firefox / 2.0');
            curl_setopt($al, CURLOPT_REFERER,"domainismi");
            curl_setopt($al, CURLOPT_FOLLOWLOCATION,1);
            $icerik = curl_exec($al);
            curl_close($al);

echo $icerik;  ( Bu bölüm tek başına sorunsuz çalışıyor. Tüm sayfa içeriğini alıyor )

Fakat yukarıdaki $içerik bölümünü kapadığımda ve aşağıdaki 2 satırı açtığımda herhangi bir veri gelmiyor ve çıktı olarak sadece Array ekrana basılıyor.

preg_match_all('#<body>(.*?)<\/body>#si', $icerik, $parca);
echo $parca;

PHP:
print_r ($parca); // çıktısı ise aşağıdaki gibi

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

)

Sorun nerede olabilir ?
 

peep

0
İyinet Üyesi
Onaylı Üye
Katılım
20 Mayıs 2007
Mesajlar
6,382
Reaction score
86
PHP:
echo $parca[1];
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
peep zaten print_r her array içindeki göstermiyor mu ?

PHP:
echo $parca[1]; // çıktısı boş geliyor
print_r ($parca[1]); // çıktısı aşağıdaki gibi

Array
(
)

preg_match_all bölümünde aşağıdaki gibi değişiklik yaptığımda verileri sorunsuz alıyor fakat bana div içindekiler lazım olmadığı için bir işime yaramıyor.

PHP:
preg_match_all('#<div>(.*?)<\/div>#si', $icerik, $parca);
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Yukarıda sorduğum almak istediğim ilk veriyi preg_match_all ile ayrıştıramadım ve mecburen tüm sayfa içeriğini bir dosyaya aldım.

Daha sonra o dosyayı başka bir kod ile ayrıştırarak curl fonksiyonunu entegre ettim ve çalışmasını sağladım.

Esas kod açısından şanslıymışım ki curl kodu ve preg_match_all herhangi bir problem çıkarmadı ve ilgili yerleri ayırarak sorunsuz bir şekilde verileri aldı.

Fakat ilk veriyi istediğim gibi parçalamamasının sebebini henüz bulamadım.
 

Ntie

0
İyinet Üyesi
Katılım
13 Ocak 2007
Mesajlar
0
Reaction score
0
preg_match_all çoklu veri çekimleri içindir.
Siz burada tek veri çekiyorsunuz bunun için preg_match kullanmalısınız bu sayede sorununuz düzelecektir.
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Ntie yaptığım işlemde çoklu veri çekiyorum bir döngü ile birlikte. O yüzden preg_match_all kullanıyorum. Ayrıca curl kullanma sebebim ilgili sitenin file_get_contents, fopen ve get_headers() gibi fonksiyonlara önlem aldığı içindir.
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Şu an sorunsuz bir biçimde çalışıyor sadece ilk veri çekiminde ve ayrıştırmada sorun yaşıyorum.Yukarıda örnek verdim div içindekileri ayırıyor fakat istediğim bölümlerde array boş dönüyor. Bunun diğer ana kod ile alakası yok zaten.

Kısacası işlem şu şekilde : Konuların ve konulara ait olan linklerin olduğu sayfa var. Bu sayfanın ilgili kısmı alınıyor ve diğer ana koda aktarılıyor, bu kod tüm linklere sırasıyla girip linke ait ne içerik varsa alıyor ve veritabanına ekliyor.
 

*siber*

0
İyinet Üyesi
Katılım
20 Temmuz 2005
Mesajlar
2,014
Reaction score
1
Konum
about:blank
evet verdiğim örneğin for ile ne alakası var ? echo içine bak istersen ? $parca[1][$i]

preg_match_all ile çalışıyorsan for kullanman kaçılmazdır aslında. Yani verilerinin array e düşmemesini istiyorsan, $veri[1][parca] şeklinde çekmen gerek.

Yani ilk örneğinde verdiğin kullanım şekline örnek olarak echo $parca[1][5] sana sadece 5. parçayı verir.
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Evet bu döngü ana kod içinde mevcut fakat açtığım konu bununla ilgili değildi.

Benim sorduğum şey curl kodu ile çektiğim verinin <div> tagları arasındaki veriyi alabiliyorken <body> tagları arasındakini alamamamdı.

Bu döngüyü boş bir array elde ederken kullanmak zaten yanlış fakat veriyi aldıktan sonra gereken bir döngü.

Herneyse soruna çözüm bulduğumda buraya yazarım ...
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Metin değilde dinamik bir site ve o siteyi şu an için veremiyorum :) O yüzden burada sordum ki belki dedim daha önceden böyle bir sorunla karşılaşmış olan vardır ve bir çözüm bulmuştur.

Şu anda kendi çapımda bir proje yapıyorum ve bu konuda nerde hata var diye pek detaylı inceleyemedim.İşim bittiğinde detaylı bakıcam artık.
 

Invictus

0
İyinet Üyesi
Katılım
4 Şubat 2010
Mesajlar
328
Reaction score
8
Konum
istanbul
Selam

PHP:
$al = curl_init();
            curl_setopt($al, CURLOPT_URL ,"domainismi");
            curl_setopt($al, CURLOPT_RETURNTRANSFER,1);
            curl_setopt($al, CURLOPT_USERAGENT, 'Firefox / 2.0');
            curl_setopt($al, CURLOPT_REFERER,"domainismi");
            curl_setopt($al, CURLOPT_FOLLOWLOCATION,1);
            $icerik = curl_exec($al);
            curl_close($al);

echo $icerik;  ( Bu bölüm tek başına sorunsuz çalışıyor. Tüm sayfa içeriğini alıyor )

Fakat yukarıdaki $içerik bölümünü kapadığımda ve aşağıdaki 2 satırı açtığımda herhangi bir veri gelmiyor ve çıktı olarak sadece Array ekrana basılıyor.

preg_match_all('#<body>(.*?)<\/body>#si', $icerik, $parca);
echo $parca;

PHP:
print_r ($parca); // çıktısı ise aşağıdaki gibi

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

)

Sorun nerede olabilir ?

belki body tagının içinde bgcolor falan vardır, yabi <body bgcolor=" "> olduğu için eşleşmiyordur. yanlış anlama bazen bu kadar basit şeyler gözden kaçıyor.

yok direk <body> ve </body> sayfada var diyorsan

PHP:
preg_match_all('#<body>(.*?)<\/body>#si', $icerik, $parca);
echo $parca[1][0];
// ya da
echo $parca[1][1];

o da olmazsa

PHP:
preg_match('#<body>(.*?)<\/body>#si', $icerik, $parca);
echo $parca[1];

dene. çünkü içerik tüm sayfayı ekrana bastırdığına göre artık veri $icerik değişkeninde, curl den geçti.
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst