Bir Perl ve PHP arasında paylaşılan bir dosyaya Güvenli Eşzamanlı Yaz

4 Cevap php

(Ben kontrol etmiyorum) bir Perl betiği periyodik bir metin dosyasının sonuna satırları ekler.

Ben, o dosyadan satırları okumak süreç onları, ve sonra dosyadan bunları kaldırmak için (bir cron işi olarak çalışacak) benim PHP komut dosyası gerekir. PHP ile bir dosyadan bir satırı kaldırmak için tek yol, bir değişken içine dosyayı okumak bir satır kaldırmak, dosyayı kesecek, ve sonra dosyayı yeniden yazmak gibi ama, öyle görünüyor.

Ama ne olur:

  1. PHP dosyasını okur
  2. Perl Script yeni bir satır ekler.
  3. PHP komut dosyası üzerinde geri modifiye tampon yazıyor.

PHP komut bitirir ve dosyayı güncelleştirir zaman üzerine olacağını çünkü bu durumda yeni hat kayıp olacaktır.

Perl saygı duyacak bir şekilde PHP kullanarak bir dosyayı kilitlemek için bir yolu var mı? Bu sürüsü gibi () fonksiyonu özel PHP görünüyor.

4 Cevap

Eğer tasarımını değiştirmek için herhangi bir özgürlük var mı? Dosyasından işlenmiş satırları sizin işleme önemli bir parçası kaldırmak mı?

Nasıl perl-üretilen dosya büyümeye izin hakkında bu özgürlüğü varsa. Muhtemelen perl script yazarları zaten aklında temizlik çeşit var? Işlenmiş ne kendi "log" korumak. Script başladığında o zaman "log" kaydedilen noktasına kadar perl dosyasını okur. Bir rekor işlemek, günlüğünü güncelleştirmek.

Eğer kontrol edemiyorum Perl script, zaten sürünün üzerinden dosya kilitleme uygulayan varsa, ince. (Ve ben biz varsaymak zorunda korkuyorum) değilse, şans dışında.

Bir başka olasılık yerine bir dosyaya perl komut yazma sahip, bir named pipe yazmanıza izin ve php komut diğer ucunda direkt okumak ve gerçek bir dosyaya yazalım sahip olacaktır.

Belki bunun yerine aynı dosya üzerinde çalışan bir kopyası üzerinde php script çalışma izin verebilir? Ben üç dosyaları ile çalışmak olabilir düşünün:

  1. Perl script tarafından yazılı dosya
  2. 1 dosyasının bir kopyası
  3. Dosyanın 2 A işlenmiş versiyonu

Php komut başladığında dosya 1 dosya 2 daha yeni eğer, o kontrol eder, ve bu yüzden yeni bir kopyasını yaparsa, bu işler (muhtemelen zaten önceden işlenmiş hatlarının sayısını atlama) ve bu 3 dosya yazıyor.