سه شنبه ۰۱ تیر ۱۴۰۰

Tuesday, June 22, 2021 GMT +4:30

» آموزش برنامه نویسی وب با PHP

php

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

تعریف PHP به زبان ساده


اگر بخواهیم PHP را به زبان ساده تعریف کنیم می توانیم آن را زبان برنامه نویسی اسکریپتی چند منظوره بنامیم که به طور خاص برای وب توسعه یافته و جهت نوشتن برنامه های تحت وب کاربرد تخصصی دارد، این تعریف ترجمه ساده از عبارتی است که در سایت php.net درج شده است:
PHP is a popular general-purpose scripting language that is especially suited to web development.
این زبان در سال 1994 میلادی توسط Rasmus Lerdorf با هدف نمایش آنلاین اطلاعات و رزومه شخصی به زبان C نوشته شد که به همین دلیل در ابتدا آن را Personal Home Page نامیدند که PHP مخففی از سرواژه های این عبارت است، بعدها با پیشرفت PHP عبارت توضیحی HyperText Preprocessor (پیش پردازنده ابرمتن) جایگزین عبارت فوق شد، منظور از پیش پردازنده ابرمتن این است که PHP ابتدا کدها و دستورات را با مفسر خود پردازش کرده و سپس خروجی را به مرورگر کاربر ارسال می کند.
نکته: منظور از اسکریپتی بودن PHP این است که کدهای آن در مفسر سرور پردازش شده و مانند برنامه های رایج در قالب یک بسته نرم افزاری کامپایل نمی شوند.

چرا PHP بیاموزیم و با PHP برنامه نویسی کنیم؟


اغلب علاقمندان به فراگیری دانش برنامه نویسی وب پس از اینکه از مرحله زبان های سمت کاربر عبور می کنند در دو یا بعضا چندراهی انتخاب یک زبان برنامه نویسی سمت سرور به شک و تردید دچار می شوند، محدودیت های زمانی، انرژی و حوصله ای که برای فراگیری یک زبان برنامه نویسی صرف می شود این انتخاب را بیش از پیش حساستر کرده و حتی آینده حرفه ای ما را رقم می زند، اگر در وب عباراتی مانند "PHP یا ASP کدام بهتر است؟!" را جستجو کنید، ملاحظه می کنید که اغلب بین برنامه نویسان در این خصوص که کدام زبان مناسب تر است بحث های طولانی و بعضا متعصبانه رخ داده و هر کسی با دید خود به این قضیه نگاه می کند، اما واقعیت این است که هیچ زبانی کامل و بی نقص نیست و ما هم قصد نداریم PHP را با زبان های دیگر مقایسه کنیم چرا که هیچ محدودیتی از این نظر که بتوانیم از چند زبان برنامه نویسی استفاده کنیم وجود ندارد و در واقع مرزی برایمان به عنوان برنامه نویس نباید ترسیم کنیم، PHP را می آموزیم چون متخصص در امر وب است و تمام نیازهایمان را به خوبی پوشش می دهد، چون ساده و در عین حال قدرتمند، سریع و امن است، رایگان، کم دردسر و در دسترس است، کدنویسی با PHP اغلب به درک بهتر ساختار و پیچیدگی های وب کمک می کند، PHP از شیوه های برنامه نویسی معمولی و شی گرا به خوبی پشتیبانی می کند، برای کار با پایگاه داده اکستنشن های قوی و تخصصی دارد، PHP متن باز (Open-source) است و آنگونه که توسعه محصولات شرکت های بزرگ به پدیدآورنده محدود می شود وابسته به شرکت خاصی نیست، اغلب برنامه های رایگان و پرکاربرد مدیریت محتوای وب (CMS) به زبان PHP نوشته شده اند مانند وردپرس، جوملا، دروپال و...، PHP توسط گروهی حرفه ای از برنامه نویسان وب پشتیبانی می شود، وجود سایت مرجع php.net و جامعه وسیعی از کاربران در سطح وب خود نویدبخش رشد شتابان PHP و رفع نواقص احتمالی نسبت به زبان های مشابه و آینده روشن است، لذا می توان PHP را یکی از مناسبترین گزینه ها برای برنامه نویسی سمت سرور به شمار آورد.

فراگیری PHP، آسان و شیرین!


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

برای کدنویسی PHP از چه برنامه ای استفاده کنیم؟


اکنون که با کلیات برنامه نویسی با PHP آشنا شدیم نوبت به ورود عملی به این مسیر است، در اولین گام این سوال مطرح می شود که برای کدنویسی PHP از چه برنامه ای باید استفاده کنیم؟ در پاسخ می توان چند برنامه قوی و کاربردی مختلف را پیشنهاد داد از جمله برنامه قدرتمند و مناسب PhpStorm (توصیه می کنیم برای شروع از این برنامه استفاده کنید)، برنامه شرکت ادوبی با نام Adobe Dreamweaver، برنامه رایگان و متن باز NetBeans IDE - PHP Development با محیط کدنویسی قوی و پشتیبانی مناسب، در کنار این برنامه ها استفاده از ویرایشگرهای به ظاهر ساده مانند ++Notepad برای کار با فایل های PHP ضروری خواهد بود، خوشبختانه تمام موارد نامبرده با یک جستجوی کوتاه در وب در دسترس می باشند.

اجرای کدهای PHP در سیستم عامل


از آنجایی که PHP یک زبان سمت سرور (Server-side) است برای اجرای آن در سیستم خود نیاز به برنامه هایی تحت عنوان سرور مجازی (Localhost) داریم که اغلب به صورت رایگان در دسترس هستند، برای نمونه یکی از بهترین ها در آدرس زیر قابل دریافت است:
wampserver.com
همچنین:
appservnetwork.com
و همچنین:
apachefriends.org
پس از نصب هر یک از برنامه های WampServer، AppServ یا XAMPP اکنون شما قادر به اجرای فایل های PHP بر روی سیستم خودتان خواهید بود (توصیه می کنیم یکی از نسخه های برنامه WampServer را متناسب با سیستم خود انتخاب کرده و نصب نمائید)، پس از نصب و اجرای برنامه به آیکن مربوطه که معمولا در نوار وظیفه سیستم عامل مشخص است دقت نمائید، به طور مثال برنامه WampServer در حالت عادی آیکنی سبزرنگ را نمایش می دهد و این یعنی سرور مجازی شما فعال و آماده به کار است، اکنون برنامه ویرایشگر فایل های PHP خود (به طور مثال PhpStorm) را اجرا و فایلی با نام example.php (فایل فرضی و نام دلخواه) در فولدر www محل نصب سرور مجازی ذخیره نمائید، به فرض اگر برنامه WampServer را در درایو C در فولدر Wamp قرار داده باشید، ریشه سرور مجازی شما به صورت نمونه زیر خواهد بود:
C:\Wamp\www
فایل example.php را درون این فولدر قرار دهید، بهتر است این فایل با نمونه کدهای ساده HTML کدنویسی شده باشد تا در هنگام گرفتن خروجی نتیجه مشخص شود، در نهایت مرورگرتان را اجرا کرده و عبارت http://localhost/example.php را در قسمت نوار آدرس نوشته، دکمه Enter را در صفحه کلید بزنید تا فایل از فولدر www فراخوانی شود، اگر همه چیز صحیح باشد صفحه وب شما در مرورگر نمایش داده خواهد شد درست مانند اینکه یک سایت آنلاین بر روی سرور واقعی برپا کرده باشید (در سرور آنلاین نیز معمولا ریشه سایت فولدر public_html یا www است).

چند مثال ساده با PHP


فلسفه پیدایش PHP (سال 1994 میلادی توسط Rasmus Lerdorf) ایجاد صفحات داینامیک و استفاده از آن در وب بوده (هرچند PHP را می توان به صورت General-purpose استفاده کرد) لذا می توان دستورات این زبان را در کنار کدهای ساده HTML درج و اجرا کرد (در اصطلاح PHP را HTML-embedded می گویند) این قابلیت یکی از نقاط قوت PHP محسوب شده و یادگیری آن را ساده تر می کند، برای شروع و آشنایی بیشتر کدها و مثال هایی ساده از این زبان را مرور می کنیم:
<?php
echo "اولین کد PHP من!";
?>
توضیح:
- کدهای PHP با تگ علامت سوال ، php شروع و با علامت سوال بسته می شوند (شیوه استاندارد).
- دستور echo مقادیر را به خروجی ارسال و در مرورگر چاپ می کند.
حال به کد زیر توجه کنید:
<?php
$text = "اولین کد PHP من!";
echo $text;
?>
پیش نمایش
توضیح:
- در کد بالا عبارت اولین کد PHP من! به جای اینکه مستقیما به echo داده شود، ابتدا به یک متغیر (در آینده در این رابطه مفصل خواهیم گفت) نسبت داده شده و سپس مقادیر متغیر با دستور echo به خروجی داده می شود (علامت $ در PHP نشان دهنده متغیر است).
حال به مثال زیر توجه کنید:
<?php
$num1 = 20;
$num2 = 50;
$total = $num1 + $num2;
echo $total;
?>
پیش نمایش
توضیح:
- کد بالا مقدار متغیر total را به خروجی خواهد داد و متغیر total برابر است با حاصل جمع دو متغیر num1 و num2 که اعدادی به دلخواه به آنها داده ایم.
- ملاحظه می کنید که PHP قدرت محاسبه منطقی دارد و می توان با آن از ترکیب چند مقدار یک مقدار جدید به دست آورد، این مثال ها اولیه و ساده هستند اما ما را با دنیای جدیدی آشنا می کنند که همان داشتن تفکر و هوش منطقی است و رفته رفته ذهنمان را برای نوشتن برنامه های سیستماتیک، طراحی الگوریتم ها و ساختارهای پیچیده تر وب آماده می کنند.
مثالی دیگر:
<?php
$name = 'Webgoo';
if ($name == 'Webgoo'){
    $hi = 'سلام وبگو!';
}
else{
    $hi = 'سلام، لطفا در سایت عضو شوید!';
}
echo $hi;
?>
پیش نمایش
توضیح:
- if (اگر) و else (در غیر اینصورت) برای ایجاد شرط منطقی به کار می روند و علامت == نشان دهنده برابری دو طرف آن است، اینها ابزارهایی است که در دنیای برنامه نویسی به کارمان می آیند و می توانیم به کمک آنها زبان انسان را به زبان ماشین تبدیل کنیم، در تفسیر کد بالا ابتدا متغیر name را با مقادیر از پیش تعریف شده Webgoo مقدار دهی کرده ایم (می تواند هر چیز دیگری باشد)، سپس با شرط if بررسی کرده ایم که اگر متغیر name برابر با مقدار Webgoo باشد، دستور echo داخل شرط if که بین دو علامت {} مشخص است اجرا شود، در غیر اینصورت قسمت else اجرا خواهد شد.
تقریبا هر آنچه که از وب بخواهید با PHP دستیافتنی است، در ادامه مطالب بخش آموزش های مقدماتی PHP در این باره بیشتر خواهیم گفت.
دسته بندی: آموزش مقدماتی » PHP
related مطالب بیشتر:
» تعریف و استفاده از متغیر (Variable) در PHP
» توابع کار با آرایه در PHP - بخش سوم
» دستور switch و case در PHP
» عملگرها (Operators) در PHP
» توابع کار با آرایه در PHP - بخش دوم
commentنظرات (۱۵۸ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: امیرحسین
۱۹:۰۸ ۱۳۹۶/۱۲/۱۲
سلام
کار نکرد کدها
من میخوام دقیقا یک همچین اتفاقی واسه کدهام بیوفته
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
که هر آدرسی در سرور کاربر درخواست کرد بفرسته به صفحه ایندکس و به همراه کوئری استرینگ هاش
مثلا کاربر این درخواست رو میزنه
http://localhost/index/index
پشت صحنه این آدرس ارسال میشه
http://localhost/index.php?url=index/index
خب اگه فقط همین کارو بخوام کنم مشکلی نداره و کاملا حله اما یک کار دیگه هم میخوام انجام بدم که این کارو بخوام کنم مشکل پیش میاد و همین کار قبلی هم دیگه اصلا کار نمیکنه و اون کار اینه که میخوام کاربر حتما به صورت ادرس دهی mvc استفاده کنه اگه ادرس درخواستی یک فایل واقعی یا پوشه واقعی بود خطای forbidden صادر شود
پاسخ: 
با توجه به جمیع توضیحات به نظر دستورات زیر مشکل را رفع خواهد کرد:
RewriteEngine On
RewriteRule ^index.php - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
RewriteRule ^(.+)$ - [F,NC,L]
نویسنده: رضا
۱۹:۴۷ ۱۳۹۶/۱۲/۲۱
باسلام
چرا ⁦‪cURL‬⁩ من در ⁦‪PHP‬⁩ 5.5 کار می کند ولی در PHP 7 به بالا خیر مشکل کجاست؟
پاسخ: 
ظاهرا این یک باگ در نسخه PHP 7.0.3 است، نسخه PHP خود را به 7.0.4 و بالاتر ارتقاء دهید یا اینکه فعلا از نسخه های پائین تر استفاده کنید!
نویسنده: امیرحسین
۱۱:۲۱ ۱۳۹۷/۰۱/۰۲
سلام استاد عزیز سال نو مبارک و امیدوارم سال خوبی رو در پیش داشته باشید و موفق باشید همیشه
یه سوال داشتم من دوتا صفحه دارم که این کدها داخلش نوشتم
page a.php
<?php
session_start();
$i = 0;
while($i < 20){
$i++;
sleep(1);
}
echo 'salam';
?>
page b.php
<?php
session_start();
echo 'salam';
?>
در صفحه اول گفتم تا 20 ثانیه اجرا بشه ولی صفحه دوم هیچ کد sleep یا کدی که باعث تاخیر اجرا شدن برنامه بشه ننوشتم حالا من هر دو صفحه رو همزمان باز میکنم یعنی اول صفحه a.php رو باز میکنم و همون لحظه صفحه b.php رو باز میکنم ولی صفحه b.php منتظر میمونه تا صفحه a.php لودینگش کامل بشه بعد صفحه دوم (b.php) لود میشه یعنی صفحه ی اول که با تاخیر اجرا میشه ولی صفحه دوم که بدون تاخیر اجرا میشه با این حال صفحه دوم هم منتظر صفحه اول میمونه و چیزی که جالب تر شده من در صفحه دوم کد
session_start();
رو بردارم دیگه منتظر لود شدن صفحه اول نمیمونه و همون لحظه لود میشه حالا علت این چیه ؟؟ جای تعجب داره!
پاسخ: 
ضمن تبریک سال جدید و با آرزوی بهترین ها...
PHP برای جلوگیری از ایجاد تغییرات ناخواسته در اطلاعات فایل Session در سرور تا زمانی که یک درخواست مربوط به نشست فعلی در حال اجرا باشد، حالت قفل یا Lock را بر روی فایل Session ایجاد می کند که در این صورت اطلاعات توسط درخواست های دیگر قابل ویرایش نیست و به این علت اجرای عملیات جدید تا پایان یافتن عملیات قبل و آزاد شدن فایل Session به تاخیر می افتد، برای تغییر این حالت آموزش زیر مفید خواهد بود:
https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/
نویسنده: امیرحسین
۲۱:۲۳ ۱۳۹۷/۰۱/۰۲
مشکل سوال قبلیم مربوط comet همین مشکل session_start بود که یافتمش و البته با توضیحات مفید شما بسیار ممنون امیدوارم همیشه موفق باشید
نویسنده: mohammad
۰۰:۲۴ ۱۳۹۷/۰۱/۰۶
سلام
درود بر شما واقعا می خواهید روی سایت w3school را کم کنید خداییش بعنوان یک ایرانی غرور برم داشت داداش حتما به مجموعه ات دانلود پی دی اف بگذار علی الخصوص تصمیم داری این راه پیچ پیچی را برای ما هموارتر کنی من بعنوان یک وب دولوپمنت webdevelopement عاشق سایتتان شدم خواهشمندیم حتما منابع مرجع برای آموزش های خود که قابل دانلود فارسی و بدون پرداخت هزینه باشد استفاده نمایید مثل itpdf or freebookpdf همیشه یک پروژه را پس از اتمام کامل تدریس صفر تا صد شرح و قدم به قدم تکامل دهید نکته بعد اینکه امنیت و راههای بالابردن آن در PHP mysql خیلی مفید خواهد بود مباحث شما مثل سایت فرادرس کم رنگتر بهتر مثل رضا معظمی کارتان را ادامه بدهید Svg و فن آوری نو در زمینه گرافیک وب مباحث جالب توجهی است که کمتر تا امروز صحبت شده خواهش دارم در خصوص توسعه وب اپها بیشترین زمان را بگذارید تا امروز افراد با خیال راحتری بدون واسط سرور و فقط ارتباط مرورگر خود در ارتباط باشند خواهش دارم مباحث بسیار بروز خود را در خصوص رمزنویسی و علی الخصوص رمزنویسی وب با PHP & mysql مطرح نمایید شاید جالب باشد در خصوص هک و امنیت در وردپرس نیز مطالب عرضه نمایید نیاز جامعه وب امروز بیشتر بر پایه html has PHP mysql می باشد
پاسخ: 
بسیار ممنون از لطف و توجهی که دارید، پیشنهادات شما فوق العاده ارزشمند هستند و حتما مورد به مورد بررسی و در سیاست گذاری آینده سایت لحاظ خواهند شد.
نویسنده: ابوالفضل
۲۲:۴۱ ۱۳۹۷/۰۴/۲۷
سلام استاد مانند همیشه باز من به مشکل بر خوردم استاد من میخوام بخش جستجوی سایت خودم رو هوشمند تر کنم مثلا کاربر اگر کلمه 'هیچکس' رو نوشت با هیچ کس فرقی نکنه و نتایجی که هر دو این کلمات توش هست رو بیاره
استاد چه راه کاری دارین چگونه عمل کنم بهترین روش هست
ممنونم ازتون
پاسخ: 
مشابه این سوال قبلا مطرح و پاسخ آن داده شده است! سیستم جستجو ممکن است در ظاهر ساده به نظر برسد اما اگر بخواهیم فرآیند آن هوشمند باشد، الگوریتم پیچیده ای می طلبد، در مورد سوالتان راه حل موتورهای جستجو استفاده از ستون عبارات مشابه است، یعنی یک عبارت را به عنوان اصل در نظر گرفته و برای آن ستون عبارات مشابه قرار می دهند که کلمات هم مفهوم با اشکال دیگر در این ستون درج می شود، در هنگام پرس و جو به صورت داینامیک (با عبارت دستوری OR) پرس و جو را توسعه می دهند:
SELECT id, post FROM tbl WHERE col LIKE '%word_1%' OR col LIKE  '%word_2%' LIMIT 10
قاعدتا این کلمات مشابه نیز باید توسط ما برای سیستم تعریف شوند، خلاصه کلام اینکه برای ایجاد این قابلیت راه حل ساده ای وجود ندارد و باید الگوریتم پیچیده ای با توجه به توضیحات بالا بنویسید.
نکته: موتورهای جستجو معمولا از سیستم ایندکس کلمات استفاده می کنند، یعنی ابتدا کل مطلب را با ربات خزنده دریافت، سپس کلمه به کلمه تجزیه و فراوانی هر کلمه را در دیتابیس خود ذخیره می کنند، در هنگام جستجو نیز با الگوریتم هایی، شباهت، دفعات تکرار کلمات و... را محاسبه کرده و بر همین اساس نتایج مرتبط با عبارت جستجو شده را نمایش می دهند، البته همان طور که گفتیم این مسئله به ظاهر ساده است اما الگوریتم پیچیده ای دارد!
نویسنده: امیرحسین
۲۲:۱۵ ۱۳۹۷/۰۷/۲۸
سلام استاد عزیز تبریک و نهایت خوشحالی منو جهت بروزرسانی سایتتون قبول کنید
یه سوالی داشتم:
تابع file_get_contents در php میخوام یه فایل لوکال رو بخونم اما نمیتونم میگه همچین فایلی وجود نداره ! حتما باید ادرسی که میدم با http یا https شروع شده باشه مگه ! اگه بخوام فایلی که لوکال هست چطوریه منظورم فایل مطلق اگه اسمشو درست گفته باشم با کد منظورمو میرسونم
file_get_contents("avatars/getavatar.php?url=file1.jpg");
میگه همچین فایلی وجود ندارد
ولی اگه اینطوری ادرس بدم کار میکنه
file_get_contents("http://localhost/avatars/getavatar.php?url=file1.jpg");
لطفا راهمنایی بفرمایید
پاسخ: 
ممنون از نظر لطف شما، در خصوص سوال، ارجاع به هر فایلی در PHP باید با توجه به محل اجرای تابع تعیین شود، به احتمال زیاد با توجه به محل اجرای تابع file_get_contents مسیر فایل avatars/getavatar.php صحیح نیست و Path دسترسی به سورس برای مفسر PHP به نحو ناقص تفسیر می شود، با توجه به اینکه به سورس ها دسترسی نداریم به صورت احتمالی یکی از حالت های زیر را امتحان کنید:
../avatars/getavatar.php

../../avatars/getavatar.php

../../../avatars/getavatar.php
برای اینکه دغدغه آدرس دهی را نداشته باشید پیشنهاد ما استفاده از مسیرهای از پیش تعیین شده با define است، مثال:
define("LOCAL_PATH", "http://localhost/");
file_get_contents(LOCAL_PATH . "avatars/getavatar.php?url=file1.jpg");
کافی است یک بار مسیر را ترجیحا در یک فایل جداگانه تعریف و در هرکجای برنامه مورد نیاز بود include کرده و از آن مطابق نمونه استفاده کنید.
نویسنده: محمد
۱۲:۲۶ ۱۳۹۷/۱۲/۱۹
میتونم تابع mb_strlen را فعال کرد؟
پاسخ: 
بله، این تابع برای محاسبه تعداد کاراکتر رشته، سازگار با یونیکد است، به فرض برای زبان فارسی:
$lenght = mb_strlen($string, 'UTF-8');
برای تست تعداد کاراکتر نمونه متن فارسی را امتحان کنید، اگر مقدار صحیح بود و خطایی دریافت نکردید این امکان در سرور شما فعال است، در غیر اینصورت باید از تنظیمات PHP آن را فعال کنید یا از مدیریت سرور بخواهید که اکستنشن php_mbstring را فعال کند.
نویسنده: امیرحسین
۲۱:۱۵ ۱۳۹۸/۰۲/۳۱
سلام استاد وقت بخیر
خواستم بدونم کامند
php://stdin
کارش چیه؟
$f = fopen('php://stdin', 'r');

while ($line = fgets($f)) {
echo $line;
}

fclose($f);
پاسخ: 
stdin مخفف Standard Input است و برای مواقعی که از PHP در حالت Command Line مانند برنامه نویسی Shell در سرورهای لینوکس (بر پایه Unix) استفاده می کنیم برای خواندن ورودی ها کاربرد دارد، به فرض نمونه کد بالا یک خط از ورودی PHP را (در حلقه while) می خواند و در خروجی چاپ می کند.
نویسنده: mahdi
۱۶:۵۷ ۱۳۹۹/۱۰/۱۶
سلام استاد عزیز ، بعد از آموزس php با لاراول کار کنیم بهتره ؟
پاسخ: 
استفاده از فریم ورک ها شرایط خاص خودش را دارد، به فرض اگر قرار است برنامه های مختصر با PHP بنویسیم کاربرد فریم ورک خیلی توجیه ندارد اما اگر قرار است در بازار کار یا در پروژه های بزرگ تیم محور فعال باشیم تسلط بر رایج ترین فریم ورک ها (از جمله لاراول) می تواند اهمیت داشته باشد، همچنین استفاده از فریم ورک ها در بحث زمان صرفه جویی می کند (البته مدت زمان یادگیری هر فریم ورک از این مقوله جدا است)، به شخصه PHP خالص را در کنار یادگیری مباحثی مثل معماری MVC برای درک عمیق مباحث وب مناسب تر می بینم اما اگر هدفتان بیشتر بازار محور است و زمان اهمیت زیادی دارد لاراول می تواند گزینه ی خیلی خوبی برای سمت سرور باشد، در کل همه اینها بر محور PHP است منتها انتخاب مسیر بسته به اهداف و کمی علایق خودمان دارد.
نویسنده: mahdi
۰۰:۰۸ ۱۳۹۹/۱۰/۱۹
سلام استاد عزیز ، پس بنظرتون بجای وقت گذاشتن برای یادگیری لاراول و وردپرس ، وقت بزارم که عمیق تر php و ساختار mvc رو درک کنم بهتره ؟ الان واقعا نمیدونم چکار کنم ممنون میشم راهنماییم کنی
پاسخ: 
گفتیم اگر ورود سریعتر به بازار و کسب درآمد یا انجام کارهای تیم محور و جذب در شرکت ها مد نظر باشد پس از آشنایی با مباحث مقدماتی PHP می توانید از فریم ورک ها مثل لاراول، CMS ها مثل وردپرس، موتورهای قالب مثل Smarty و... برای پروژه هایی که قرار است انجام دهید استفاده کنید چون در بحث زمان صرفه جویی می شود و خیلی از کاربران به افزونه ها و خدمات پشتیبانی در این زمینه ها نیازمندند (بازار کار خوب)، اما اگر می خواهید PHP را برای اهداف بلندمدت بعدی یا به طور کلی بیاموزید یا عمدتا پروژه های کوچک انجام می دهید (به فرض ساخت ربات تلگرام، یا کدنویسی سمت سرور یک اپلیکیشن موبایل و...) در این موارد صرف PHP به شرط داشتن درک صحیح از مباحثی مانند سشن، کوکی، حفظ امنیت در کار با دیتابیس، نحوه کار با فایل ها، شی گرائی و آشنایی با معماری MVC و عناوینی از این دست راه مناسبتری خواهد بود، در مجموع هیچ محدودیت و الزامی نیست، اینها همه مباحث مرتبط با هم هستند و می توانید تجربه شخصی خودتان را داشته باشید، نکته دیگر اینکه خیلی از ابزارها حین کار کاربرد دارند و نیازی نیست از قبل خود را درگیر آنها کنیم همین که یک آشنایی مختصر و دورنمایی داشته باشیم کافی است، اگر کسب درآمد هدف مهمتر است خیلی درگیر مباحث تئوری نشوید هر جا نیاز بود مبحث مربوطه را مطالعه کنید.
نویسنده: mahdi
۱۰:۵۸ ۱۴۰۰/۰۲/۲۱
سلام استاد عزیز مباحث امنیت php رو میشه لطفا تیتروار بگید که ببینم چیزی رو جا نمیندازم ، اسم هک میاد آدم فکر میکنه چه خبره ، الان که دارم امنیت php یاد میگیرم میبینم که به چه سادگی میشه کل سایت رو داغون کرد و به چه سادگی میشه ازش جلوگیری کرد ، واقعا نمیدونم اینایی که بسته آموزشی میفروشن انصاف ندارن که مسائل به این مهمی رو حتی بهش اشاره هم نمیکنن ، بعد تازه میگن با چیزایی که یاد گرفتین میتونین هر پروژه ای رو بزنین ، اونوقت من فهمیدم که با یه کوتیشن میشه تمام اون چیزایی که من یاد گرفتم رو داغون کرد :))
خیلی ممنون استاد عزیز موفق باشید
پاسخ: 
بله متاسفانه "بیزینس محوری" در خیلی از حوزه ها از جمله برنامه نویسی وب وارد و کیفیت کار را تحت الشعاع قرار داده، بعضا مطالبی عنوان می شود که برای ما هم عجیب است!، به هر صورت بحث امنیت وب شاخه های زیادی دارد اما خوشبختانه خیلی از این کارها به برنامه نویس مربوط نمی شود و باید در سطح سرور انجام شوند، به عنوان برنامه نویس حداقل باید با اصطلاحات زیر و نحوه کدنویسی صحیح در هر مورد آشنا باشیم:
- Cross-Site Scripting یا XSS و نحوه ایمن سازی فایل ها و تگ های ورودی.
- SQL Injection و نحوه ایمن سازی پارامترهای استفاده شده در پرس و جوهای MySQL با توجه به اکستنشن مورد استفاده (به فرض روش bind و prepared statements).
- Cross-Site Request Forgery یا CSRF و در نظر گرفتن فیلد حاوی متن یکتای تصادفی که توسط سرور ایجاد و در هر ارسال فرم با مقادیر موجود در سرور تطبیق داده می شود.
- آشنایی با توابع و روش های مربوط به ایمن سازی کلمه عبور در PHP مانند تابع password_hash و password_verify و همچنین کد کردن اطلاعات حساس اعضای سایت با توابع دو طرفه مبتنی بر کلید شخصی جهت نگهداری در دیتابیس و استفاده های بعدی (محافظت از اطلاعات در صورت به سرقت رفتن پایگاه داده).
- آشنایی با دستورات htaccess که جهت محدودسازی و جلوگیری از به فرض فرمت ها یا دایرکتوری های خاص یا لیست شدن فایل های دایرکتوری ها استفاده می شود.
- استفاده از کوکی ها به صورت Secure و تحت SSL، داشتن اطلاعات در مورد توابع و چرخه نشست (Session) و پارامترهای کوکی مانند SameSite و...
- آشنایی با حمله های عمومی وب مانند DDOS یا MITM.
- آشنایی با ساختار شبکه های کامپیوتری.
نویسنده: mahdi
۱۵:۴۳ ۱۴۰۰/۰۲/۲۵
سلام استاد عزیز وقت بخیر، میخوام یه تطابق با preg_match_all پیدا کنم ولی به مشکل خوردم میخوام در رشته زیر
@if(.......)
نقطه چین ها رو بعنوان تطابق بگیرم در بین اون نقطه چین ها هر چیزی باشه و نکته اصلی اینکه پرانتز هم ممکنه وجود داشته باشه (اینجا به مشکل خوردم) که بعد علامت $ گذاشتم آخرش و درست شد ولی به یه مشکل دیگه خوردم که کل رشته رو در نظر میگرفت یعنی امکانش هست که در رشته چند تا
@if(.......)    @if(.......)
وجود داشته باشه که همه رو یه تطابق برمیگردوند ولی من هر نقطه چین رو بعنوان یه تطابق جدا میخوام و میخوام در یک خط هم عمل کنه پس نمیشه در انتهای عبارت منظمی که مینویسیم از $ بعنوان پایان استفاده نکرده باشیم
استاد عزیز خیلی ممنون میشم راهنماییم کنی
موفق باشی
پاسخ: 
ابتدا باید تمام حالت های ممکن رشته و خروجی مد نظر مشخص شوند، در سوال منظورتان از نقطه چین هر مقدار داخل پرانتزها است یا خود نقطه چین مد نظر است؟ توالی if ها همیشه همراه فاصله است؟ چند نمونه رشته و خروجی مد نظرتان را درج کنید تا بتوانیم Pattern کاملی برای استخراج موارد مد نظر بنویسیم.
نویسنده: mahdi
۲۰:۰۸ ۱۴۰۰/۰۲/۲۵
سلام استاد منظورم از نقطه چین یه سری کد هستش مثل پایین و if ها هم همیشه درون این اتساین ایف فقط این دوتا پرانتز نیست ، متغیره معلوم نیست چند تاست
@if(count($x) > 1 && ($y == 2 || $z >= 7))
استاد عزیز میخوام کل موارد داخل پرانتز یعنی موارد زیر در یک تطابق جا بگیرن
count($x) > 1 && ($y == 2 || $z >= 7)
و میخوام بشه بعد از
@if(...)
نیازی نباشه برم خط بعد تا تطابق درست دربیاد یعنی میخوام بتونم در همون خط با قرار دادن حداقل یه اسپیس بازم متن بنویسم مثل این
@if(.......) matn matn 
یعنی میخوام تطابق طوری باشه که از @ شروع بشه و فقط تا پرانتز آخر ادامه پیدا کنه بعدش بشه با گذاشتن یه اسپیس از این ماجرا جدا بشم و متن جداگونه و کلا بی ربط به موضوعمون بنویسم و نیازی به خط بعد رفتن نباشه فقط به این دلیل که با pregmatch تداخل ایجاد میشه در نهایت میخوام ار اول تا آخر اینو مطابقت بده نه کمتر نه بیشتر
@if(.......)
و تطابق دوم هم موارد داخل پرانتز باشه و بعدش اگر چیزی نوشتیم اصلا ارتباطی به این کار ما نداشته باشه مثل پایین
@if(.......) matn matn ...
matn matn ...
استاد امیدوارم خوب توضیح داده باشم و میخوام استاد با preg_match_all انجام بشه چون در صفحه ممکنه چندین
@if(.......)
داشته باشم
استاد عزیز کارم فقط گیر این افتاد
خیلی ممنون موفق باشی
پاسخ: 
الگو اگر غیر ثابت باشد کار سخت می شود، با فرض اینکه الگو ثابت است این الگو را می توان نوشت:
(@if\(.*?\([^\)]+.*?\).*?\([^\)]+.*?\)\))
این الگو دستورات if را از نمونه متن زیر جدا جدا استخراج می کند:
txt @if(count($x) > 1 && ($y == 2 || $z >= 7)) txt txt txt txt @if(count($x) > 1 && ($y == 2 || $z >= 7)) txt txt txt 
در این فرصت در همین حد به ذهن می رسد.
regexr.com
(به روزرسانی) به نظر الگوی زیر مشکل را رفع می کند:
(@if\((?:[^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\))
نویسنده: mahdi
۲۱:۲۳ ۱۴۰۰/۰۲/۲۵
استاد بصورت زیر تونستم بنویسمش ولی میخوام بدون اون دو نقطه کالن های آخر درش بیارم ، کلا اونا رو نزارم ، الان مثلا گذاشتمشون که بتونم یه تمایزی برای پرانتز بسته آخر ایجاد کنم تا منظورمو درست و کامل بهتون برسونم ولی قصدم این نیست که اونا باشن
$str = <<<S
@if(old('x') == 1 || and (d) (x)): @if(old == (3)):
@if(old == 1):
S;
preg_match_all('/s*@if\((.*?)\):/', $str, $match);
print_r($match);

Array(
[0] => Array
(
[0] => @if(old('x') == 1 || and (d) (x)):
[1] => @if(old == (3)):
[2] => @if(old == 1):
)
[1] => Array
(
[0] => old('x') == 1 || and (d) (x)
[1] => old == (3)
[2] => old == 1
)
)
الان اگه اون دونقطه ها رو از رشته حذف کنید و دو مرتبه همین آرایه تطابق ها برگشت داده بشه ، یعنی به هدفمون رسیدیم
خیلی ممنون استاد عزیز مغزم دیگه داغون شد ، کم بدبختی داریم این فریمورکم که دارم مینویسم هر دقیقه یه باگی رو میکنه برام ولی به جون آرش خون سیاوش ول کنش نیستم :)
پاسخ: 
دو نقطه ها نقش اصلی دارند و مشکل کار دقیقا همین است یعنی یک کاراکتر یکتا برای تعیین پایان الگوها :)، در توضیحات گفتید که ممکن است متن بین دستورات if باشد، این الگو که به صورت Recursive است را با preg_match_all تست کنید احتمالا همان چیزی است که می خواهید:
(@if\((?:[^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\))
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





2 × 1
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form علیرضا
در:
مفید و کاربردی مرسی
۱۴۰۰/۰۳/۳۱

form محمود
در:
سلام مهندس وقت بخیر دوباره به کمک شما نیاز پیدا کردم ، چگونه می توان استایل صوت به یک متن داد. به...
۱۴۰۰/۰۳/۳۰

form پرتو
در:
سلام استاد خسته نباشید قالبم درست شد خیلی ممنون یه خواهش دیگه هم ازتون داشتم اینکه یه بوردر برای تک به تک پست ها جداگانه...
۱۴۰۰/۰۳/۲۴

form بهنیا
در:
سلام خسته نباشید ببخشید چطوری میتونم برای خود وبسایتم یه لینک بسازم؟ کد خاصی داره؟
۱۴۰۰/۰۳/۲۴

form Raha
در:
سلام وقت بخیر چه جوری می تونم از دو تا function باهم استفاده کنم. مثلا میخوام توی مسیج باکس دوتا عدد دلخواه بدم...
۱۴۰۰/۰۳/۲۴

form رها
در:
سلام ممنون میشم اگه راهنماییم کنید من میخوام تو جاوا اسکریپت توی مسیج باکس بصورت اختیاری عدد بدم و جمع و تفریق انجام بشه. ...
۱۴۰۰/۰۳/۲۴

form محمد
در:
با عرض سلام و احترام مجدد پیرو کامنت قبلی که لطف کرده و توجه فرمودید آدرس سایت این هست: از توجه و راهنمایی‌های همیشگی...
۱۴۰۰/۰۳/۲۳

form محمد
در:
سلام وقت بخیر با سپاس از تیم محترم وبگو یک سوال داشتم از خدمتتون در عکسی که در آدرس با...
۱۴۰۰/۰۳/۲۲

form پرتو
در:
با سلام استاد من براتون ایمیل فرستادم لطفا ایمیل خود را چک کنید با تشکر
۱۴۰۰/۰۳/۲۱

form پرتو
در:
سلام خوبید خسته نباشید من یه کد قالبی دارم که میشه براتون بفرستم و شما تغییرش بدین من قالبم رو می خاستم اگه...
۱۴۰۰/۰۳/۲۰

form سید ارمیا حسینی
در:
سلام ببخشید عالی بود اما اگه می خواستم مثلا چیزی رو ایجاد کنم که مثلا کاربر بعد از ورود به صحفه 5 ثانیه بعد وارد...
۱۴۰۰/۰۳/۲۰

form الی
در:
سلام وقت بخیر من میخوام یه سایت طراحی کنم و در قسمت هدر یه گیف بذارم ولی هر کار می کنم گیف نمایش داده...
۱۴۰۰/۰۳/۱۸

form علیرضا حسینی
در:
دمتون گرم خسته نباشید خیلی عالی بود
۱۴۰۰/۰۳/۱۸

form حامدترابی
در:
سلام چند وقته که وبلاگ شهیدحسن ترابی گودرزی باز نمیشه ولی با vpn باز میشه. میشه راهنماییم کنید. ممنون میشم
۱۴۰۰/۰۳/۱۶

form mahdi
در:
سلام استاد این تابع در لوکال هم ایمیل ارسال میکنه هم فایل ضمیمه ، البته زمپ رو یه سری تغییرات باید داد و حساب ایمیل...
۱۴۰۰/۰۳/۱۲

form mahdi
در:
سلام وقت بخیر ، استاد عزیز اگر ما با تابع mail یه تابعی بنویسیم که در لوکال قابلیت ارسال هر نوع ایمیلی رو داشته باشه...
۱۴۰۰/۰۳/۱۲

form masood
در:
سلام وقتتون بخیر ببخشید من یک سوالی دارم اگر بخوایم تنظیماتی که برای id و class در نظر داریم رو تو یه...
۱۴۰۰/۰۳/۱۱

form mahdi
در:
استاد وقتشو دارید امشب ببینیدش مثلا در حد نیم ساعت که وقتتونم گرفته نشه؟
۱۴۰۰/۰۳/۱۰

form mahdi
در:
سلام استاد وقت بخیر،استاد عزیز من یه چارت با جاوااسکریپت نوشتم که سه تا نمودار میلیه ای و خطی و نقطه ای رو در بر...
۱۴۰۰/۰۳/۱۰

form پرتو
در:
وای من نمی تونم توی زمینه طراحی قالب های دیگ فعالیت کنم چون خیلی سختن فک نکنم بتونم اگر جایی می شناسید که قالب های...
۱۴۰۰/۰۳/۰۹

form پرتو
در:
سلام خسته نباشید شرمنده مزاحم شدم دوباره، می خاستم بپرسم می ارزه کسی وبلاگ در مورد قالب سازی بزنه یا اینکه نه نمی ارزه آخه...
۱۴۰۰/۰۳/۰۹

form یاس
در:
سلام میخواستم بدونم چجوری باید فایل متنی HTML دارای هایپرلینک را باز کند و محتوای آنرا بخواند و سپس هایپرلینک های آن را شناسایی کند...
۱۴۰۰/۰۳/۰۸

form sattar
در:
سلام، اون قسمتی که اعتبار سنجی ورود حروف فارسی هست مشکل داره یعنی کاربر رو اجبار به وارد کردن حروف فارسی میکنیم اما اگر مثلا...
۱۴۰۰/۰۳/۰۸

form mahdi
در:
سلام استاد ckeditor بهتره یا TinyMCE؟ من اینو ckeditor دیدم که راست چین چپ چین نداشت بعد استاد عزیز من یه چیزی رو...
۱۴۰۰/۰۳/۰۶

form پرتو
در:
ممنونم از شما که کدش رو دادید فقط یه سوال داشتم و اونم اینکه این کد رو در کدوم قسمت قالب قرار بدم و ایا...
۱۴۰۰/۰۳/۰۴

form mahdi
در:
سلام نه استاد عزیز نیازی نیست چون خودمم فکر میکنم لوگو رو باید از قبل مثلا با فتوشاپ آماده داشت و فقط میخواستم این امکانم...
۱۴۰۰/۰۳/۰۳

form پرتو
در:
سلام خواستم تشکر کنم از کدی که قبلا بهم داده بودید درست شد قالبم واقعا ممنونم ازتون یه چیز دیگه می خاستم بگم اینکه یه...
۱۴۰۰/۰۳/۰۳

form دانیال
در:
باسلام خیلی ممنون بابت مطالب عالیه سایتتون این مطلب هم مثل بقیه مطالب عالی بود
۱۴۰۰/۰۳/۰۳

form mahdi
در:
سلام استاد عزیز ، بله استاد اونطوری قرار میگیره وقتی تصویر از قبل مثلا با فتوشاپ شفاف شده باشه ، ولی اگر بخوایم یک عکس...
۱۴۰۰/۰۳/۰۳
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.