GeoIP & fopen() - fopen(GeoIP/GeoIP.dat) [function.fopen]: ไม่สามารถเปิดสตรีมได้แม้ว่าจะมีไฟล์อยู่หรือไม่

ฉันพยายามแก้ไขข้อผิดพลาดนี้มานานกว่าสามชั่วโมงแล้ว โดยเปลี่ยนชื่อไฟล์ พยายามใช้ GeoIP Lite แทน GeoCity (อย่างหลังมีไฟล์ 27mb ที่จะรวมอยู่ด้วย ดังนั้นความคิดนี้ fopen() มีสูงสุด) ฯลฯ

นี่คือโครงสร้างไฟล์โครงสร้างของฉัน: index.php -> include("configuration/config.php") - config.php -> include("inc/geo_text.php") -> geo_text.php

เนื้อหาของ geo_text.php คือ:

$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);

ตอนนี้ ถ้าฉันเข้าถึง geo_text.php จะไม่มีการระบุข้อผิดพลาด และเพียงเพื่อให้แน่ใจว่าฉันวาง echo($count_name) ใน geo_text.php และมันส่งคืนประเทศของฉันอย่างที่ควรจะเป็น

อย่างไรก็ตาม เมื่อฉันรัน config.php มันส่งคืนข้อผิดพลาด:

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

มีใครมีความคิดบ้างไหมว่าทำไมถึงเป็นเช่นนั้น?


person Avicinnian    schedule 13.08.2011    source แหล่งที่มา


คำตอบ (2)


มันเป็นปัญหาเส้นทาง

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

ควรทำงาน.

person Joe    schedule 13.08.2011
comment
ดูเหมือนว่าจะมองหามันใน /nfs/c09/h02/mnt/177978/domains/domain.com/html/labs/final/configuration/inc/GeoIP/GeoIP/geoip.inc เนื่องจาก geoip.inc มีอยู่แล้ว GeoIP dir คุณอาจต้องเปลี่ยนเป็น (GeoIP.dat) แทน - person Joe; 14.08.2011
comment
ฉันได้ลองแล้ว แต่มันใช้งานไม่ได้ :( นอกจากนี้ มันจะไม่อธิบายว่าทำไม geo_text.php ถึงใช้งานได้ แต่ config.php จะไม่ทำงาน ฉันคิดว่ามันจะต้องเกี่ยวข้องกับการรวมไฟล์ไว้ด้วย แต่ ฉันไม่แน่ใจว่าอะไร - person Avicinnian; 14.08.2011
comment
อา เป็นเพราะฉันไม่ได้ใช้เส้นทางสัมบูรณ์ แต่ก็ยังไม่ได้อธิบายว่าทำไม geo_text.php ถึงใช้งานได้ และคนอื่นๆ ก็ไม่ได้ เมื่อไฟล์ A ถูกรวมไว้ในไฟล์ B ซึ่งในทางกลับกันจะถูกรวมไว้ในไฟล์ C มันจะพยายามแก้ไขไฟล์ A เป็นไฟล์ C ผ่านพาธของไฟล์ B หรือไม่ เช่น ถ้าไฟล์ B รวม C/GeoIP/GeoIP.dat และไฟล์ A รวมไฟล์ B ด้วยเช่นกัน มองหา C/GeoIP/GeoIP.dat แทนที่จะเป็น B/C/GeoIP/GeoIP.dat หรืออะไรสักอย่าง? - person Avicinnian; 14.08.2011
comment
เนื่องจาก config.php ไม่ได้อยู่ในไดเรกทอรีเดียวกันกับ geo_text.php ฉันเดา ทางเลือกสุดท้าย คุณสามารถทำบางอย่างเช่น: error_log(Operating related of script . PHP_SELF . in directory . realpath(__FILE__)); เพิ่มไปที่ด้านบนสุดของสคริปต์ที่เป็นปัญหาและดูบันทึกข้อผิดพลาดของคุณ ซึ่งจะช่วยให้คุณเข้าใจสถานการณ์เส้นทางได้ ความจริงที่ว่าคุณมี GeoIP dirs 2 อัน (อันหนึ่งอยู่ข้างใน) อาจทำให้คุณสับสน เนื่องจาก config อยู่ใน GeoIP และ geo_text อาจอยู่ใน GeoIP/GeoIP - person Joe; 16.09.2011
comment
ง่ายกว่าการใช้เส้นทางแบบเต็มคือการใช้ dirname เพื่อให้ php คิดออก geoip_open(dirname(FILE).'/geoip/GeoIP.dat,GEOIP_STANDARD); - person Ryaner; 02.05.2012

SSH ลงในเซิร์ฟเวอร์ของคุณและรันคำสั่งต่อไปนี้ (สมมติว่าเป็นเซิร์ฟเวอร์ Linux):

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

จากนั้นวางผลลัพธ์ที่นี่เพื่อให้เราดู ฉันเดาว่าเส้นทางนั้นไม่มีอยู่จริง


นั่นแปลกมาก จากการทดสอบ ให้ลองย้ายไฟล์ภูมิศาสตร์ทั้งสองไฟล์ไปไว้ในไดเร็กทอรีเดียวกันกับไฟล์โค้ดของคุณ จากนั้นจึงเปลี่ยนเส้นทางในโค้ดของคุณตามลำดับ


กำลังตรวจสอบไฟล์ใน domain.com แต่คุณเพิ่งเข้าไปใน themeplated.com นั่นคือปัญหา รหัสของคุณต้องชี้ไปที่ไดเร็กทอรี themeplated.com

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

person Gerry    schedule 13.08.2011
comment
ขออภัยที่ใช้เวลานานมาก ฉันไม่เคยใช้ SSH มาก่อน: domain.com@n11:/nfs/c09/h02/mnt/127878/domains/themeplated.com/html/labs/final/configuration/inc/GeoIP$ ls -lah รวมทั้งหมด 9.53K drwxr-xr-x 2 domain.com domain.com 5 13-08-2554 15:23 น. drwxr-xr-x 3 domain.com domain.com 6 2011-08-13 15:42 .. -rwxr-xr-x 1 domain.com domain.com 1.2M 2011-08-13 15:11 GeoIP.dat - rwxr-xr-x 1 domain.com domain.com 31K 2554-08-13 15:10 geoip.inc -rwxr-xr-x 1 domain.com domain.com 41 13-08-2554 15:23 var_dump.php - person Avicinnian; 14.08.2011
comment
เส้นทางที่คุณเข้าไปนั้นมี themeplated.com อยู่ แต่โค้ดด้านบนกำลังมองหาไฟล์ภายใต้ domain.com ซึ่งเป็นปัญหา - person Gerry; 14.08.2011
comment
มันเป็นตัวยึดตำแหน่ง ฉันไม่ได้คัดลอกและวางโดยตรง :( - person Avicinnian; 14.08.2011
comment
จากนั้นโปรดคัดลอกและวางทุกสิ่งที่คุณพิมพ์ด้วยตนเองก่อนหน้านี้ การพิมพ์ข้อความแสดงข้อผิดพลาดด้วยตนเองจะเพิ่มโอกาสที่คุณจะทำซ้ำข้อผิดพลาดเส้นทางที่คุณทำในรหัสของคุณ - person Gerry; 14.08.2011
comment
ฉันเข้าใจปัญหาแล้ว ฉันไม่รู้ว่าไฟล์บางไฟล์จำเป็นต้องมีพาธที่แน่นอน และบางไฟล์ต้องใช้พาธแบบสัมพัทธ์เท่านั้น ดังนั้นฉันจึงใช้พาธแบบสัมพันธ์ ซึ่งทำให้ทุกอย่างยุ่งเหยิงเมื่อรวมไฟล์ไว้ ขอบคุณมากสำหรับข้อมูลและความช่วยเหลือของคุณ :) หากคุณไม่ยุ่งเกินไป มีโอกาสไหมที่คุณจะอธิบายว่าทำไมมันถึงเกิดขึ้นได้ หรือเชื่อมโยงฉันไปยังข้อมูลอ้างอิงหากคุณมีอันหนึ่งเนื่องจากฉันหาไม่เจอ นอกจากนี้ฉันยังใช้มันว่าฉันควรทำนิสัยจากการใช้เส้นทางที่แน่นอนในอนาคตหรือมีวิธีในการพิจารณาว่าไฟล์ต้องการเส้นทางที่แน่นอนหรือไม่? - person Avicinnian; 14.08.2011
comment
เส้นทางสัมพัทธ์ทำงานได้ดีตราบใดที่คุณมีเส้นทางสัมพัทธ์ที่ถูกต้อง การบอกให้คุณใช้เส้นทางที่แน่นอนเป็นเพียงกฎเกณฑ์อีกอย่างหนึ่ง - person Gerry; 14.08.2011