Ben yapıyorum PHP varolan bazı kod gördüm
system('hostname');
Bu yöntemi kullanarak, sunucuda performans etkisinin ne kadar büyük olabilir?
Web sunucusuna bağlanmaya çalışıyor müşterilerine binlerce olduğunda dış işlemleri çalıştıran gerçek bir performans isabet olabilir. Insanlar CGI (ortak ağ geçidi arabirimi, dinamik içerik oluşturmak için dış işlemleri çağıran web sunucularının hareket) hendek açılması ve bu Mod_perl gibi kendi web sunucuları, doğrudan kod içeren sona erdi neden budur.
Aşağı sitenize Internet sürüsü oluşturan ordularını, bu yük altında çökecek zaman, evde küçük bir web uygulaması test ederken bunu fark olmaz ama.
Sen çok daha iyi (ne sıklıkta gerçekten, değiştirecek?) PHP'nin kendisi içinde bu bilgileri önbelleğe bir şekilde anlamaya çalışıyor olurdum. Size özel Örneğin, "php_uname('n')"
tam adını (örneğin almak için çağrı, "localhost.example.com"
kullanabilir ve (isteğe bağlı) etki alanı bölümü kapalı şerit, ama istediğiniz kabul ettik soru daha genel anlamda yanıtladı.
Update:
Birisi kriterler talep beri, burada 1.000 yineleme, her üç döngüler yapan bir C program. İlk döngü içinde bir şey yok, ikinci bir ortam değişkeni (PHP kendi hostname almak olması için bir diğer olasılık) alır, üçüncü hostname yürütmek için bir system()
komutu çalıştırır:
#include <stdio.h>
#include <time.h>
#define LOOP1 1000
int main (int c, char *v[]) {
time_t t1, t2, t3, t4;
int i;
t1 = time(NULL);
for (i = 0; i < LOOP1; i++) {
}
t2 = time(NULL);
for (i = 0; i < LOOP1; i++) {
getenv ("xxhostname");
}
t3 = time(NULL);
for (i = 0; i < LOOP1; i++) {
system ("hostname >/dev/null");
}
t4 = time(NULL);
printf ("Loop 1 took %d seconds\n", t2-t1);
printf ("Loop 2 took %d seconds\n", t3-t2);
printf ("Loop 3 took %d seconds\n", t4-t3);
return 0;
}
Sonuçlar şunlardır:
Cygwin (gcc):
Loop 1 took 0 seconds
Loop 2 took 0 seconds
Loop 3 took 103 seconds
Linux on System z (gcc):
Loop 1 took 0 seconds
Loop 2 took 0 seconds
Loop 3 took 5 seconds
Linux on Intel (gcc):
Loop 1 took 0 seconds
Loop 2 took 0 seconds
Loop 3 took 5 seconds
Linux on Power (gcc):
Loop 1 took 0 seconds
Loop 2 took 0 seconds
Loop 3 took 4 seconds
Windows on Intel (VS2008, and using "ver >nul:", not "hostname"):
Loop 1 took 0 seconds
Loop 2 took 0 seconds
Loop 3 took 45 seconds
Bunu slice'n'dice Ancak, bu döngü sayısını 3 uzunca bir tutarsızlık var. Eğer gerçek hayatta herhangi bir umut tutarsan Muhtemelen, bir sitenizde bir hafta vurmak alıyorsanız eğer herhangi bir sorun neden olmaz ama dünya yük altında, önlemek için en iyi olurdu system()
mümkün olduğunca çağırır.
Errm, sen php_uname ve posix_uname farkında, değil mi?
<?php
echo "php_uname: " . php_uname('n') . "\n";
$ar = posix_uname();
echo "posix_uname: $ar[nodename]\n";
?>
hem de çalışması gerekir. PHP 5.3 olarak, gethostname
da vardır.
Ben, grep yürütmek için PHP exec, sistem ve passthru kullanarak sed ve metin dosyaları diğer araçları olan bir site için kullanılır.
Her sayfa görünümü değil, sadece bir süreçte sonuçlanır, ancak iki seferde olurdu böylece bu bunu yaptı. Kerede en fazla 6 süreçler, insanlar ve 503 hataları var - benim paylaşılan barındırma üzerinde işlem limiti ile ilgili sorunlar koştu.
Site popüler olana kadar bu bir sorun değildi. Bunun yerine harici programları çağıran PHP işlevlerini kullanmak için sayfayı tekrar yazmak zorunda kaldı, ve daha hızlı oldu ve 503 hataları düzeltildi. Eğer daha az meşgul bir site, ya da bir özel / sanal sunucu varsa, bu bir sorun olmayabilir.