GeoIP & fopen() - fopen(GeoIP/GeoIP.dat) [function.fopen]: aliran gagal dibuka meskipun file ada?

Saya telah mencoba men-debug kesalahan ini selama lebih dari tiga jam sekarang, mengubah nama file, mencoba menggunakan GeoIP Lite alih-alih GeoCity (yang terakhir memiliki file 27MB untuk disertakan, begitu pula pemikiran ini fopen() memiliki maksimal), dll.

Inilah struktur file struktur saya: index.php -> include("configuration/config.php") - config.php -> include("inc/geo_text.php") -> geo_text.php

Isi geo_text.php adalah:

$ip = $_SERVER['REMOTE_ADDR'];
include("GeoIP/geoip.inc");
$gi = geoip_open("GeoIP/GeoIP.dat",GEOIP_STANDARD);
$count_name = geoip_country_name_by_addr($gi, $ip);
geoip_close($gi);

echo($count_name);

Sekarang, jika saya mengakses geo_text.php tidak ada kesalahan yang diberikan, dan hanya untuk memastikan saya menempatkan echo($count_name) di geo_text.php dan mengembalikan, sebagaimana mestinya, negara saya.

Namun, ketika saya menjalankan config.php ia mengembalikan kesalahan:

Warning: fopen(GeoIP/GeoIP.dat) [function.fopen]: failed to open stream: No such file or directory in /nfs/c09/h02/mnt/177978/domains/domain.com/html/labs/final/configuration/inc/GeoIP/geoip.inc on line 399 Can not open GeoIP/GeoIP.dat

Adakah yang tahu mengapa ini bisa terjadi?


person Avicinnian    schedule 13.08.2011    source sumber


Jawaban (2)


Ini masalah jalur.

geoip_open("/absolute/path/to/GeoIP/GeoIP.dat",GEOIP_STANDARD);

harus bekerja.

person Joe    schedule 13.08.2011
comment
Tampaknya mencarinya di /nfs/c09/h02/mnt/177978/domains/domain.com/html/labs/final/configuration/inc/GeoIP/GeoIP/geoip.inc, karena geoip.inc sudah ada di Dir GeoIP Anda mungkin hanya perlu mengubahnya menjadi (GeoIP.dat) saja. - person Joe; 14.08.2011
comment
Saya sudah mencobanya, dan tidak berhasil :(. Selain itu, itu tidak menjelaskan mengapa geo_text.php berhasil, tetapi config.php tidak. Saya pikir itu pasti ada hubungannya dengan penyertaan file, tapi Saya tidak yakin apa. - person Avicinnian; 14.08.2011
comment
Ah, itu karena saya tidak menggunakan jalur absolut, tetapi masih tidak menjelaskan mengapa geo_text.php berhasil, dan yang lain tidak. Ketika file A dimasukkan ke dalam file B yang pada gilirannya dimasukkan ke dalam file C, apakah ia berupaya menyelesaikan file A ke file C melalui jalur file B, yaitu jika file B menyertakan C/GeoIP/GeoIP.dat dan file A menyertakan file B, apakah itu juga cari C/GeoIP/GeoIP.dat bukannya B/C/GeoIP/GeoIP.dat atau apalah? - person Avicinnian; 14.08.2011
comment
Karena config.php tidak berada di direktori yang sama dengan geo_text.php menurut saya. Sebagai upaya terakhir, Anda selalu dapat melakukan sesuatu seperti: error_log(Operasi relatif skrip .PHP_SELF .dalam direktori .realpath(__FILE__)); Tambahkan itu ke bagian atas skrip yang dimaksud dan perhatikan log kesalahan Anda, ini akan memberi Anda gambaran tentang situasi jalurnya. Fakta bahwa Anda memiliki 2 direktori GeoIP (satu di dalam yang lain) mungkin yang membingungkan Anda, karena konfigurasi ada di GeoIP dan geo_text mungkin ada di GeoIP/GeoIP. - person Joe; 16.09.2011
comment
Lebih mudah daripada menggunakan jalur absolut lengkap adalah penggunaan dirname agar php mengetahuinya. geoip_open(namadir(FILE).'/geoip/GeoIP.dat,GEOIP_STANDARD); - person Ryaner; 02.05.2012

SSH ke server Anda dan jalankan perintah berikut (dengan asumsi itu adalah server Linux):

cd /nfs/c09/h02/mnt/177978/domains/domain.com/html/labs/final/configuration/inc/GeoIP/
ls -lah

Kemudian tempel hasilnya di sini agar kita dapat melihatnya. Dugaan saya, jalan itu tidak ada.


Itu sangat aneh. Sebagai pengujian, coba pindahkan kedua file geo ke direktori yang sama dengan file kode Anda, lalu ubah jalur dalam kode Anda sesuai dengan itu.


Itu memeriksa file di domain.com, tetapi Anda baru saja masuk ke themeplated.com, itulah masalahnya. Kode Anda harus mengarah ke direktori themeplated.com.

/nfs/c09/h02/mnt/177978/domains/domain.com/html/labs/final/configuration/inc/GeoIP/ /nfs/c09/h02/mnt/127878/domains/< kuat>themeplated.com/html/labs/final/c‌​onfiguration/inc/GeoIP/

person Gerry    schedule 13.08.2011
comment
Maaf lama sekali, saya belum pernah menggunakan SSH sebelumnya: domain.com@n11:/nfs/c09/h02/mnt/127878/domains/themeplated.com/html/labs/final/configuration/inc/GeoIP$ ls -lah total 953K drwxr-xr-x 2 domain.com domain.com 5 13-08-2011 15:23 . drwxr-xr-x 3 domain.com domain.com 6 13-08-2011 15:42 .. -rwxr-xr-x 1 domain.com domain.com 1,2M 13-08-2011 15:11 GeoIP.dat - rwxr-xr-x 1 domain.com domain.com 31K 13-08-2011 15:10 geoip.inc -rwxr-xr-x 1 domain.com domain.com 41 13-08-2011 15:23 var_dump.php - person Avicinnian; 14.08.2011
comment
Jalur yang Anda masuki memiliki themeplated.com di dalamnya tetapi kode di atas mencari file di bawah domain.com, itulah masalahnya. - person Gerry; 14.08.2011
comment
Itu placeholder, saya tidak langsung copy dan paste :(. - person Avicinnian; 14.08.2011
comment
Kemudian silahkan lakukan copy paste semua yang sebelumnya sudah Anda ketik secara manual. Mengetik pesan kesalahan secara manual hanya meningkatkan kemungkinan Anda menduplikasi kesalahan jalur yang Anda buat dalam kode Anda. - person Gerry; 14.08.2011
comment
Saya menemukan masalahnya, saya tidak tahu bahwa beberapa file memerlukan jalur absolut, dan yang lain hanya jalur relatif, jadi saya menggunakan jalur relatif, yang mengacaukan segalanya saat file disertakan. Terima kasih banyak atas masukan dan bantuan Anda :). Jika Anda tidak terlalu sibuk, adakah kemungkinan Anda bisa menjelaskan mengapa hal itu bisa terjadi, atau menghubungkan saya ke referensi jika Anda punya karena saya belum berhasil menemukannya? Saya juga menganggap saya harus membiasakan diri menggunakan jalur absolut di masa mendatang atau adakah cara untuk menentukan apakah suatu file memerlukan jalur absolut? - person Avicinnian; 14.08.2011
comment
Jalur relatif berfungsi dengan baik selama Anda memiliki jalur relatif yang benar. Memberitahu Anda untuk menggunakan jalur absolut hanya mengesampingkan satu hal lagi. - person Gerry; 14.08.2011