PHP: Bir dosyayı yazabilirsiniz izinleri ayarlama?

6 Cevap php

Burada PHP ile bir dosya oluşturmak için çalışıyorum benim kod:

$file_to_send = 'ftp_test_from_created_file.txt';
chmod($file_to_send, 0777);
$fh = fopen($file_to_send,'w');
$tsv_line = 'Hey\tThese\tAre\tTab\tSeperated\tValues';
fwrite($fh, $tsv_line);
fwrite($fh, '\n');
$tsv_line = 'Hey\tThese\tAre\tToo';
fwrite($fh, $tsv_line);
fclose($fh);

Henüz var olmayan bir dosyanın erişim izinlerini ayarlamak çalışıyorum çünkü bu açıkça bana bir hata verir. Ben chmod çağrı atlamak eğer bana bir başka hata alıyorum ancak ben izinlerini ayarlamak yok. Yani ya ben yumurta döngüsü vs hasta bir tavuk mıyım yoksa içeren dizinin izinlerini ayarlamak gerekir ... ama nasıl? Bu folling tüm çalıştı:

chmod('../containingfolder/', 0777);
chmod('../', 0777);
chmod('', 0777);

Hangi iş hiçbiri ... Ben ne yapmalıyım? Oh ve bir kez ben bittim arada ben geri izinleri değiştirmek gerekir mi?

Teşekkürler!

UPDATE Denedim chmod('.', 0777) ve bu aldım hatadır:

Warning: chmod(): Operation not permitted

The only reason I am trying to make this file is so I can FTP it somewhere else, then I planned to unlink() it. So if there is a better way? Like maybe storing the file in memory to send it(don't know if thats possible)? Also I am using PHP4. Teşekkürler!

6 Cevap

Biz $tmpFolder Emin ona okuma / yazma izinleri gibi webserver çalıştıran kullanıcı bu hale arayacak belge kök dışında bir dizin oluşturun. Daha sonra, aşağıdaki gibidir:

$file_to_send = $tmpFolder . '/ftp_test_from_created_file.txt';
chmod($file_to_send, 0777);
$fh = fopen($file_to_send,'w');
$tsv_line = 'Hey\tThese\tAre\tTab\tSeperated\tValues';
fwrite($fh, $tsv_line);
fwrite($fh, '\n');
$tsv_line = 'Hey\tThese\tAre\tToo';
fwrite($fh, $tsv_line);
fclose($fh);

Ayrıca (apache ise) çalıştıran apache sunucu bu dizinin izinlerini değiştirmek için erişim yok olabilir. Kullanıcı / grup ve apache apache grup ya wwwuser veya başka bir şey üzerinde çalışır gibi root / root olabilir.

Ana dizinde bir ls -l yapmak ve bu klasöre erişimi ne kullanıcı ve grup bakın.

Geçerli dizinin izni değiştirmek için kullanın

chmod('.', PERMISSION);

Gerçekten 0777 ihtiyacınız var mı, yani dünya okuma ve yazılabilir? Bana çok gevşek görünüyor!

Edit: Öneriniz chmod ('.. / Containingfolder /', 0777); çok çalışmış olmalıdır. Eğer olsun hataları hakkında daha ayrıntılı olabilir mi?

Php çalıştıran kullanıcı değişiklik yapamazsınız eğer bir giriş izinlerini ayarlamak olamaz. , Apache config Bakın (varsayılan olarak www-veri) çalıştıran kullanıcı için arama. , Gelecekte bu kaçınmak varsayılan grup olarak aynı gruba kendinizi ayarlayın ve belge kök vermek için chmod-R g+

Geçerli kullanıcı dizine yazabilen varsa, file_put_contents() ile bütün basitleştirmek gerekir.

<?php
$file = 'file_to_write.txt';
$data = "Tab\tseparated\tvalues\nMore\tseparated\tvalues";
file_put_contents($file);

Eğer geçerli dizin (veya ne olursa olsun dizin) yazma izinleri yoksa dosyayı oluşturmak mümkün olacak, dursun chmod bu olmaz.

Eğer chmod() komutları almak hataları sonrası olabilir, bu yardımcı olacaktır.

chmod('.',0777);

çalışması gerekir.

Eğer chroot hapis korumak, henüz hala geçerli dizini chmod ayrıcalıkları gerekir istiyorsanız, almak için-S seçeneği ve boru ile STDIN'den için root şifresini sudo kullanmak için nasıl anlamaya zorunda gidiyoruz ayrıcalıkları.