• اطلاعات غیر قابل اندازه گیری php. ارائه کارآمد فایل ها با PHP. با استفاده از ماژول وب سرور

    اگر نیاز دارید فایل‌ها را نه مستقیماً توسط وب سرور، بلکه با استفاده از PHP ارسال کنید (مثلاً برای جمع‌آوری آمار دانلود)، لطفاً زیر cat.

    1. از readfile() استفاده کنید

    روش خوب است زیرا خارج از جعبه کار می کند. شما فقط باید تابع ارسال فایل خود را بنویسید (نمونه ای کمی تغییر یافته از اسناد رسمی):

    تابع file_force_download($file) ( if (file_exists($file)) ( // بافر خروجی PHP را بازنشانی کنید تا از سرریز شدن حافظه اختصاص داده شده برای اسکریپت جلوگیری کنید // اگر این کار انجام نشود، فایل به طور کامل در حافظه خوانده می شود! (ob_get_level()) (ob_end_clean(); ) // کاری کنید که مرورگر فایل ذخیره شده را نشان دهد header ("Content-Description: File Transfer"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename =" .basename($file)); header("Content-Transfer-Encoding: binary"); header("Expires: 0"); header("Cache-Control: must -revalidate"); header("Pragma: public"); header("Content-Length: ". fileize($file))؛ // فایل را بخوانید و به readfile کاربر ارسال کنید ($file)؛ خروج؛ ) )
    حتی فایل های بزرگ را نیز می توان از این طریق ارسال کرد، زیرا PHP فایل را می خواند و بلافاصله آن را در قسمت هایی به کاربر می دهد. مستندات به وضوح بیان می کند که readfile() نبایدایجاد مشکلات حافظه

    ویژگی ها:

    • فایل در بافر داخلی تابع readfile() خوانده می شود که اندازه آن 8 کیلوبایت است (به لطف 2fast4rabbit)

    2. فایل را به صورت دستی بخوانید و ارسال کنید

    این روش هنگام ارسال فایل ها از یک سیستم فایل خصوصی از همان دروپال استفاده می کند (فایل ها مستقیماً از طریق پیوندها قابل دسترسی نیستند):

    تابع file_force_download($file) ( if (file_exists($file)) ( // بافر خروجی PHP را بازنشانی کنید تا از سرریز شدن حافظه اختصاص داده شده برای اسکریپت جلوگیری کنید // اگر این کار انجام نشود، فایل به طور کامل در حافظه خوانده می شود! (ob_get_level()) (ob_end_clean(); ) // کاری کنید که مرورگر فایل ذخیره شده را نشان دهد header ("Content-Description: File Transfer"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename =" .basename($file)); header("Content-Transfer-Encoding: binary"); header("Expires: 0"); header("Cache-Control: must -revalidate"); header("Pragma: public"); header("Content-Length: ". filesize($file))؛ // فایل را بخوانید و برای کاربر ارسال کنید اگر ($fd = fopen($file , "rb")) ( while (!feof($ fd)) ( print fread($fd, 1024); ) fclose($fd); ) exit; ) )
    ویژگی ها:

    • اسکریپت منتظر می ماند تا کل فایل خوانده شود و به کاربر داده شود.
    • حافظه سرور را ذخیره می کند

    3. از ماژول وب سرور استفاده کنید

    3a. آپاچی
    ماژول XSendFile به شما این امکان را می دهد که با استفاده از یک هدر خاص، یک فایل را به خود آپاچی ارسال کنید. نسخه هایی برای یونیکس و ویندوز، تحت نسخه های 2.0.*، 2.2.* و 2.4.* وجود دارد.

    در تنظیمات میزبان، باید رهگیری هدر را با استفاده از دستورالعمل فعال کنید:
    XSendFile روشن است
    همچنین می‌توانید فهرست سفیدی از دایرکتوری‌ها را مشخص کنید، فایل‌هایی که در آن‌ها قابل پردازش هستند. مهم: اگر سرور مبتنی بر ویندوز دارید، مسیر باید دارای یک حرف بزرگ درایو باشد.

    شرح گزینه های ممکن در وب سایت توسعه دهنده: https://tn123.org/mod_xsendfile/

    نمونه بارگذاری فایل:

    تابع file_force_download($file) ( if (file_exists($file)) ( header("X-SendFile: " . realpath($file)); header("Content-Type: application/octet-stream")؛ header (" Content-Disposition: attachment; filename=" . basename($file)); exit; ) )

    3b. Nginx
    Nginx می تواند فایل ها را از طریق یک هدر مخصوص به خارج از جعبه ارسال کند.

    برای عملکرد صحیح، باید مستقیماً از طریق فایل پیکربندی دسترسی به پوشه را رد کنید:
    مکان /محافظت شده/ (داخلی؛ ریشه /some/path;)
    نمونه ای از ارسال یک فایل (فایل باید در پوشه /some/path/protected باشد):

    تابع file_force_download($file) ( if (file_exists($file)) ( header("X-Accel-Redirect: " . $file); header("Content-Type: application/octet-stream")؛ header( "Content -Disposition: attachment; filename=" . basename($file)); exit; ) )
    اطلاعات بیشتر در صفحه اسناد رسمی

    ویژگی ها:

    • اسکریپت بلافاصله پس از اجرای همه دستورالعمل ها خارج می شود
    • از نظر فیزیکی، فایل توسط ماژول خود وب سرور ارسال می شود و نه توسط PHP
    • حداقل مصرف حافظه و منابع سرور
    • حداکثر عملکرد

    به روز رسانی: Habrauser ilyaplot توصیه خوبی می کند که بهتر است نه application/octet-stream، بلکه نوع mime واقعی فایل ارسال شود. به عنوان مثال، این به مرورگر اجازه می دهد تا برنامه های لازم را در گفتگوی ذخیره فایل جایگزین کند.

    هر نرم افزاری که می خواهید روی وب سرور خود اجرا کنید، الزامات خاصی دارد که باید آنها را برآورده کند. به عنوان مثال، وردپرس به PHP نسخه 5.2.4 یا بالاتر نیاز دارد. بسته به سرور، می توانید برخی از تنظیمات PHP را تغییر دهید، برعکس، تغییر برخی دیگر ممنوع است، با این حال، می توانید اطلاعات مربوط به همه آنها را در فایل phpinfo دریافت کنید. در این آموزش یاد می گیرید که چگونه یک فایل phpinfo بسازید و از مقادیر و وضعیت ماژول های PHP مطلع شوید. همچنین می تواند برای به دست آوردن اطلاعات مربوط به حساب میزبانی شما مانند max_execution_time، memory_limit، post_max_size و موارد دیگر مفید باشد.

    قبل از شروع این راهنما، به موارد زیر نیاز دارید:

    • به کنترل پنل هاست یا حساب FTP خود دسترسی داشته باشید

    گزینه 1 - بررسی اطلاعات PHP از طریق کنترل پنل هاست

    در هاستینگر، اطلاعات PHP حساب شما را می توانید در زیر پیدا کنید اطلاعات بیشتر → PHP. این یک ویژگی بسیار مفید است زیرا نیازی به ایجاد فایل های اضافی در هاست خود ندارید.

    پس از آن، به صفحه‌ای هدایت می‌شوید که تمام اطلاعات لازم در مورد نسخه، ماژول‌ها و مقادیر PHP خود را دارد. برای جستجوی یک ماژول یا عملکرد خاص، با فشار دادن میانبر صفحه کلید از جستجو استفاده کنید CTRL+F.

    تبریک می گویم! شما یاد گرفته اید که چگونه از طریق کنترل پنل هاستینگر به اطلاعات php خود دسترسی داشته باشید.

    گزینه 2 - با ایجاد یک فایل phpinfo.php اطلاعات PHP را تأیید کنید

    اگر پلتفرم میزبانی شما از ویژگی نشان داده شده در آن پشتیبانی نمی کند، نگران نباشید انتخاب 1. همین نتیجه را می توان با ایجاد یک فایل ویژه در داخل اکانت هاست خود به دست آورد. این فایل همچنین تمام اطلاعات مربوط به PHP شما را نشان می دهد و از طریق مرورگر قابل دسترسی خواهد بود.

    مرحله 2.1 - ایجاد یک فایل phpinfo

    راه های مختلفی برای ایجاد فایل phpinfo وجود دارد. در این راهنما از . با این حال، همین نتیجه را می توان با ایجاد فایل در رایانه محلی خود و سپس آپلود فایل در سرور از طریق .

    وارد کنترل پنل هاست خود شوید و باز کنید مدیر فایل. روی دکمه کلیک کنید فایل جدیدبرای ایجاد یک فایل جدید

    در فیلد اول مسیری که فایل جدید در آن ایجاد می شود را مشخص کنید. بعد، در میدان نام فایل جدیدوارد phpinfo.php. در بیشتر موارد، می توانید مسیر را بدون تغییر رها کنید. /public_html. در این صورت فایل در پوشه اصلی سایت شما ایجاد می شود.

    مرحله 2.2 - ویرایش فایل

    در این مرحله شما از قبل یک فایل خالی دارید phpinfo.phpدر کاتالوگ public_html. کد زیر را در یک فایل کپی کنید و روی نماد کلیک کنید صرفه جوییدر گوشه سمت چپ صفحه نمایش

    تمام، شما با موفقیت یک فایل PHP ایجاد کرده اید که تمام گزینه های PHP شما را نمایش می دهد. همانطور که قبلا ذکر شد، همین نتیجه را می توان با موارد زیر بدست آورد:

    1. از هر ویرایشگر متنی استفاده کنید و یک فایل بسازید phpinfo.phpدر کامپیوتر شما.
    2. کد زیر را به فایل اضافه کنید:
    1. فایل را با استفاده از FTP در دایرکتوری خود آپلود کنید public_html.

    مرحله 2.3 - بررسی اطلاعات PHP از طریق یک مرورگر

    اگر همه چیز به درستی انجام شد، اکنون می توانید با افزودن به انتهای نام دامنه خود به فایل ایجاد شده دسترسی داشته باشید hpinfo.php. به عنوان مثال، http://yourdomain.ru/phpinfo.php

    هنگامی که این صفحه را در مرورگر باز می کنید باید نتیجه مشابهی ببینید:

    در این صفحه می توانید تمام تنظیمات PHP خود را مشاهده کنید.

    نتیجه

    در پایان این آموزش، یاد گرفتید که چگونه یک فایل phpinfo بسازید و اطلاعات مربوط به تنظیمات PHP خود را بررسی کنید. اگر می‌خواهید تنظیمات میزبانی خود را بدانید یا نرم‌افزاری را اجرا کنید که به ماژول‌های PHP خاصی نیاز دارد، این اطلاعات مفید است.

    (PHP 3, PHP 4, PHP 5)

    phpinfo - اطلاعات زیادی در مورد PHP نمایش می دهد.

    شرح

    int phpinfo()

    اطلاعات زیادی را در مورد وضعیت فعلی PHP نمایش می دهد. این شامل اطلاعاتی درباره گزینه‌ها و برنامه‌های افزودنی کامپایل PHP، نسخه‌های PHP، اطلاعات سرور و محیط (اگر به صورت ماژول کامپایل شده باشد)، محیط PHP، نسخه سیستم‌عامل، مسیرها، متغیرهای گزینه‌های پیکربندی اصلی و محلی، سرصفحه‌های HTTP و مجوز PHP است. از آنجایی که هر سیستم به طور متفاوتی پیکربندی شده است، phpinfo() معمولاً برای بررسی تنظیمات پیکربندی و در دسترس بودن متغیرهای از پیش تعریف شده در یک سیستم خاص استفاده می شود. همچنین، phpinfo() یک ابزار مهم اشکال زدایی است، زیرا حاوی تمام داده های EGPCS (محیط، GET، POST، کوکی، سرور). یک خروجی را می توان با گذراندن یک یا چند مورد زیر تخصصی کرد ثابتمقادیر بیت در پارامتر اختیاری what خلاصه شده است. همچنین می توانید مقادیر ثابت یا بیت مربوطه را با .

    جدول 1. گزینه های phpinfo().
    نام (ثابت) مقدار توضیحات INFO_GENERAL1 رشته پیکربندی، مکان php.ini، تاریخ ساخت/ساخت، وب سرور، سیستم، و غیره. INFO_CREDITS2 PHP 4 اعتبار. همچنین به phpcredits() مراجعه کنید.INFO_CONFIGURATION4 مقادیر محلی و Master فعلی دستورات php. همچنین به ini_get() مراجعه کنید.INFO_MODULES8ماژول های بارگذاری شده و تنظیمات مربوطه آنها.INFO_ENVIRONMENT16اطلاعات متغیر محیطی نیز در $_ENV موجود است.INFO_VARIABLES32همه متغیرهای از پیش تعریف شده را از EGPCS (Environment, GETOKINinfoie, ENVIRONSE,GETOKINFO4, ENV,GETOIN, PHP, ENVIRONMENT,GETOKINFO, ENVIRONMENT. همچنین مجوز faq .INFO_ALL-1 همه موارد فوق این مقدار پیش فرض است.

    توجه: وقتی تنظیمات پیکربندی expose_php روی خاموش تنظیم شده باشد، بخش هایی از اطلاعات نمایش داده شده غیرفعال می شوند. این شامل لوگوها و اعتبارات PHP و Zend است. همچنین

    این تابع یک جدول حاوی اطلاعات مفید زیادی در مورد تنظیمات php، ماژول های نصب شده، پیکربندی سرور محلی، متغیرهای محیطی، نسخه سیستم عامل، مسیرها، هدرهای HTTP، مجوز PHP و غیره نمایش می دهد.

    تابع phpinfo هنگام بررسی سیستم استفاده می شود، زیرا هر سرور در شبکه تنظیمات منحصر به فرد خود را دارد. اگر اسکریپت روی یک سرور خوب کار کرد و روی دیگری کار نکرد، باید تنظیمات پیکربندی سرور جدید را با استفاده از این عملکرد بررسی کنید.

    ساده ترین راه برای استفاده از این تابع ایجاد یک فایل جداگانه است:

    چیزی شبیه به این را روی صفحه نمایش می دهد:

    شکل 1. تابع phpinfo() در عمل.

    و اطلاعات هنوز در مورد چهار صفحه پایین است.

    phpinfo تابعی است که اطلاعات کاملی در مورد پیکربندی فعلی PHP نمایش می دهد.

    تابع phpinfo
    نام (ثابت)معنی شرح
    INFO_GENERAL 1 اطلاعات پیکربندی عمومی، مکان php.ini، اطلاعات وب سرور، اطلاعات سیستم و غیره.
    INFO_CREDITS 2 اطلاعاتی در مورد توسعه دهندگان PHP همچنین می توان آن را با استفاده از تابع phpcredits () بدست آورد.
    INFO_CONFIGURATION 4 اطلاعاتی در مورد مقادیر فعلی دستورالعمل های اصلی و محلی PHP. همچنین می توان آنها را با استفاده از تابع ini_get() بدست آورد.
    INFO_MODULES 8 ماژول های بارگذاری شده و تنظیمات آنها. همچنین get_loaded_extensions() را ببینید.
    INFO_ENVIRONMENT 16 اطلاعاتی در مورد متغیرهای محیطی که در $_ENV نیز موجود است.
    INFO_VARIABLES 32 خروجی تمام متغیرهای از پیش تعریف شده از EGPCS (محیط، GET، POST، کوکی، سرور).
    INFO_LICENSE 64 اطلاعات مجوز PHP
    INFO_ALL -1 خروجی تمام موارد بالا

    می بینید که تابع phpinfo حاوی داده های EGPCS است، بنابراین می توان از آن برای اشکال زدایی استفاده کرد.

    مقادیر بیتی هستند، بنابراین اعداد استفاده شده 2، 4، 8، 16، 32 و 64 هستند.

    نمونه هایی از استفاده از phpinfo() با آرگومان ها:

    اطلاعات ارائه شده توسط تابع phpinfo() می تواند توسط مهاجمان برای آسیب رساندن به سایت شما استفاده شود. بنابراین، فایل های دارای این تابع باید حذف شوند.

    در سال 2010، منبع معروف روسی برای برنامه نویسان Habrahabr مقاله ای منتشر کرد که داده های یک مطالعه بسیار جالب را ارائه کرد. مشخص شد که 4.69٪ از سایت های روسی حاوی فایل phpinfo.php با تابع phpinfo هستند. در آن زمان، Runet از 36804 سایت تشکیل شده بود، 1725 دارای یک آسیب پذیری بالقوه بود.

    اگر فقط می خواهید بدانید چه نسخه ای از PHP روی سرور است، می توانید از تابع phpversion استفاده کنید.