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.
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.
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:
- 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:
- Bu dosyayı sitenizin bulunduğu sunucuya yükleyin (kök klasörde).
- Tarayıcı üzerinden başlatın (https://siteadiniz.com/myphpinfo.php URL'sini girin).
- 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. Если будет значение Off, то PHP-код обрамлять в традиционные
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üyorsession.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.
Taramalı Atomik Kuvvet Mikroskobu Laboratuvar raporu şunları içermelidir:
İletişim ağının destek raflarının seçimi
AC katener tasarımı ve hesaplanması
Mikroişlemci sistemlerinin geliştirilmesi Mikroişlemci sistemlerinin tasarım aşamaları
mcs51 ailesinin mikrodenetleyicileri