Metin büyük miktarda eşitlemek için PHP kullanabilirsiniz

4 Cevap php

Ben her gün bizim sunucudan bilgi almak için gereken alanda birkaç dizüstü bilgisayarlar var. Her dizüstü bilgisayar bir yerel web sayfasını başlattı Server2Go kurulum (temelde Apache, PHP, MySQL, bir yürütülebilir dosya olarak çalışan) sahiptir. Web sayfası aşağıdaki kodu kullanarak bizim sunucuda bir URL çağırır:

$handle = fopen( $downloadURL , "rb");
$contents = stream_get_contents( $handle );
fclose( $handle );

$ DownloadURL bizim sunucu üzerinde MySQL veritabanı bilgi ton getirir ve cihaza çıkış olarak sonuçları döndürür. Şu anda kendi SQL deyimi gibi sonuçlar dönen (yani - Ben veritabanını sorgulamak "isimleri DAN adını SELECT", ben metin dizesi cihaza döndürebilir "adları INSERT INTO isimlerini SET = 'JOHN SMITH'"). Bu çevrimiçi veritabanından bilgi alır ve dizüstü bilgisayarın veritabanına yerleştirilmesi için hazır bir SQL deyiminde cihaza döndürür.

Ben çalıştırıyorum sorun veri miktarı çok büyük olmasıdır. Dizüstü web sayfası sunucudan bilgi alınırken aşımından tutar. Ben çok yüksek PHP zaman aşımı sınırlarını ayarlamak, ama hala sorunlar haline çalıştırmak. Herkes bunu yapmak için daha iyi bir yol düşünebiliyor musunuz? Ben küçük parçalar cihaza veri floş eğer stream_get_contents sunucuya bağlı kalmak mı?

Herhangi bir giriş için teşekkür ederiz.

4 Cevap

Ne sadece veri üzerinden göndermek ve alıcı tarafında sql üretmek olur? Bu size iletmek için bayt bir çok kazandıracak.

Veri güncelleme artımlı mı? Yani Sadece son güncellemeden bu yana değişiklikler üzerinde gönderebilir?

Eğer verilerin büyük bir yığın üzerinden göndermek zorunda yaparsanız, sıkıştırmak veya zip ve daha sonra diğer tarafta halletmek yollarını bakmak isteyebilirsiniz. (Bunu nasıl baktı ama php ulaşılabilir olduğunu düşünüyorum mı)

Sunucudaki veritabanından bir metin dosyası derler bir senaryo yazın ve bu dosyayı indirin.

Tüm makineler arasında senkronize son dosyayı almak için Windows Live Sync veya Dropbox gibi üçüncü parti dosya senkronizasyonu hizmetlerini kullanarak düşünebilirsiniz. Daha sonra, sadece dosya değiştiğinde veritabanına dosyayı yükleyen bir cini var. Bu şekilde, tamamen senkronizasyon parça ile uğraşmak zorunda kalmamak.

Bu stream_get_contents kullanırken (ya da open akımına ilave hattının gerek kalmadan file_get_contents kullanabilirsiniz) metin Eğer miktar gibi çok büyükse, ama başlığı size belleği doldurmak gerekir, diyor.

Bellek sınırlı bir uzak sunucuda, bir senaryo yazarken ben bu sorunun geldi, böylece işe yaramaz. Bulduğum çözüm yerine stream_copy_to_stream kullanmak ziyade belleğe diskte doğrudan dosyaları kopyalamak oldu.

Burada complete code işlevselliği bu parça içindir.