open_basedir kısıtlaması yürürlükte. Dosya (/) izin verilen yollar içinde değil:


89

Bu hatayı sitemdeki bir avatar yüklemesinde alıyorum. Daha önce hiç almadım ve bu hatayı almaya başlamam için son zamanlarda hiçbir şey değişmedi ...

Warning: is_writable() [function.is-writable]: 
open_basedir restriction in effect. 
File(/) is not within the allowed path(s):

19
Çalışmayan bir cevabı kabul ettiniz.
sjas

Yanıtlar:


-23

PHP yapılandırmanızdaki open_basedirayarları değiştirin (Bkz. Çalışma Zamanı Yapılandırması ).

open_basedirAyar birincil Başka bir kullanıcının hesabındaki dosyalara erişimini belirli bir kullanıcı için PHP önlemek için kullanılır. Bu nedenle genellikle, kendi hesabınızdaki tüm dosyalar kendi komut dosyalarınız tarafından okunabilir olmalıdır.

.htaccessPHP, bir Linux sisteminde Apache modülü olarak çalışıyorsa, örnek ayarlar :

<DirectoryMatch "/home/sites/site81/">
    php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>

2
Benim .htaccces içine düştü ve yolları değişti sonra bu bana 500 hatası verdi @Nikesh: /my/cutsom/dir/. Neden düşündüğünden emin değilim.
hitautodestruct

79
Harika, yanlış bir cevap için şimdiye kadar 12 olumlu oy. Sen kullanamazsınız php_admin_valueiçinde .htaccessdosyalar . .Htaccess dosyalarında DirectoryMatch'i kullanamazsınız . ( open_basedirDevre dışı bırakılabilseydi ne tür bir güvenlik önlemi olurdu ?)
Álvaro González

1
@eoinoc - Aşağı kaydırın ve örneğin Andrei'nin cevabına bakın. Veya genel php.ini dosyasını düzenleyin.
Álvaro González

19
BUNU KESİNTİSİNİZE KOYMAYIN! AMA SİZİN APACHE YAPILANDIRMA DOSYANIZDA
tfont

8
Kök dizini open_basedir'e dahil etmek open_basedir'in amacını tamamen ortadan kaldırır. Bu çözüm, yalnızca kısıtlamayı esasen devre dışı bırakması anlamında "çalışır".
Martin

118

Barındırma hesabınızdaki open_basedir ayarlarını değiştirin ve hiçbiri olarak ayarlayın. Plesk / cPanel'inizin 'PHP Ayarları' alanında verilen open_basedir ayarını bulun. Orada verilen açılır menüden "yok" olarak ayarlayın. Onları Plesk panel resminde gösterdim.

görüntü açıklamasını buraya girin görüntü açıklamasını buraya girin


1
@yogihosting bunu yaptıktan sonra hata aldım - Belirttiğiniz model bulunamıyor: Home_model
Heemanshu Bhalla

1
Buna biraz geç, ancak bunu tüm plesk siteleri için yapmanın bir yolu var mı? Sitelerin kullandığı sürüm için global php.ini'de none olarak ayarladım: gyazo.com/dfffbe7f9b3a20ede97da72f1ddfc777 Ama yine de hatayı alıyorlar.
Matt Cowley

@MattCowley bunu plesk panelinde barındırılan her site için yapmanız gerekir.
yogihosting

1
Bu çözüm için teşekkürler! Bu benim için Paylaşılan barındırmada mükemmel çalışıyor!
Smilefounder

38

Bu hatayı çözmek için httpd.conf dosyasını düzenlemelisiniz. Phpinfo'da apache2handler bölüm yönergesi Sunucu Kökü'nde görülebilmesinden çok önce. Örneğin benim durumumda bu şekilde - / etc / httpd / httpd.conf. Httpd.conf dosyasını açın, open_basedir parametresinin sözünü bulun. Ve sıfıra ayarlayın. ( php_admin_value open_basedir yok )


'Hiçbiri' olarak ayarlamak benim için çalıştı - bir Plesk arayüzü kullanarak da.
diggersworld

10
Buldum open_basedirskinTenimde yapılandırmayı php.ini. (Raspberry Pi üzerinde php 5 ile Arch Linux)
Dennis van der Schagt

2
Ayrıca php.ini'mde (ayrıca Arch) buldum. Bu cevapla aynı etkiyi elde etmek için sadece satırı yorumlayın.
Ben Elgar

@BenElgar sadece satırda çalışmalardan bahsetti, sadece soruyorum, orada risk var mı
mwangaben

6

Eğer bunu çalıştırıyorsanız php file.php. Düzenlemeniz gerekiyor php.ini Bu dosyayı bul:

: locate php.ini
/etc/php/php.ini

Ve dosyanın yolunu open_basedirözelliğe ekleyin :

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected


Güvenliği tamamen atlamak yerine birden çok özel yola işaret eden tek çözüm budur.
mvreijn

5

Benim için sorun, her şeyi çalıştıran Plesk sunucusu için kötü / eksik yapılandırma değerleri idi. Sadece buradaki talimatları izledim: http://davidseah.com/blog/2007/04/separate-php-error-logs-for-multiple-domains-with-plesk/

PHP'yi her VirtualHost tanımı için ayrı bir hata günlüğü dosyası olacak şekilde yapılandırabilirsiniz. İşin püf noktası, tam olarak nasıl kurulacağını bilmektir, çünkü Plesk'i bozmadan konfigürasyona doğrudan dokunamazsınız. (Dv) 'nizdeki her alan adının / var / www / vhosts içinde kendi dizini vardır. Tipik bir dizin aşağıdaki üst düzey dizinlere sahiptir:

cgi-bin/
conf/
error_docs/
httpdocs/
httpsdocs/
...and so on

Etki alanı dizininin conf / klasöründe aşağıdaki satırlarla bir vhost.conf dosyası oluşturmak isteyeceksiniz:

php_value error_log /path/to/error_log
php_flag display_errors off
php_value error_reporting 6143
php_flag log_errors on

İlk değeri gerçek kurulumunuza uyacak şekilde değiştirin (/tmp/phperrors.log kullandım). Vhost.conf dosyasını düzenlemeyi bitirdikten sonra, yapılandırmayı konsoldan şu şekilde test edin:

apachectl configtest
…or if you don’t have apachectl (as Plesk 8.6 doesn’t seem to)…

/etc/init.d/httpd configtest

Ve son olarak Plesk'e bu değişikliği yaptığınızı söyleyin.

/usr/local/psa/admin/bin/websrvmng -a

2

Başvurduğunuz yol incorect ve çalışma alanınızın directoryRoot'u ile değil. Erişmek istediğiniz dosyaya mutlak bir yol oluşturmayı deneyin, şimdi muhtemelen göreceli bir yol kullanıyorsunuz ...


Mutlak bir yol kullanıyor. Bunun dışındaki tüm kullanıcılar için çalışır.
Webnet

2

ispconfig3 ile bu tür bir sorununuz varsa ve buna benzer bir hata aldıysanız

open_basedir kısıtlaması yürürlükte. Dosya (/ var / www / clients / client7 / web15) izin verilen yol (lar) içinde değil: .........

Bunu çözmek için (benim durumumda), Web sitesinin ispconfig3 panelinde PHP'yi SuPHP'ye ayarlayın.

Umarım birine yardımcı olur :)


2

Bu sorunu @ wordpress sitelerimden birinde güncelleme ve / veya taşıdıktan sonra yaşadım :)

'Wp_options' veritabanı tablosunu 'upload_path' kontrol edin ve uygun şekilde düzenleyin ...


onu hangi değere ayarladın? /[...]/public_html/wp-content/uploads?
brett

1

İspconfig3 kullanılırsa:

Web sitesi bölümüne gidin -> Seçenekler -> PHP open_basedir:

görüntü açıklamasını buraya girin

  • Bu alanda izin verilen yollar açıklanmıştır ve her bir yol ":" ile ayrılmıştır.

/ var / www / clients / client2 / web3 / image: / var / www / clients / client2 / web3 / web: / var / www / ... ve benzeri

  • Öyleyse, benim durumumda erişmek istediğiniz yolu buraya koymalısınız:

/ var / www / clients / client2 / web3 / image:

  • Sorun şu nedenlerle ortaya çıkıyor:

Bir komut dosyası, örneğin include veya fopen () kullanarak dosya sistemine erişmeye çalıştığında, dosyanın konumu kontrol edilir. Dosya belirtilen dizin ağacının dışında olduğunda, PHP ona erişmeyi reddeder.


0

Bir PHP IIS yığını çalıştırıyorsanız ve bu hatayı alıyorsanız, bu genellikle hızlı bir izin düzeltmesidir.

Windows sunucusunu kendiniz yönetiyorsanız ve erişiminiz varsa, İLK olarak şunu deneyin:

Yazma konusunda sizi üzen klasöre gidin ve sağ tıklayın> özellikleri aç> güvenlik.

Hangi kullanıcıların klasöre erişimi olduğunu, hangilerinin salt okunur ve hangilerinin tam olduğunu görün. Yazmayı engelleyen bir grubunuz var mı?

Düzeltme, IIS kurulumunuza özel olacaktır, Anonim Kimlik Doğrulama'yı belirli kullanıcı IUSR'si ile mi yoksa Uygulama Havuzu kimliği ile mi kullanıyorsunuz?

Her halükarda, IUSR, IIS_IUSRS veya uygulama havuzu kimliğiniz için yeni bir tam yazma izni ekleyeceksiniz - dediğim gibi, bu, kurulumunuza ve bunu nasıl yapmak istediğinize bağlı olarak değişecektir. bununla ilgili google tavşan deliğinden aşağı inebilirsiniz (böyle bir gönderi - IIS8'deki IIS_IUSRS ve IUSR izinleri ) Benim için, uygulama havuzu kimliğimle anon kullanıyorum, böylece MACHINE_NAME\IIS_IUSRSherhangi bir geçici süre veya yüklemede tam okuma / yazma ile kurtulabilirim klasörler.

open_basedir =Php.ini dosyama fazladan bir şey eklememe gerek yok .


0

@ Yogihosting'in yanıtına ek olarak , DirectAdmin kullanıyorsanız şu adımları izleyin:

  1. DirectAdmin'in oturum açma sayfasına gidin. Genellikle limanı 2222'dir.
  2. Yönetici olarak giriş yapın. adminVarsayılan olarak kullanıcı adıdır.
  3. Sağ paneldeki "Erişim Düzeyi" nden "Yönetici Düzeyinde" olduğunuzdan emin olun. Değilse, değiştirin.
  4. "Ekstra Özellikler" bölümünden, "Özel HTTPD Yapılandırmaları" nı tıklayın.
  5. Değiştirmek istediğiniz alanı seçin.
  6. Sayfanın üst kısmındaki metin alanına değiştirmek istediğiniz konfigürasyonları girin. Mevcut yapılandırma dosyasını dikkate almalı ve buna bağlı olarak değerleri değiştirmelisiniz. Örneğin, bunun open_basedirbir a içinde ayarlandığını görürseniz, <Directory>değişikliğinizi ilgili <Directory>etiketin içine almanız gerekebilir:

    <Directory "/path/to/directory">
        php_admin_value open_basedir none
    </Directory>
    
  7. Gerekli değişiklikleri yaptıktan sonra, "Kaydet" düğmesine tıklayın.

  8. Şimdi değişikliklerinizin geçerli olsaydı yapılandırma dosyasına kaydedildiğini görmelisiniz.

Bununla birlikte, yapılandırma dosyasını düzenlemenin başka bir yolu vardır:

Dikkat : Dikkatli olun ve hatalarla karşılaşabileceğiniz veya arıza süresine neden olabileceğinden, riski size ait olmak üzere aşağıdaki adımları uygulayın. Yapılandırma dosyasını yanlış bir şekilde değiştirmenizi engellediği ve size hatayı gösterdiği için önerilen yol öncekidir.

  1. Sunucunuza root olarak giriş yapın.
  2. Adresine gidin /usr/local/directadmin/data/users. Listelenen kullanıcılardan değiştirmek istediğiniz alanla ilgili birine gidin.
  3. Burada bir httpd.confdosya var. Ondan bir yedek alın:

    cp httpd.conf httpd.conf.back
    
  4. Şimdi konfigürasyon dosyasını istediğiniz düzenleyicinizle düzenleyin. Örneğin, düzenleme mevcut open_basediretmek none. Bir şeyleri çıkarmaya çalışmayın, aksi takdirde kesinti yaşayabilirsiniz. Düzenledikten sonra dosyayı kaydedin.

  5. Aşağıdaki yollardan birini kullanarak Apache web sunucusunu yeniden başlatın ( sudogerekirse kullanın ):

    httpd -k graceful
    apachectl -k graceful
    apache2 -k graceful
    
  6. Herhangi bir hatayla karşılaşırsanız, ana yapılandırma dosyasını yedeklenen dosyayla değiştirin ve web sunucusunu yeniden başlatın.

Yine ilk çözüm tercih edilen çözümdür ve ilk seferde ikinci yöntemi denememelisiniz. Dikkatte belirtildiği gibi, ilk yolun avantajı, kötü yapılandırılmış öğelerinizi kaydetmeyi engellemesidir.

Umarım yardımcı olur!


0

PHP'yi Windows sunucumda uygulamaya özel ini seçenekleriyle çalıştırmak için bir Apache vhost -File kullanıyorum . Bu nedenle -d kullanıyorum php komutunun seçeneğini .

Her uygulama için open_basedir'i bu seçeneklerden biri olarak ayarlıyorum .

UNC-Path dahil olmak üzere birden çok url'yi open_basedir olarak ayarlamam gerekiyordu ve bu durum için sözdizimini bulmak biraz zordu. Yolları noktalı virgüllerle ayırmanız gerekir ve eğer ilk yolunuz bir sürücü mükellefi ile başlıyorsa, listeyi de noktalı virgülle başlatmanız gerekebilir. En azından benim için çalışan bu.

Misal:

php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/

-3

Sadece ara

open_basedir =

php.ini içinde ve devre dışı bırakın. Bu sorunu çözmek için en basit çözüm budur.

Değişikliklerden Önce open_basedir =

Değişikliklerden Sonra ;open_basedir =

Ps - Değişikliklerden sonra sunucunuzu yeniden başlatmayı unutmayın.

Zevk almak ;)


3
bunu yapma ... güvenlik, ister inan ister inanma, önemlidir. :) Araçlarınızdaki belgeleri okuma zamanı: php.net/manual/en/ini.core.php#ini.open-basedir
Adam Lenda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.