php fopen göreli yol kırık - gizem

2 Cevap php

Ben "şey değişti olmalı" biliyorum ama benim kod sebepsiz gece boyunca kırık görünüyor.

Benim sunucu dizin yapısı bu gibi bir şeydir:

/
/scripts
/audit
/other_things

Ben bir senaryo kıvırmak kullanarak bir web sayfasının veri toplar ve bu "denetim" klasöründe okur web sayfasının bir kopyasını kaydeder tarihli "komut" klasörüne (en it "/ scripts / MyScript.php" denir diyelim) var.

Denetim klasöre yazmak için, ben kullanılan

$ Fh = fopen ("./audit/2008-09-09-183000.backup.log", "w");

ancak bu atma, çalışmayı durdurdu

[Function.fopen]: hattında 353 / home/web/website.co.uk/audit/2008-09-09-183000.backup.log böyle bir dosya ya da dizin yok: failed to open stream

Ancak yolunu değiştirerek bu sabit

"../audit/2008 Vb" "./audit/2008" den (yani bir yerine iki tam durak / dönemleri, var)

Mantık şey sunucu yapılandırmasında değişti gerektiğini belirler, ama ne? Ben yönetmek özel bir sunucu. Tekrar nasıl bu olay gibi bir şey önleyebilirsiniz?

Hatta MyScript.php için SVN geçtiniz ve önceki tüm sürümleri single'ı kullandık. yolunda.

2 Cevap

dirname(__FILE__) Geçerli dosya için dosya sistemi yolunu almak için kullanın. Sonra audit dizini bulmak için oradan göreli yolları kullanın.

Örneğin, scripts/MyScript.php içinde, dirname(__FILE__) /home/web/website.co.uk/scripts döndürür. Sen güvenilir /../audit buna ekleyebilirsiniz.

(Bu hatta çalışan Not bir include d veya require d Bu durumda dosya o included dosyasının bulunduğu dizini dönecektir).

Sizin CWD (geçerli çalışma dizini) bu belge kök oldu değişti ve şimdi belge root / scripts.

Eğer nedeniyle bazı yeniden url veya etajer http://website.co.uk/MyScript.php önce yaptım ve şimdi http://website.co.uk/scripts/MyScript.php erişen eğer, örneğin, nedeniyle komut dosyası erişmek için kullanılan yolu olabilirdi.

Ben diğer olası sanıklar vardır hatırlamak gibi görünüyor ama ben şimdi onları hatırlamıyorum. Bazı yeniden yazma kuralları veya URL'ler ile cendereye mi? (Yani, PATH_INFO kullanmaya başladı?)