نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی

بخش چت php. ایجاد توابع با تعداد متغیر آرگومان

مقاله ای که در مورد HTML بحث می کند عنصر بخشاز دسته بندی

هدف عنصر بخش

عنصر بخش برای ایجاد بخشی در یک سند استفاده می شود که برخی از مطالب موضوعی را با هم گروه بندی می کند. برای هر بخش در سند، نام (موضوع) آن باید مشخص شود. این کار معمولاً با هدرها (عناصر h1-h6) انجام می شود.

عنوان بخش

محتوای بخش ...

عناصر بخش معمولاً در شرایط زیر استفاده می شوند:

  • برای علامت گذاری بخش ها در یک بخش. به عنوان مثال، برای علامت گذاری فصل ها در یک مقاله، برگه ها در کادر محاوره ای، بخش هایی در پایان نامه و غیره.
  • برای گروه بندی چندین بخش در یک گروه موضوعی... مثلا برای گروه بندی آخرین خبرهادر وب سایت، نظرات در مورد مقاله، و غیره.

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

با استفاده از عنصر بخش

به عنوان مثال، قطعه ای از کد صفحه را در نظر بگیرید که حاوی یک مقاله با نظرات است. هر یک از نظرات ارسال شده توسط کاربر در صفحه حاوی محتوای کاملی است و بنابراین می توان آن را یک عنصر مقاله در نظر گرفت. اما، در عین حال، همه نظرات یک گروه موضوعی خاص را نشان می دهند، و بنابراین می توان آنها را در عنصر بخش قرار داد، یعنی. عنصر داده شدههمه این نظرات را در صفحه با هم گروه بندی می کند.

عنوان مقاله

نظرات (1)

سرصفحه نظر

متن نظر ...

سرصفحه نظر

متن نظر ...

عنوان مقاله نظرات عنوان نظر عنوان نظر

به عنوان مثال، استفاده از عناصر بخش را برای ایجاد بخش ها در یک عنصر مقاله در نظر بگیرید:

نام کتاب

فصل اول

فصل دوم

فصل سه

پیوست اول

ضمیمه B

مثال بالا طرح کلی زیر را خواهد داشت:

عنوان کتاب فصل اول فصل دوم فصل سوم پیوست الف پیوست ب

محدودیت های استفاده از عنصر بخش

عنصر بخش در HTML 5 یک عنصر عمومی برای گروه بندی محتوا نیست، یعنی. نباید برای بسته بندی هر محتوایی که دوست دارید استفاده شود. هدف اصلی آن افزودن معناشناسی به سند و ایجاد طرح کلی آن است.

زمانی که نویسنده نیاز به گروه بندی محتوا دارد تا آن را در جاوا اسکریپت سبک یا دستکاری کند، بهترین مکان برای او استفاده از عنصر div است. عنصر div بر خلاف عنصر بخش، معنایی را به سند اضافه نمی کند و در ایجاد طرح کلی (طرح کلی) آن شرکت نمی کند.

تفاوت بین عناصر بخش و مقاله

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

اما چگونه یک نویسنده می تواند بفهمد که برخی از محتوای یک صفحه چیست؟ بیایید با استفاده از نمونه ای از یک قطعه مقاله به این موضوع نگاه کنیم. یک قطعه بخشی از یک مقاله است و بنابراین باید از عنصر بخش برای گروه بندی محتوای آن استفاده شود. اما همان قطعه، که قبلاً به عنوان تفسیر باقی مانده است، چیزی کامل و کامل را نشان می دهد. بنابراین در این زمینه می توان از عنصر مقاله برای گروه بندی آن استفاده کرد. اما مسلماً می توان استدلال کرد و بالعکس. بنابراین، اینکه از کدام عنصر برای گروه بندی محتوا استفاده کنید، در بیشتر موارد به نظر ذهنی شما به عنوان نویسنده بستگی دارد. اما مهمترین چیز در این رویکرد حفظ موقعیت انتخابی است. بنابراین، هر چه نویسنده در ایجاد ساختار سازگارتر باشد، حس بیشتری می تواند به آن بپردازد.

قالب های Bitrix را می توان به چند نوع تقسیم کرد:
  • الگوهای کامپوننت مشترک و پیچیده 2.0
  • قالب سایت
  • سایر قالب‌های موجودیت (پست‌ها، شماره‌های خبرنامه، فرم‌های وب، تولیدکنندگان صادرات و موارد دیگر)

قالب های کامپوننت حتی قابلیت استفاده از موتورهای قالب را دارند. در اصل، شما می توانید هر موتور قالب را وصل کنید، اما هیچ ابزار کمکی خارج از جعبه وجود ندارد. اگر کسی به آن نیاز دارد، من چند لینک به اکستنشن های شاخه و تیغ دارم که کار می کنند و کاملاً برای خودشان در تولید استفاده می شوند. اما حتی در اینجا Bitrixoids منحرف شده اند. موتور قالب فقط با قطعات قابل استفاده است. اتصال موتور قالب به رندر قالب سایت یا سایر نهادها کار نخواهد کرد، زیرا هیچ رندری وجود ندارد

در قالب های کامپوننت، یک لحظه آزاردهنده دیگر با قرار دادن آنها وجود دارد. کامپوننت با استفاده از یک ساختار ساده متصل می شود
$ APPLICATION-> IncludeComponent ("bitrix: catalog.section"، "template_name");
پارامتر دوم نام قالب کامپوننت است. بنابراین بسته به شرایط مختلف، مکان این الگو می تواند در غیرمنتظره ترین مکان ها باشد:

  • bitrix / components / bitrix / catalog.section / templates / template_name
  • local / components / bitrix / catalog.section / templates / template_name
  • bitrix / templates / .default / components / bitrix / catalog.section / template_name
  • bitrix / templates / site_template / components / bitrix / catalog.section / template_name
  • local / templates / .default / components / bitrix / catalog.section / template_name
  • local / templates / site_template / components / bitrix / catalog.section / template_name
  • bitrix / components / bitrix / catalog / templates / .default / bitrix / catalog.section / template_name
  • local / templates / site_template / components / bitrix / catalog / .default / bitrix / catalog.section / template_name
و من همه گزینه ها را لیست نکرده ام ...

یک قالب سایت را می توان به عنوان مجموعه ای از فایل ها مشاهده کرد: header.php، footer.php (بله، سایت باید آنها را داشته باشد)، description.php ( توضیحات سیستمقالب سایت)، template_styles.css (سبک های قالب سایت)، فهرستی با قالب های مؤلفه و دسته ای از فایل های کم اهمیت تر. و این همه است. و به هیچ وجه بر آن تأثیر نگذارید، هیچ کاری در مورد آن انجام ندهید. نمی توان موتور الگو را انتخاب کرد.

در مورد سایر قالب ها چیزی برای گفتن وجود ندارد. آنها یا به سادگی در پایگاه داده در قالب یک طرح با گنجاندن برخی از داده های "متغیر" ذخیره می شوند، یا احمقانه است. فایل php، که همه کارها را انجام می دهد، از واکشی پارامترها از پایگاه داده تا نمایش اطلاعات. به عنوان مثال، می توانید به تولید کننده فایل YML برای بازار نگاه کنید. هیچ فایده ای برای قرار دادن آن در اینجا وجود ندارد، زیرا به اندازه کافی بزرگ است، حدود 2k خط. هرکس به آن نیاز داشته باشد آن را در گوگل جستجو می کند، در /bitrix/modules/catalog/load/yandex_run.php نهفته است.

ماهیت فایل

همانطور که در بالا مشخص شد، در معماری Bitrix همه چیز خیلی خوب نیست. اما Bitrix یک جنبه مهم دیگر از معماری نیز دارد.
Bitrix یک نیم فایل CMS است. بسیاری از چیزها توسط برخی از فایل ها کنترل می شوند:

  • به یک صفحه نیاز دارید - یک فایل ایجاد کنید
  • شما به مجموعه ای از صفحات نیاز دارید - یک فایل بسازید و مؤلفه ای را وصل کنید که با بلوک های اطلاعاتی کار می کند
  • شما باید یک عنوان برای صفحه تنظیم کنید - فایل را ویرایش کنید
  • شما باید یک عنوان برای تمام صفحات بخش تنظیم کنید - یک file.section.php ویژه در ریشه این بخش ایجاد کنید.
  • شما باید حقوق را ویرایش کنید - file.access.php را ویرایش کنید
  • تنظیمات قبل از راه اندازی سیستم - در فایل های dbconn.php، .settings.php و .settings_extra.php
  • result_modifier.php، component_epilog.php، init.php، .parameters.php، .description.php ....

و بسیاری از چنین فایل های ویژه ای در Bitrix پراکنده هستند. از یک طرف، این انعطاف پذیری خاصی را هنگام کار با سیستم می دهد. از طرف دیگر، هم برای توسعه دهنده و هم برای مدیر سایت می تواند به عذاب تبدیل شود. فایل‌های صفحه گاهی اوقات به کدهای php، طرح‌بندی و اجزای افزونه تبدیل می‌شوند. در نتیجه ویرایشگر بصریممکن است این فایل را به اشتباه تجزیه کند و در هنگام ویرایش آن در برخی مکان ها به راحتی از تگ های php فرار کند که منجر به از کار افتادن صفحه می شود. شما می گویید - نیازی به نوشتن کد php در چنین فایل هایی نیست؟ بله میدانم. اما Bitrix اغلب و هیچ جایگزینی ندارد شما را مجبور به انجام این کار می کند.
و در سر شما باید دائماً اطلاعاتی در مورد نوع فایل هایی که آنها هستند و چه داده هایی ممکن است داشته باشند نگه دارید. V فایل های مختلفباید حاوی داده های مختلف با ساختار متفاوتو باید آن را برای هر گزینه به خاطر بسپارید. هر بار جستجوی آن در اسناد کار سختی است.

علاوه بر موارد فوق

می توانید بی انتها از این که چقدر همه چیز در Bitrix بد چیده شده شکایت کنید. به نظر من، همه این شکایات را می توان با یک عبارت مشخص کرد - "به نحوی نه تا آخر". و در واقع، اگر Bitrixoids به طور ناگهانی ویژگی خاصی را اعلام کند، به نوعی آن را به طور کامل آزاد نمی کند، آن را تمام نمی کند، آن را به ذهن نمی آورد. مثال های زیادی وجود دارد:

  • ORM پیاده سازی شده - آن را کامل نکردید، نمی توانید به طور کامل از آن استفاده کنید
  • یک بارگذار خودکار ساخته شده است، فقط در ماژول ها کار می کند و نه با استانداردها
  • اتصال موتور قالب را ممکن کرد، اما نمی توانید آن را در همه جا و نه به طور کامل استفاده کنید
  • و غیره. و غیره.

به طور خلاصه، سعی می کنم بقیه مشکلاتی را که هر روز با آنها روبرو هستیم، توصیف کنم.

پنل مدیریت

اگر شخصی با پنل مدیریت کار کند، صفحات خود را در بخش مدیریتی به روشی که Bitrix پیشنهاد می کند ایجاد کند، من را درک خواهد کرد. این فقط جهنم است. برای کسانی که اطلاعی ندارند، Bitrix استفاده از یک فایل نودل برای هر صفحه را پیشنهاد می کند. به عنوان مثال، صفحه مشاهده دقیق سفارش در پنل مدیریت که توسط توسعه دهندگان Bitrix انجام می شود بیش از خطوط 4k را اشغال می کند. IDE من هنگام مشاهده محتویات این فایل شروع به کند شدن می کند. در آنجا شما php، js و html دارید. خوب، حداقل ما از شر SQL خلاص شدیم، اگرچه مطمئن هستم که در سایر صفحات مدیریت وجود دارد.
و چه چیزی مانع از کار کردن صفحات مدیریتی با همان مؤلفه ها شده است، مشخص نیست. به سادگی هیچ راهی برای سفارشی کردن بیشتر صفحات مدیریت وجود ندارد. در مورد قطعات، این را می توان در کوتاه ترین زمان انجام داد.
راستی، مردم خوبماژولی ساخته است که به شما در ساخت صفحات اداری کمک می کند

چارچوب js

Bitrix یک جزء js دارد که به عنوان نوعی چارچوب مشتری عمل می کند. هیچ یک از توسعه دهندگان به چند دلیل آن را دوست ندارند:
  • تقریباً بدون سند است
  • او هیولا است
  • تا حد زیادی jquery را کپی می کند، که برای بسیاری آشناست

Bitrix اغلب از آن در اجزای خود استفاده می کند و در نتیجه باعث خشم بیشتر توسعه دهندگان می شود. هسته اصلی این کتابخانه به صورت مینی شده 85 کیلوبایت است که بسیار بزرگ است. اگر بخواهید از تمام قابلیت های Bitrix (کامپوزیت، مدیریت دارایی) استفاده کنید، نمی توانید از اتصال آن اجتناب کنید.

روح کپی پیست

V در این اواخرکمتر و کمتر، اما هنوز هم اغلب اوقات، Bitrix چیزی برای کپی و چسباندن می سازد. اگر می خواهید کار یک جزء را تغییر دهید - کپی-پیست. اگر می خواهید الگوی بارگیری خود را ایجاد کنید، کپی سیستم را کپی کرده و تمام کنید. اگر می خواهید تقریباً همان قالبی را که دارید بسازید - کپی و پیست کنید و کمی آن را تغییر دهید. و حتی در دوره هایی برای توسعه دهندگان مبتدی در مورد این موضوع صحبت شده است. من حرفی ندارم

مدیریت دارایی و CDN

من روش مدیریت منابع در Bitrix را خیلی دوست دارم. اصولاً امکان ثبت مجموعه ای از «کتابخانه های» خاص وجود دارد. هر کتابخانه مجموعه ای از فایل های css / js است که ممکن است به برخی از کتابخانه های دیگر بستگی داشته باشد. اگر کتابخانه ای را به صفحه متصل کنید، قبل از اتصال آن، تمام وابستگی ها برطرف می شود و همه کتابخانه های وابسته در صفحه درج می شوند. به نظر می رسد همه چیز خوب است، فقط هر منبع در فرم درج می شود یک فایل جداگانهبه یک اسکریپت یا برچسب پیوند. و به لطف این، سایت هایی وجود دارند که 30-50 اسکریپت و همین تعداد فایل سبک متصل هستند.
آنها در Bitrix گفتند و یک تیک جادویی ساختند که همه این فایل ها را با هم ترکیب می کند. و سایت هایی بودند که به جای 50 اسکریپت 2 تا 300-500 کیلوبایت وجود داشت. چند وقت پیش این ادغام با خطا کار می کرد و چندین بار همان منابع را ادغام می کرد، اما اکنون به نظر می رسد رفع شده است.
و سپس Bitrixoids خارج شد - آنها بارگذاری تمام منابع را در یک سرور CDN ممکن کردند. که برای همیشه می افتد...
سپس Google Pagespeed Insights ظاهر شد که توصیه می‌کند همه منابع را حذف کنید بخش پایینیصفحات و در Bitrix دوباره یک تیک جادویی درست کردند که احمقانه تمام منابع بدن را حذف می کند، اگر با یک ویژگی خاص مشخص نشده باشند.
و همچنین نسخه‌های کوچک‌شده اسکریپت‌های خود را به همراه جعبه توزیع می‌کنند، که هنگام استفاده از چک باکس جادویی دیگر در پنل مدیریت به هم متصل می‌شوند.
به طور کلی، نه scss برای شما، نه TypeScript. اگر می خواهید منابع را به درستی مدیریت کنید - از سیستم داخلی Bitrix استفاده نکنید، از وب پک استفاده کنید که به راحتی می توانید با Bitrix دوست شوید.

چند سایتی / چند زبانه

این احتمالاً بدترین سردرد توسعه دهندگان است که از زمان آغاز به کار این محصول وجود داشته است. شما نمی توانید آن را انتخاب کنید و یک وب سایت چند زبانه ایجاد کنید. و اگر به دایرکتوری چند زبانه نیاز دارید با قیمت های مختلفو ارزها - به آرد تبدیل می شود، که برای آن نیز باید مبلغ منظمی بپردازید (برای خرید مجوز اضافی برای نسخه زبان بعدی سایت باید هزینه کنید).
اگر در حال ایجاد یک سایت چند زبانه و چند ارزی هستید، برای این واقعیت آماده باشید که Bitrix بسیار تهاجمی در برابر این امر مقاومت می کند. تنظیمات چند سایت در سراسر منطقه مدیریت غیرمتمرکز هستند. هر نهاد در پنل مدیریت وابستگی خاص خود را به نسخه زبان سایت دارد. ممکن است برخی از موجودیت‌ها اصلاً از وابستگی‌های سایت/زبان پشتیبانی نکنند، و برخی فقط یک اتصال صریح به زبان دارند، بنابراین باید این موجودیت را کپی کنید و سپس از آن پشتیبانی کنید.
V نسخه پایهبرای اینکه infoblock به چندین زبان کار کند، باید یک کپی از این infoblock ایجاد کنید. اما در عمل، هیچ‌کس این کار را انجام نمی‌دهد، و سعی می‌کند راه‌های خاص خود را برای ذخیره‌سازی یک موجودیت در مرکز پیدا کند و ویژگی‌های وابسته به زبان آن را به ذخیره‌سازی‌های دیگر گسترش دهد.
شما نمی توانید زبان پیش فرض را برای محلی سازی تنظیم کنید. اگر متغیر زبانی دارید که عبارتی را به زبان روسی توصیف می کند و این متغیر زبان به زبان انگلیسی نیست، سایت انگلیسی نشان می دهد خط خالی، و به هیچ وجه نمی توان آن را تحت تأثیر قرار داد (در بسیاری از موارد می توان عبارت روسی را به گونه ای ترک کرد که هیچ فضای خالی وجود نداشته باشد).

مکانیزم مدیریت حقوق

ما با این زیرسیستم بسیار مشکل داریم. اغلب دشوار است که بفهمیم چرا حقوق مشاهده یک موجودیت را اعطا کرده‌اید، اما کاربر نمی‌تواند از آنها استفاده کند. به عنوان مثال، برای اعطای حق ویرایش یک بلوک اطلاعاتی، باید به دایرکتوری / bitrix / admin دسترسی داشته باشید، حقوق یک infoblock خاص را اعطا کنید و در ماژول اصلی حقوق اعطا کنید. برای اعطای مجوز برای یک نهاد، عملیات زیادی باید انجام شود. و اگر حقوق کافی وجود نداشته باشد، بدون بررسی کد منبع، نمی توانید دلیل آن را درک کنید.

در حال پیکربندی

Bitrix یک هاب متمرکز ندارد که به شما امکان مدیریت تنظیمات سیستم را بدهد. تنظیمات دوباره در سراسر سیستم غیرمتمرکز هستند. گزینه‌ها در تنظیمات ماژول، در تنظیمات اجزا، در COption (به پنل مدیریت منتقل نمی‌شوند) موجود هستند. در پنل مدیریت، گزینه‌های یک ماژول می‌توانند 3-4 متر فاصله داشته باشند صفحات مختلفکه در مکان های کاملا متفاوت هستند. urlrewrite را می توان از طریق پنل مدیریت ویرایش کرد! اکنون نیز .settings و.settings_extra. گاهی اوقات کاملاً نامشخص است که کدام یک از آنها اولویت بالاتری دارند، اغلب اوقات توضیح کافی برای گزینه ها وجود ندارد، رابطه مشخص نیست. هیچ راه بومی برای اشتراک گذاری پیکربندی بین توسعه دهندگان وجود ندارد.
تنظیمات می تواند بسیار غیر منطقی باشد. گاهی اوقات به نقطه پوچ می رسد ... به مؤلفه bigdata نگاه کنید - آیا یک فرد ناآماده می تواند آن را سفارشی کند؟

ادغام با 1C

این مورد در لیست ویژگی های Bitrix است که برای آن کافی است تعداد زیادی ازمشتریان Bitrix وعده داده است که یک سایت دو طرفه را با 1C در 2 کلیک راه اندازی کند، که فورا محتوا و اسناد را از یک سیستم به سیستم دیگر تحویل می دهد.
بله، واقعاً همینطور است، اما با چند نکته.
در مرحله اول، برای ایجاد یکپارچگی "خارج از جعبه" بدون تلاش اضافی، باید همه چیز را دقیقاً همانطور که در مستندات Bitrix نوشته شده است انجام دهید - طبق قوانینی که Bitrix ارائه می دهد یک فهرست در سایت بسازید و یک کاتالوگ در 1C بسازید. که Bitrix نیاز دارد. در حالت ایده‌آل، همه چیز را از ابتدا ایجاد کنید، و سپس شاید همه چیز برای شما کار کند.
ثانیا، Bitrix با تمام تنظیمات 1C خارج از جعبه دوستانه نیست. ارزش خواندن را از قبل دارد
ثالثاً دنیای ایده آلنمیتونه باشه. معمولاً مشتری‌ای که می‌خواهد یک وب‌سایت داشته باشد، قبلاً یک تجارت خرده‌فروشی دارد، به این معنی که او قبلاً 1C دارد که یک سطل زباله بزرگ است. و این زباله ها را می توان در سایت پرتاب کرد. و برای اینکه سایت همان سطل زباله را دریافت نکند، لازم است مکانیسم تبادل را به میزان قابل توجهی تغییر دهید.
اغلب اوقات، نیازهای مشتری به شدت با دیدگاه محصول که توسط تیم Bitrix شکل می گیرد متفاوت است، و سپس اصلاح مکانیسم تبادل می تواند بسیار گران باشد، از نظر شدت کار قابل مقایسه با توسعه یک ماژول مبادله منحصر به فرد برای یک مورد خاص
بنابراین، نیازی به تلاش برای این توهم نیست که می توانید به راحتی سایت را با 1C ادغام کنید. اینها همه توطئه های بازاریابان است.

بهبود تبادل با 1C نیز یک موضوع جداگانه است. کلاس \ CIBlockCMLImport مسئول سازماندهی تبادل دایرکتوری است - 5.7k خط. یکی از روش های اصلی، که اغلب به پسوند نیاز دارد - \ CIBlockCMLImport :: ImportElement، حاوی بیش از 1k خط است. کافی است یک بار آن را به ارث ببرید، چند بار محصول را برای مدت طولانی به روز کنید و می توانید با 1C یک مبادله غیر کاری دریافت کنید. بنابراین، توسعه‌دهندگان اغلب وارد این کلاس نمی‌شوند و سعی می‌کنند با استفاده از کنترل‌کننده‌های رویداد به نوعی وارد فرآیند واردات شوند. کار با کنترل کننده رویداد در Bitrix، به خصوص در ماژول infoblocks، نیز تجربه چندان خوشایندی نیست، البته فقط به این دلیل که رویدادهای یکسان به طور یکنواخت چیده نشده اند و برخی رویدادها به سادگی کافی نیستند.
به طور کلی، این وضعیت مانند قبل غم انگیز است.

ناهماهنگی

گاهی اوقات به نظرم می رسد که توسعه دهندگان ماژول های مختلفآنها واقعاً با یکدیگر ارتباط برقرار نمی کنند. با مطالعه کد منبع هسته، به راه حل های بسیار ناهمگنی برخورد می کنید که می توانند روی یک موتور اجرا شوند، اما به دلایلی به روش های مختلفی پیاده سازی می شوند.
به عنوان مثال، می توانید ویژگی های عناصر infoblock و UserFields را بگیرید. هر دو موجودیت یکی و دیگری در واقع است زمینه اضافیبرای موجودیت دیگر یک نوع و یک معنا و یک وصف دارد. مقدار در یک جدول (های) جداگانه از پایگاه داده ذخیره می شود، آنها یک رابط دسترسی به داده تقریباً مشابه دارند. پس چرا آنها را همان رابط کاربری نمی سازیم؟
در پایان ماه مارس، ماژول فروش به روز شد آخرین نسخهو آنجا هم قول دادند خواص دلخواهبرای سفارشات آیا اکنون یک رابط جدید و سوم برای کار با ویژگی های توسعه یافته یک موجودیت وجود دارد؟

Bitrix24

این به طور کلی یک موضوع جداگانه برای گفتگو است. سردرگمی اغلب بر اساس این سیستم ایجاد می شود. 2 نسخه از B24 وجود دارد - SaaS و Standlone. یک بازار برای B24 وجود دارد، اما فقط شامل برنامه های کاربردی برای نسخه SaaS است! اگر نسخه جعبه ای دارید که 200 عدد خریداری شده است، نمی توانید آن را تحویل دهید محبوب ترین برنامه ها، به عنوان یک سازنده سند، و به طور کلی نمی توانید هیچ برنامه ای را از بازار Bitrix24 روی Bitrix24 خود نصب کنید. در اینجا یک پارادوکس وجود دارد.
در عوض، یک بازار از نسخه معمولی... راه حل های بسیار بیشتری وجود دارد، اما آنها عمدتاً حول مدیریت سایت متمرکز شده اند و نه B24.

همانطور که در بخش به من گفته شد Bitrix24 پشتیبانی فنی، یک سیستم کامل است. اگر در کار دخالت می کنید اجزای استانداردسیستم ها، سپس آماده باشید که این عملکرد با به روز رسانی های بعدی از بین می رود. Bitrix با وجود اینکه آنها به طور رسمی مشتریان خود را به شرکای خود ارسال می کنند، برای نهایی کردن اجزای پورتال روی شما حساب نمی کند.

به هر حال، برای اصلاح اجزاء در نسخه جعبه ای B24 یک مشکل دیگر است. مؤلفه هایی که کد js تولید می کنند که از ajax برای دسترسی استفاده می کند کد phpکه در پاسخ html + js را تولید می کند. این یک مخلوط جهنمی است که واقعاً نمی خواهید در آن شیرجه بزنید.

مستندات

مستندات Bitrix بین 1 تا 1.5 سال از توسعه محصول عقب است. کد بسیار ضعیف توسط phpDoc پوشانده شده است و اغلب نظر جلوی کلاس فقط برای نمایش است که به طور خودکار در IDE تولید می شود.
شیوه ارائه اسناد در منابع رسمی اغلب بسیار "رایگان" است و محتوای برخی از مقالات در اسناد ممکن است هیچ ارتباطی با خود Bitrix نداشته باشد.
دوره توسعه دهنده اطلاعات زیادی دارد، اما قالبی که در آن توسعه دهنده با قابلیت های سیستم آشنا می شود، سطح درک مورد نیاز را ارائه نمی دهد. اگر به کتاب آشپزی Symfony بروید، همه چیز در قفسه ها گذاشته شده است، بسته به نسخه، تمام جنبه های لازم شرح داده شده است. در حالی که در Bitrix، دوره آموزشی توسعه دهنده مشخص نیست بر چه اساسی است اطلاعات ساختار یافتهروی هسته قدیم و جدید که ابتدا جداگانه تغذیه می شود و سپس مخلوط می شود که مبتدیان از آن سردرد می گیرند.

سازماندهی فرآیند توسعه

با توجه به خاص بودن سیستم، سازماندهی آن چندان آسان نیست فرآیند راحتتوسعه. نه بیشتر نسخه تازهنسخه Business (که در دسترس بود) پس از نصب، به آن فکر کنید، تقریبا 530 مگابایت
$ du -s * | مرتب سازی -nr | برش -f 2- | هنگام خواندن a؛ انجام du -hs $ a؛ انجام شد 523M bitrix 204K آپلود 64K bitrixsetup.php 56K desktop_app 20K readme.html 20K مجوز.html 4.0K وب . config 4.0K urlrewrite.php 4.0K readme.php 4.0K License.php 4.0K install.config 4.0K index.php
نیمی از این حجم را باینری ها و نصب کننده ها تشکیل می دهند که به طور کلی برای کنترل نسخه نیازی به آن ها نیست. به طور کلی، مرسوم است که هسته bitrix را نسخه نکنید. توسعه دهندگان Bitrix، همانطور که بود، یکپارچگی هسته را تضمین می کنند، وابستگی های نسخه های ماژول های مختلف را در طول به روز رسانی مدیریت می کنند. اما این بلافاصله حداقل یک ایراد بزرگ را به همراه دارد - اجرای یک پروژه کاملاً کارآمد با یک فرمان از کنترل نسخه غیرممکن است، شما باید آن را به صورت قطعات مونتاژ کنید: منبع هسته را از نسخه پشتیبان bitrix و منبع توسعه دهندگان را از git دریافت کنید. .
پایه هم درست نیست. اگر خودتان می‌توانید در طول توسعه از مهاجرت استفاده کنید، Bitrix به‌روزرسانی‌ها را با استفاده از اسکریپت‌های معمولی که نمی‌توانید کنترل کنید، به پایگاه داده ارسال می‌کند. بنابراین، در طول به روز رسانی، همچنان باید نسخه پشتیبان پایگاه داده را از میزبان توسعه مرکزی به توسعه دهندگان دیگر منتقل کنید.
مردم مهربان دوباره ابزارهایی را دیدند که به سازماندهی همه اینها کمک می کند، اما متاسفانه هنوز نمی توان Bitrix را مجبور به رعایت این قوانین کرد.
به طور رسمی، Bitrix به شما امکان می دهد 2 نسخه از یک کیت توزیع داشته باشید. یکی برای تولید، دیگری برای توسعه. اگر در یک پروژه چندین توسعه‌دهنده دارید، در واقع خارج از قانون هستید) در واقع، کافی است اتصالات ورودی و خروجی از / به www.bitrixsoft.com را برای دستگاه Bitrix قطع کنید و سپس شما می توانید هر تعداد نسخه از توسعه را که دوست دارید پرچ کنید، آنها به تنهایی قادر به به روز رسانی نخواهند بود.

همکاران

و آخرین سوالی که می خواهم به آن بپردازم.
با توجه به اینکه Bitrix آستانه ورود پایینی دارد، تعداد زیادی پرسنل غیر ماهر در بین شرکت های ارائه دهنده خدمات در این بازار وجود دارد. من اتفاقاً در طول حرفه‌ام پروژه‌های مختلفی را دیدم (در مجموع بیش از صدها) که روی 1C-Bitrix اجرا شده‌اند. من می توانم با اطمینان بگویم که 95٪ از آنها "گراز اشتباه" انجام شده است. به ندرت پروژه هایی وجود داشت که برای توسعه آنها رویکردی احساس می شد، اما اینها فقط تعداد کمی بودند. این همه بسیار غم انگیز است.

نتیجه گیری

البته نمی توان تمام معایب یک مقاله را در نظر گرفت. هر روز با چیزهای کوچکی روبرو می شوید که در کار شما اختلال ایجاد می کنند. اما به سادگی غیرممکن است که همه این چیزهای کوچک را در نظر بگیریم، و احتمالاً به هیچ چیز توجه نکنیم.

در اینجا چه نتایجی می توان گرفت. Bitrix یک سیستم بسیار پیچیده است به دلیل این واقعیت که دارای یک معماری نادرست است، ایرادات زیادی که برای مدت طولانی در محصول ادامه می یابد. از طرف دیگر، Bitrix کافی است سیستم ساده، که برخلاف فریمورک ها برای شروع به مهارت بسیار پایین تری نیاز دارد.
پشتیبانی از این محصول در مقایسه با محصولاتی مانند Symfony، Laravel، Yii کار بسیار ناسپاسی است. این محصول علاقه زیادی به قرار دادن پره در چرخ توسعه دهندگان بی تجربه و با تجربه دارد که به نوبه خود ممکن است بر هزینه خدمات توسعه دهندگان با تجربه برای Bitrix تأثیر بگذارد.

آیا از صرف وقت زیاد با این سیستم پشیمان هستم؟ به جای اینکه بله. عاقلانه تر است که این زمان را صرف یادگیری چیزی درست تر و منطقی تر کنیم (که اکنون سعی می کنم فعالانه انجام دهم). اما اتفاقاً در ابتدای سفر هیچکس نبود که مرا در مسیر درست هدایت کند.

اگر شما - php مبتدیتوسعه دهنده، سپس Bitrix را برای مطالعه فریم ورک هایی مانند Symfony، Laravel، Yii، ZendFramework انتخاب کنید. باور کنید در آینده با بهره به دست خواهد آمد. با تسلط بر هر یک از این فریم ورک ها، توسعه چیزی برای Bitrix در آینده برای شما دشوار نخواهد بود. اگر چاره ای ندارید، Bitrix را مطالعه کنید، اما در وقت آزادبهتر است سعی کنید خود را در دنیای فریمورک ها غرق کنید تا مغزها را سر جای خود قرار دهید.

اگر توسعه‌دهنده‌ای با تجربه در Bitrix هستید، اما بدون تجربه در چارچوب‌های دیگر، پس حتماً در دنیای دیگری غوطه‌ور شوید، دانش جدید و مفید زیادی را کشف خواهید کرد که به شما در نوشتن راه‌حل‌های بسیار بهتر برای 1C-Bitrix کمک می‌کند. سعی کنید در پروژه های خود از راه حل های فریمورک های دیگر استفاده کنید، زیرا به لطف رویکرد مؤلفه دومی و آهنگساز، انجام این کار دشوار نیست.

اگر مشتری هستید، پس به بازاریابان Bitrix اعتماد نکنید. هیچ چیز به این آسانی که در ارائه های Bitrix می گویند نخواهد بود. و توسعه دهندگان خود را در این مورد سرزنش نکنید، آنها هیچ کاری با آن ندارند. اگر می خواهید یک فروشگاه آنلاین بزرگ و پیچیده در سطح eldorado / mvideo / sportmaster ایجاد کنید، شاید Bitrix بهترین انتخاب نباشد.

UPDمشاهده می شود که مقاله توسط کارمندان Bitrix خوانده شده است. در قسمت بازاریابی نوشتم که فراخوان های بازاریابی در قسمت معماری دوره توسعه دهنده Bitrix نوشته شده است. حالا آنها آنجا نیستند. آنها حتی خود را مهر و موم کردند، ظاهراً عجله داشتند.

ممنون از نگاه و نگاه دقیق :)

برچسب ها:

افزودن برچسب

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

1. ایجاد توابع با تعداد متغیر آرگومان

احتمالاً می دانید که PHP به ما اجازه می دهد تا توابعی را با آرگومان های اختیاری ایجاد کنیم. اکنون تابعی را نشان خواهم داد که در آن تعداد آرگومان ها می تواند از موردی به مورد دیگر تغییر کند.

اما ابتدا بیایید به یاد بیاوریم که چگونه توابع را به روش معمول ایجاد می کنیم:

// تابع با دو پارامتر اختیاری function foo ($ arg1 = ""، $ arg2 = "") (echo "arg1: $ arg1 \ n"؛ echo "arg2: $ arg2 \ n";) foo ("سلام"، "جهان")؛ / * خروجی خواهد شد: arg1: hello arg2: world * / foo (); / * خروجی خواهد شد: arg1: arg2: * /

حالا بیایید ببینیم چگونه می توانید یک تابع با تعداد نامحدود آرگومان بنویسید. متد func_get_args () برای این مورد استفاده خواهد شد:

// هیچ آرگومان را مشخص نکنید تابع foo () (// آرایه ای از آرگومان های پاس شده را برمی گرداند $ args = func_get_args ()؛ foreach ($ args به عنوان $ k => $ v) (echo "arg". ($ k + 1). " : $ v \ n ";)) foo (); / * چیزی چاپ نمی کند * / foo ("سلام"); / * چاپ arg1: hello * / foo ("سلام"، "جهان"، "دوباره")؛ / * چاپ arg1: hello arg2: world arg3: دوباره * /

2. استفاده از Glob () برای یافتن فایل ها

نام توابع اغلب خود توضیحی است. این را نمی توان برای تابع glob () گفت.

بدون پرداختن به جزئیات، عملکرد آن شبیه به روش scandir () است. به شما امکان می دهد پیدا کنید فایل مورد نیازبر اساس الگو:

// یافتن همه فایل های php $ files = glob ("*. php"); print_r (فایل $)؛ / * خروجی: آرایه (=> phptest.php => pi.php => post_output.php => test.php) * /

برای یافتن چندین نوع فایل، باید به صورت زیر بنویسید:

// یافتن همه فایل های php و txt $ files = glob ("*. (php, txt)", GLOB_BRACE); print_r (فایل $)؛ / * خروجی: آرایه (=> phptest.php => pi.php => post_output.php => test.php => log.txt => test.txt) * /

همچنین می توانید مسیر را در قالب مشخص کنید:

$ files = glob ("../ images / a * .jpg"); print_r (فایل $)؛ / * خروجی: آرایه (=> ../images/apple.jpg => ../images/art.jpg) * /

برای دریافت مسیر کامل سند، از متد realpath () استفاده کنید:

$ files = glob ("../ images / a * .jpg"); // تابع "realpath" را به هر عنصر از آرایه اعمال کنید $ files = array_map ("realpath", $ files); print_r (فایل $)؛ / * خروجی: آرایه (=> C: \ wamp \ www \ images \ apple.jpg => C: \ wamp \ www \ images \ art.jpg) * /

3. اطلاعات مربوط به حافظه استفاده شده

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

در PHP وجود دارد ابزار قدرتمندردیابی حافظه استفاده شده V بخش های مختلفبارهای اسکریپت می تواند متفاوت باشد. به منظور دریافت مقدار حافظه استفاده شده در این لحظه، باید از متد memory_get_usage () استفاده کنیم. برای رفع حداکثر تعداداستفاده از حافظه استفاده شده memory_get_peak_usage ()

Echo "Initial:" .memory_get_usage (). "Bytes \ n"; / * اولیه: 361400 بایت * / // اجازه دهید بار کمی برای ($ i = 0؛ $ i< 100000; $i++) { $array = md5($i); } // и ещё for ($i = 0; $i < 100000; $i++) { unset($array[$i]); } echo "Final: ".memory_get_usage()." bytes \n"; /* Final: 885912 bytes */ echo "Peak: ".memory_get_peak_usage()." bytes \n"; /* Peak: 13687072 bytes */

4. اطلاعات در مورد پردازنده

برای این کار باید از متد getrusage () استفاده کنید. البته توجه داشته باشید که این ویژگی در ویندوز کار نخواهد کرد.

Print_r (getrusage ()); / * آرایه را چاپ می کند (=> 0 => 0 => 2 => 3 => 12692 => 764 => 3864 => 94 => 0 => 1 => 67 => 4 => 0 => 0 => 0 => 6269 => 0) * /

تصویر ذکر شده در بالا برای کسانی که تجربه دارند قابل درک خواهد بود مدیریت سیستم... برای بقیه، ما یک رمزگشایی ارائه می دهیم:

  • ru_oublock: تعداد عملیات نوشتن بلوک
  • ru_inblock: تعداد عملیات خواندن بلوک
  • ru_msgsnd: تعداد پیام های ارسال شده
  • ru_msgrcv: تعداد پیام های دریافتی
  • ru_maxrss: حداکثر اندازهمجموعه بدون صفحه
  • ru_ixrss: کل حافظه مشترک
  • ru_idrss: کل داده های اشتراک گذاری نشده
  • ru_minflt: تعداد صفحات حافظه استفاده شده
  • ru_majflt: تعداد خطاهای موجود در صفحه
  • ru_nsignals: تعداد سیگنال های دریافتی
  • ru_nvcsw: تعداد سوئیچ های زمینه فرآیند
  • ru_nivcsw: تعداد سوئیچ های زمینه اجباری
  • ru_nswap: تعداد دسترسی به دیسک در طول صفحه بندی
  • ru_utime.tv_usec: ساعات کاری در حالت کاربر(میکروثانیه)
  • ru_utime.tv_sec: زمان صرف شده در حالت کاربر (ثانیه)
  • ru_stime.tv_usec: زمان حالت ممتاز (میکرو ثانیه)
  • ru_stime.tv_sec: زمان کار در حالت ممتاز (ثانیه)

برای اینکه بفهمید چه منابعی از پردازنده شما توسط یک اسکریپت استفاده می شود، به مقادیر «زمان کاربر» و «زمان سیستم» (زمان حالت ممتاز) نیاز دارید. شما می توانید نتیجه را هم در ثانیه و هم در میکروثانیه به دست آورید. به منظور تبدیل تعداد کل ثانیه ها به عدد اعشاری، باید مقدار میکروثانیه را بر 1 میلیون تقسیم کنید و ثانیه ها را به مقدار اضافه کنید.

یه جورایی گیج شده در اینجا یک مثال است:

// استراحت 3 ثانیه خواب (3); $ data = getrusage (); echo "زمان کاربر:". ($ data ["ru_utime.tv_sec"] + $ data ["ru_utime.tv_usec"] / 1000000)؛ echo "زمان سیستم:". ($ data ["ru_stime.tv_sec"] + $ data ["ru_stime.tv_usec"] / 1000000)؛ / * خروجی ها زمان کاربر: 0.011552 زمان سیستم: 0 * /

اگرچه اجرای اسکریپت حدود 3 ثانیه طول کشید، اما پردازنده به شدت بارگذاری نشده بود. واقعیت این است که وقتی (خواب) فراخوانی می شود، اسکریپت عملاً منابع پردازنده را مصرف نمی کند. به طور کلی، کارهای زیادی وجود دارند که بدون استفاده از پردازنده زمان قابل توجهی را می گیرند. به عنوان مثال، انتظار برای عملیات مربوط به دیسک. بنابراین شما همیشه از زمان CPU در اسکریپت های خود استفاده نمی کنید.

این هم یک مثال دیگر:

// حلقه 10 میلیون بار برای ($ i = 0؛ $ i<10000000;$i++) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.424592 System time: 0.004204 */

اسکریپت 1.4 ثانیه از زمان CPU را گرفت. در این مورد، زمان تماس سیستم به طور کلی کم است.

زمان سیستم زمانی است که پردازنده برای اجرای درخواست های سیستم به هسته از طرف برنامه صرف می کند. مثال:

$ start = microtime (درست)؛ // میکروتایم را هر 3 ثانیه تماس بگیرید در حالی که (microtime (درست) - شروع $< 3) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.088171 System time: 1.675315 */

اکنون زمان سیستم بسیار بیشتر از مثال قبلی مصرف می شود. این همه به لطف روش microtime () است که از منابع سیستم استفاده می کند.

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

5. ثابت های جادویی

ثابت های جادویی زیادی در PHP وجود دارد مانند شماره خط فعلی (__LINE__)، مسیر فایل (__FILE__)، مسیر فهرست (__DIR__)، نام تابع (__FUNCTION__)، نام کلاس (__CLASS__)، نام متد (__METHOD__) و فضاهای نام (__NAMESPACE__) .

ما همه آنها را در نظر نخواهیم گرفت. بیایید فقط یک زوج را ببینیم:

// این اسکریپت به محل فایل فعلی بستگی دارد و // در صورت استفاده از دایرکتوری های مختلف نیاز_once ("config / database.php") می تواند مشکلاتی ایجاد کند. // این اسکریپت مشکلی ایجاد نمی کند require_once (dirname (__ FILE__). "/config/database.php");

هنگام اشکال‌زدایی اسکریپت‌ها از __LINE__ استفاده کنید:

// کد // ... my_debug ("some debug message", __LINE__); / * خط 4 را چاپ می کند: برخی از پیام های اشکال زدایی * / // کدهای بیشتر // ... my_debug ("دیگر پیام اشکال زدایی"، __LINE__); / * خط 11 را چاپ می کند: پیام اشکال زدایی دیگر * / تابع my_debug ($ msg, $ line) (پژواک "خط $: $ msg \ n"؛)

6. تولید شناسه های منحصر به فرد

مواقعی وجود دارد که باید یک رشته منحصر به فرد تولید کنید. من بارها دیده ام که آنها از تابع md5 () برای حل این مشکل استفاده می کنند:

// ایجاد یک رشته تصادفی echo md5 (زمان (). mt_rand (1,1000000));

اما در واقع PHP برای این منظور تابع خاصی uniqid () دارد.

// ایجاد یک رشته تصادفی echo uniqid (); / * 4bd67c947233e را چاپ می کند * / // یک بار دیگر echo uniqid (); / * 4bd67c9472340 چاپ خواهد کرد * /

با چشم غیرمسلح می توانید ببینید که کاراکترهای اول به زبان ساده شبیه به هم هستند ... این به این دلیل است که این روش از زمان سرور برای تولید کاراکتر استفاده می کند. حتی مفید است زیرا تمام مقادیر تولید شده به ترتیب حروف الفبا به دست می آیند که مرتب سازی سریع آنها را امکان پذیر می کند.

به منظور کاهش شانس دریافت تکراری، می‌توانیم یک پیشوند اضافه کنیم یا از یک پارامتر دوم استفاده کنیم (تعداد کاراکترها را افزایش می‌دهد):

// پیشوند با echo uniqid ("foo_"); / * foo_4bd67d6cd8b8f * / // را با پارامتر دوم echo uniqid (""، true) چاپ می کند. / * 4bd67d6cd8b926.12135106 را چاپ می کند * / // هر دو echo uniqid ("bar _"، true); / * چاپ bar_4bd67da367b650.43684647 * /

این روش خطوط کوچکتر از md5 تولید می کند و در نتیجه باعث صرفه جویی در فضا می شود.

7. سریال سازی

آیا تا به حال مجبور شده اید داده های پیچیده را در یک پایگاه داده یا در یک فایل ذخیره کنید؟ برای تبدیل یک شی به رشته، PHP تابع خاصی را ارائه می دهد.

به طور کلی، 2 تا از این روش ها وجود دارد: serialize () و unserialize ()

// آرایه پیچیده $ myvar = آرایه ("سلام"، 42، آرایه (1، "دو")، "apple"); // تبدیل به رشته $ string = serialize ($ myvar); echo $ string; / * خروجی a: 4: (i: 0؛ s: 5: "سلام"؛ i: 1؛ i: 42؛ i: 2؛ a: 2: (i: 0؛ i: 1؛ i: 1; s : 3: "two";) i: 3؛ s: 5: "apple";) * / // مقدار اصلی را دریافت کنید $ newvar = unserialize ($ string); print_r ($ newvar)؛ / * آرایه را چاپ می کند (=> سلام => 42 => آرایه (=> 1 => دو) => سیب) * /

این توابع اینگونه عمل می کنند. با این حال، به دلیل رشد انفجاری در محبوبیت JSON، PHP 5.2 دو روش json_encode () و json_decode () را اضافه کرد. کار آنها شبیه سریال سازی است ():

// آرایه پیچیده $ myvar = آرایه ("سلام"، 42، آرایه (1، "دو")، "apple"); // تبدیل به رشته $ string = json_encode ($ myvar); echo $ string; / * ["hello", 42 ,, "apple"] را چاپ می کند * / // مقدار اولیه را بازیابی می کند $ newvar = json_decode ($ string); print_r ($ newvar)؛ / * آرایه را چاپ می کند (=> سلام => 42 => آرایه (=> 1 => دو) => سیب) * /

این گزینه فشرده تر و سازگارتر با زبان های دیگر مانند جاوا اسکریپت است. با این حال، هنگام کار با اشیاء بسیار پیچیده، داده ها از دست می روند.

8. فشرده سازی رشته ها

وقتی در مورد فشرده سازی صحبت می کنیم، بلافاصله به ذهن می آییم فایل های آرشیو v فرمت ZIP... PHP امکان فشرده سازی رشته های طولانی را بدون هیچ فایلی فراهم می کند.

V مثال زیربیایید نحوه عملکرد توابع gzcompress () و gzuncompress () را نشان دهیم:

$ string = "Lorem ipsum dolor sit amet، consectetur adipiscing elit. Nunc ut elit id mi ultricies adipiscing. Nulla facilisi. Praesent pulvinar, sapien vel feugiat vestibulum, nulla dui pretium orci, non ultricies elit conselits adipiscing. Aliquam pretium ullamcorper urna quis iaculis. Etiam ac massa sed turpis tempor luctus. Curabitur sed nibh eu eli mollis congue. ornare in mollis in, mollis sed nunc. Etiam at justo in leo congue mollis. Nullam in neque eget metus hendrerit scelerisque eu non enim. Ut malesuada lacus eu nulllesism bibodna id eoda uru $ فشرده = gzcompress ($ string); echo "اندازه اصلی:". strlen ($ string). "\ n"; / * چاپ خواهد شد اندازه اصلی: 800 * / اکو "اندازه فشرده:". strlen ($ فشرده). "\ n"; / * چاپ خواهد شد اندازه فشرده: 418 * / // بازگشت $ original = gzuncompress ($ فشرده);

این در توان ماست که حجم متن را تا 50 درصد کاهش دهیم. برای همین منظور می توانید از روش های gzencode () و gzdecode () استفاده کنید که از الگوریتم فشرده سازی متفاوتی استفاده می کنند.

9. قبل از خاتمه اجرا کنید

PHP دارای یک تابع register_shutdown_function () است که به شما امکان می دهد قبل از خروج اسکریپت کدی را اجرا کنید.

فرض کنید می خواهید اطلاعاتی بدانید ... زمان اجرای اسکریپت:

// دریافت زمان شروع $ start_time = microtime (true); // برخی از عملیات // ... // چاپ زمان اجرا اکو "اجرا شد:". (microtime (درست) - $ start_time). "ثانیه"؛

در نگاه اول، ممکن است این یک کار بی اهمیت به نظر برسد. برای این منظور می توانید کد را در انتهای فایل قرار دهید. با این حال، اگر تابع exit () در جایی قبل از آن فعال شود، این کد هرگز کار نخواهد کرد. همچنین اگر خطایی در صفحه وجود داشته باشد یا کاربر بارگذاری صفحه را قطع کند (با کلیک بر روی دکمه مربوطه در مرورگر خود) کار نخواهد کرد.

هنگام استفاده از متد register_shutdown_function () ، کد به هر حال اجرا می شود:

$ start_time = microtime (درست)؛ register_shutdown_function ("my_shutdown"); تابع my_shutdown () (جهانی $ start_time؛ اکو "اجرا شد:" (microtime (درست) - $ start_time). "ثانیه.";)

نتیجه

PHP یک سیاره کامل است که هرگز با محتوای خود ما را شگفت زده نمی کند. نظر شما در مورد این توابع چیست؟

مقالات مرتبط برتر