Bir dosya erişim engellendi ve nasıl php bir dosyaya hakları (777) vermek üzere olup olmadığını kontrol etmek nasıl?

5 Cevap php

Ben ubuntu üzerinde php çalışıyorum. Ben erişimini reddetti web sayfasındaki herhangi bir görüntü kullandığınızda, sayfa üzerinde uyarı var. Ben görüntülemeden önce kontrol etmek istiyor ve açmak için haklara sahip değilse o zaman bunu açmak için erişim sağlar. Biz terminal komutu olduğu gibi.

chmod 777 myimage.jpg

Bu kontrol ve php bir dosyaya tam erişim vermek için nasıl.

Teşekkürler

5 Cevap

is_readable() ve is_writable() fonksiyonunu kontrol edin.

Örnek:

$filename = '/home/myuser/example.txt';

if (is_readable($filename) && is_writable($filename))
{
    echo "File has read and write permissions.";
}

is_readable() dosya PHP işlemi tarafından okunabilir olup olmadığını kontrol etmek için kullanın.

chmod() dosyanın izinlerini değiştirmek için kullanın.

Ayrıca, size dosyaya yazabilirsiniz eğer is_writable() test etmek için kullanabileceğiniz, ve file_exists() dosya bile var olmadığını görmek için kontrol edin.

Yapabileceğiniz tek şey kullanmaktır fileowner function (and posix_getpwuid ) and compare to whatever your PHP user is (often www-data).

Kullanıcıların aynı iseniz gerekirse izinlerini değiştirmek mümkün olacak. Dosya zaten yazılabilir Ama eğer ilk kontrol.

GÜNCELLEME: chmod ve chown fonksiyonları başarı ve başarısızlık durumunda FALSE TRUE döndürür, bu nedenle bir if fıkrasında onları koymak için iyi bir fikir olacaktır. Sen script başında error_reporting(0);, ayar veya bu gibi @ sembolü kullanarak hata çıktı bastırmak:

if ( @chmod($filename, 0666) ) {
    // do whatever with file
}
else if ( @chown($filename, 1000) ) {
    chmod($filename, 0666);
    // do whatever with file
}
else {
    // can't change permissions
}

PHP anında bir dosya başvurulan her zaman bu Doing dosyalarınızı yönetmek için bir çok verimsiz bir yoldur. Ayrıca bir PHP komut dosyası aracılık tüm dosya erişimi gerektirir. Ayrıca, içerik dünya yazılabilir olmasını sağlayan bakış güvenlik açısından oldukça dağınık.

Ben yeni dosyalar sisteme girdiğinizde sorunu gidermekle daha sonra, varolan dosyalar için izinleri çeki düzen vermek için bir kez bir yönetici komut dosyası çalıştıran ile gitmek istiyorum.

Eğer web sunucusu uid başka birisi olarak kabuk erişimi / kabuk erişimi yok ettik Tabii, eğer, o zaman bu PHP kullanarak (ve dolayısıyla readdir / is_readable / is_writeable) uygulamak gerekir.

Dosyaları sunucunuza nasıl görüneceğini bilmeden onun zor belirli bir çözüm tavsiye etmek.

C.

Eğer dosya okunabilir / yazılabilir yapmak için yapabileceğiniz tek şey ikinci argüman olmadan call this function upon file / folder creation için:

function AutoChmod($path, $chmod = null)
{
    if (file_exists($path) === true)
    {
        if (is_null($chmod) === true)
        {
            $chmod = (is_file($path) === true) ? 644 : 755;

            if (in_array(get_current_user(), array('apache', 'httpd', 'nobody', 'system', 'webdaemon', 'www', 'www-data')) === true)
            {
                $chmod += 22;
            }
        }

        return chmod($path, octdec(intval($chmod)));
    }

    return false;
}

Örnek:

AutoChmod('/path/to/file/you/just/created.txt');

Bu fonksiyon suPHP'ye / SuExecPHP ile çalışan olsun veya olmasın gerekli izni verecektir.


Izinlerini denetlemek için sadece işlevleri is_readable() ve is_writable() kullanmanız gerekir.