• 18-03-2007, 01:35:40
    #1
    bir sunucudaki zipli dosyayı kopyalıyorum, ancak sıra taşıma işlemine geldi ve hedef dizini 777 yapmaya çalışıyorum.

    Mevcut hata:
    Alıntı
    Warning: chmod() [function.chmod]: Operation not permitted in /home2/public_html/__test/test.php on line 29
    sorun çıkaran kodlar:

    $dirname = 'dizin/';
    if (is_writable($dirname)) 
    {
       echo ' The file is writable ';
    } 
    else
    {
       echo ' The file is not writable ';
       $path = 'dizin/';
       chmod($path, 0777);
    }
  • 18-03-2007, 04:01:26
    #2
    muhtemelen ssh ile root girişi yaparak dosyayı alıp home klasörlerin içinde bir kullanıcıya attın sonra cpanelden unzip yapmaya çalışıyorsun.
    unzip ten sonra oluştrulan klasörler üzerinde yazma hakkın yok galiba.
    Eğer yukarıdaki gibiyse sorunun tekrar ssh tan girip zip dosyasını açmadan önce zip dosyasının sahibini değiştirmen gerekiyor.home klasörü içinde hangi kullanıcının hesabına attıysan onun hesabına gecmesi lazım dosya sahipliğinin
    Sanırım chown komutu ile yapılıyor olmalı.tam kullanım detayını bilmiyorum ama
    chown yenikullanıcı dosyaadı şeklinde olabilir

    edit :
    sorunlu klasörün veya dosyanın olduğu yere gidip
    ls -l komutunu ver

    drwxr-xr-x 4 cliff user 1024 Jun 18 09:40 WAITRON_EARNINGS
    -rw-r--r-- 1 cliff user 767392 Jun 6 14:28 scanlib.tar.gz


    karşına böle bişi gelcek cliff yazan yer dosyanın sahibi oluyor.
  • 18-03-2007, 19:41:59
    #3
    Biraz daha açayım, bu bir script. Görevi bir sitedeki zip ile sıkıştırılmış bir dosyayı benim alanıma copy() ile kopyalamak. Alanımda 2 dizin var, biri cache/ diğeri de dizin/. copy() ile bu dosyayı önceden FTP ile 777 yapılmış olan cache/ dizinine kopyalıyorum. Sonra dizin/ dizinini 777 yapıp, cache/ ki zipli dosyayı oraya kopyalamaya çalışıyorum.

    Arada cache/ teki zipli dosyayı açmak gibi işlemler var, ancak asıl hedefim olan dizin/ adlı dizini önce 777 yapmak, dosyaları oraya kopyalamak ve sonra tekrar 644 yapmak.

    Dizin adlarını yanlış yazıyor, slaş ları yanlış mı kullanıyorum.

    Asıl konu php ile bir dizinin CHMOD ayarlarını değiştirmek.
  • 18-03-2007, 20:06:29
    #4
    Misafir
    nobody:nobody çalışan php ne kadar sağlıklı değişiklik yapabilir ki ?
  • 18-03-2007, 20:45:45
    #5
    değişikliği yaparsın ama öncelikle işlemleri nerden yapıyorsun copy() komutunu ne ile kullanıyorsun ssh tan wget vs mi yoksa phpden copy ile mi buna bi açıklık getir
  • 18-03-2007, 21:11:56
    #6
    Haymac'ın yazdığı nobody:nobody hakkında hiçbir bilgim yok? Eğer farklı değişiklikler gerekiyorsa bunu script ile yapmam gerek.

    Crash, bu bir script, shell de işimiz yok ve her tür sunucuda çalışması için system komutlarını kullanmayacağım, exec ile shell komutu çağırmak gibi bir lüksümüz yok.

    Bir dizini 777 yapacağım, dosyamı içine atacağım, zipi çözeğim, eski dosyaları silip yerine yenilerini koyacağım, işlmeler birtiğinde CHMOD tekrar eski haline getireceğim.

    Test için hazırladığım kodların tamamı aşağıda:

    <?php
    // uzak siteden dosya kopyalama
    $src = "http://www.adresim.com/dosyam.zip";
    $dst = "cache/dosyam.zip";
    if (!copy($src, $dst))
    {
    	echo "copy from remote server to <strong>" . $dst . "</strong> failed.";
    }
    else
    {
    	echo "copy to cache: Success!";
    //	exit;
    }
    // yeni dizine CHMOD --> sorun burada
    $dirname = 'dizin/';
    if (is_writable($dirname)) 
    {
       echo ' The file is writable ';
    } 
    else
    {
       echo ' The file is not writable ';
       $path = 'dizin/';
       chmod($path, 0777);
    }
    // yeni dizine kopyalama
    $src = "cache/dosyam.zip";
    $dst = "dizin/dosyam.zip";
    if (!copy($src, $dst))
    {
    	echo " copy from remote server to <strong>" . $dst . "</strong> failed. ";
    }
    else
    {
    	echo " copy to tr/: Success! ";
    //	exit;
    }
    ?>
  • 18-03-2007, 22:10:41
    #7
    dizin tanımlaması yaparken
    $dirname = $_SERVER['DOCUMENT_ROOT']."/dizin';
    şeklinde tanımlamayı denermisin.
    yukarıdaki örnekte dizin http://siteadresi.com/dizin e tekabül ediyor
  • 18-03-2007, 23:07:22
    #8
    Göreceli yazarak olacağını düşünmüştüm, localhost'ta kopyalama işlemleri sorunsuz, ancak CHMOD'u test edemiyorum, malum windows'ta.

    is_writable, ve CHMOD için bir de DOCUMENT_ROOT olarak test edip geri döneceğim. Ancak copy komutu göreceli olarak çalışıyor.
  • 19-03-2007, 21:42:28
    #9
    Şu ana kadar yazdığım her şeyi unutun, benim CHMOD ile sorunum var, en basit kod bile hata veriyor:

    Warning: chmod() [function.chmod]: Operation not permitted in public_html/__test/chmod_test.php on line 11

    $dirname = 'test/';
    if (is_writable($dirname)) 
    {
       echo " $dirname dizini yazilabilir";
    } 
    else
    {
       echo " $dirname dizini yazilabilir degil";
       chmod($dirname, 0777);
    }