Neden file_put_contents () başarılı ama touch () başarısız olur?

3 Cevap php

Ben bir dosyanın içeriğini bazı değişiklikler sonra önce ne değişiklik zamanını sıfırlar yapan bir komut dosyası koşuyorum. Aralıklı, benim günlüğüne aşağıdaki hataları bulacaksınız:

touch() [function.touch]: Utime
failed: Operation not permitted

Bu hat üzerinde bir file_put_contents() çağrı I touch() çalıştı dosyanın içeriğini değişmiş görünüyor hemen sonra. file_put_contents() hattı ile ilişkili herhangi bir hata bulunmamaktadır.

Herkes bu ne oldu? Herkes ne izinleri ayarlamak bana bir dosya yazmak için izin verecek anlamaya ama değişiklik zamanını değiştirebilir miyiz? Linux üzerinde yapıyorum.

3 Cevap

Rossoft dediği gibi, PHP muhtemelen dosyanın sahibi değil. Ancak 777 izinleri ayarlama en iyi çözüm olmayabilir. Ben preferr ediyorum:

function touch_file($file) {
    fclose(fopen($file, 'a'));
}

touch_file('/path/to/file');

Bu dosya yanlış izinleri ile oluşturulan alır mümkün olabilir. Hemen file_put_contents sonra 777 dosyayı chmod deneyin ve sonra dosyaya dokunun.

Sadece son zamanlarda, ben benzer bir sorun yaşadım ve ben cevabı biliyorum.

Dokunma asıl amacı () Bir dosyanın erişim ve değiştirme sürelerini güncellemek için olduğunu. Dosyası oluşturma sadece bir yan etkidir.

Eğer Linux kullanıyorsanız, bir çift önyükleme yapılandırması ile, bölme monte nasıl bağlı, touch () dosyalar üzerinde erişim zaman değişen sorunları olabilir edebileceğiniz gibi, ama bir NTFS bölümü yazma. Dosyası oluşturulur, ancak altta yatan sistem bir hata durumunu döndürür çünkü touch () hala başarısız olur. Aynı şey bir mesaj "izin engellendi" alırsınız komut satırından görülebilir.

Orada montaj, ntfs-3g, veya dokunma (Linux komut) için man sayfalarında bu konu ile ilgili herhangi bir belge olması için görünmüyor, ama sorun touch() PHP işlevi sayfasındaki açıklamalarda bahsedilmektedir.

Tweaking seçenekleri bir çözüm sağlayabilir montaj, ama is_writable() izinlerini kontrol etmek ve fopen() dosyaları oluşturmak için kullanarak daha iyidir.