img

چند تکنیک کار با PHP…

/
/
/

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

آیا این نقدها به PHP وارد است؟
خیلی مهم است که ما هرگز کورکورانه تصمیم گیری نکنیم، لذا باید همیشه در بحث کردن له یا علیه نرم افزاری جانب بی طرفی را حفظ کنیم.
آیا PHP زیباترین زبان برنامه نویسی است؟ قطعا اینطور نیست مخصوصا اگر چند روزی با برنامه های Ruby و یا Python وقت بگذرانید متقاعد خواهید شد که برنامه های زیباتری هم وجود دارد.
آیا درست است که PHP حاوی ابهامات میباشد از پارامترهای نامرتب (که برای مثال در بالا گفته شد) گرفته تا ابهام در نوشتن حروف بزرگ و کوچک(capitalization)؟ پاسخ یقینا آری است.
اما آیا PHP آسانترین زبان سمت سرور (server side)میباشد که میتوان برای شروع انتخاب کرد؟ بدون شک، بله. مطلب مذکور این تصور را برای خیلی ها ایجاد میکند که برنامه نویسان PHP مبتدی و ناپخته هستند. که البته خیلی هم از حقیقت دور نیست. بطور حتم با این کلیت موجی از تازه واردان به سمت برنامه نویسی روی می آورند که به زعم ما حرکت خوبی است. اینان نسل بعد میباشند. این سطح از مقبولیت همچنین باعث جذب تعداد بیشماری از برنامه نویسان مجرب و حرفه ایی میشود! با توجه به این نکته باید پرسید که آیا میتوان کدهای زیبا در PHP نوشت؟ بله. برای اثبات این ادعا تنها کافی است فریم ورکهای مدرن و جدید را نظیر Laravel مروری نمائید.
بنابراین همانند همه برنامه های دیگر، PHP نیز سهم خودش از مشکلات را دارد. از ما بپذیرید که همه برنامه ها محاسن و معایب خودشان را دارند با این تفاوت که برنامه نویسان مجرب میدانند که چطور از محاسن هر زبان استفاده بهینه ایی ببرند.
حالا که فهمیدیم PHPزبانی نیست که از آن احساس شرم و خجالت کنیم ما قصد داریم تا ۲۰ نکته گوناگون را با شما در میان بگذاریم هر چیزی از حقه های ساده و بامزه گرفته تا بهترین تمرین ها.

MySQL_connect را به کناری بگذارید
یکی از مکررترین انتقادهایی که به PHP میشود این است که این برنامه بر روی حملات باز است. متاسفانه این منتقدین اطلاعات چندانی ندارند. حقیقت این است که اگر برنامه نویس مسئولانه کارش را انجام ندهد برنامه نوشته شده با PHP، میتواند قربانی انواع حملات از injection SQL تا CSRF باشد. گفته میشود به هر اندازه که برنامه نویس از قواعد حتی ساده پیروی کند این حملات به سرعت تغییر ماهیت داده و دیگر تهدیدی محسوب نخواهد شد.
به راحتی میتوان ادعا کرد بیشترین تهدیدی که از سمت PHP باشد مربوط به injection SQL خواهد بود. استنباط اولیه این است که برنامه نویس ناآگاهانه به کاربر اجازه داده تا داده های ورودی خود را در داخل یک SQL query جایگذاری نماید. به سناریوی زیر توجه کنید:

۰۰۱ ‘SELECT * from myTable WHERE id=’’ ‘ . $_GET[‘id’] . ‘ ‘’ ‘ ;

وحشتناک است! شما قبول کرده اید که کلید id از آرایه سراسری $_GET درواقع یک عدد صحیح (Integer) است که در آن مکان شما میتوانید ردیف دلخواه خود را از جدول (table) انتخاب نمائید.
اما چه میشود اگر ما به جای آن با زرنگی این query را پایان داده و جدول را ببندیم؟

۰۰۱ $_GET[‘id’] = ‘ ‘’; drop table myTable ‘ ;

این مقدار سپس داخل SQL query جایگذاری میگردد:

۰۰۱ ‘SELECT * from myTable WHERE id = ‘’’’; drop table myTable’ ;

خداحافظ جدول! مثال دیگر ترجمه یک درخواست برای یک ردیف تک در بانک داده، به یک درخواست برای تمام ردیفها میباشد.

۰۰۱ $_GET[‘id’] = ‘ ‘’ ‘’or 1’ ;
۰۰۲ ‘SELECT * from myTable WHERE id = ‘ ‘’ ‘’or 1’ ;

با ارسال or 1 به برنامه، از آنجائیکه گزاره فوق همیشه صحیح (true) را بازمیگرداند، مشخص مینمائیم که SQL query تمام ردیف های جدول را بازگرداند!
یک قاعده کلی است که میگوید شما باید تمام داده های اعمال شده توسط کاربر را مخرب و مضر فرض کرده و آنها را در حکم حمله تلقی نمائید. البته راههای زیادی برای محافظت در برابر این نوع حملات وجود دارد که برای مثال میتوان به mysql_real_escape_string اشاره کرد.
هرچند روش فوق جواب میدهد اما ترس را کنار گذاشته و در استفاده از mysql برای جستجو در بانک داده خود دست نگاه دارید. PHP در واقع سه API (برنامه واسط کاربری) متفاوت را برای اتصال به بانک داده MySQL استفاده میکند که بین آنها روش فوق آخرین انتخاب شما باید باشد.
توجه: انتظار میرود که اتصال به بانک داده توسط روش فوق در نسخه های بعدی PHP به کلی منسوخ گردد.
به جای آن از PDO و کدهای آماده آن بهره ببرید. حسن استفاده از برنامه فوق اینجاست که داده های کاربر دیگر هیچگاه به درخواست SQL وارد(Injection) نمی شوند. به این ترتیب دیگر امکان ندارد (هیچگاه چیز ناممکنی وجود ندارد) که کاربر با جاگذاری داده های مخرب باعث آسیب رساندن به ساختار داده مان شود.
با کمک PDO و کدهای آماده آن، میتوانیم به ترتیب زیر عمل کنیم:

۰۱ $conn = new PDO(‘’mysql : host=localhost;dbname=myDatabase’’ ,
$username, $password);

از گزاره های آماده استفاده کنید. خود اقدام به شبیه سازی نکنید!

۰۰۱ $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
۰۰۲ $stmt = $conn->prepare(‘SELECT * from myTable WHERE id = :id’);
۰۰۳ $stmt->excute([
۰۰۴ ‘:id’ => $_GET[‘id’]
۰۰۵ ]);
۰۰۶ $results = $stmt->fetchAll(PDO::FETCH_OBJ);

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

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

۰۰۱ preg_match(
۰۰۲ ‘/(?:\d{3})?-?\d{3}-\d{4}/ ‘ ,
۰۰۳ $number
۰۰۴ );

هر چند که اکنون ممکن است هر قسمت از این عبارات را متوجه شویم اما برای مثال پس از گذشت یکسال ما هیچ سر نخی نخواهیم داشت که هر قسمت مشخص از این کد چه معنایی در بر دارد مانند ?: در ابتدای خط سوم ( البته در اینجا معنی گروه های غیر تطبیقی را میدهد).
اجازه دهید به جای آن از /xflag برای اطلاع خودمان در آینده و اجتناب از گیج شدن استفاده کنیم.

۰۱ preg_match(
۰۲ ‘/
۰۳ (?:\d{3})? # The area code….code can be optional
۰۴ -?\d{3} # The prefix
۰۵ -?\d{4} # The line number
۰۶ /x’ ,
۰۷ $number
۰۸ );

این یک مثال ساده و قابل فهم است که کمک میکند تا تصور کنید مزایای /x flag چگونه زمانیکه قصد نوشتن برنامه های بسیار پیچیده را دارید به کمک شما میآید.

سر هر چیز بیخودی بحث نکنید
تنها یک جستجوی نسبتا سریع در گوگل میتواند موضوعات بی شماری درباره کارآیی PHP در اختیار شما بگذارد. اما نکته ایی که جای تاسف دارد این است که بسیاری از این موضوعات یا به اشتباه تهیه شده است یا اینکه به سطح کارآیی می پردازد که طیف وسیعی را شامل میشود.
برای نمونه یکی از این مناظرات در خصوص استفاده از علامات نقل قول است به نحوی کهsingle quotation (‘) در برابر double quotation (‘’) برای نمایش رشته string میباشد. برای آندسته از کسانی که با این مقوله آشنایی ندارند موضوع این است که PHP نمی بایست single quote را کامپایل نماید این در حالی است که هنگام جستجو برای متغیرهای داخل برنامه و هم از نظرکارآیی، بهتر است و البته که استاندارد پذیرفته تری نیز است که همیشه از single به جای double استفاده کنیم.

۰۱ $name = ‘Bob’ ;
۰۲ echo ‘Hi, $name’; // Hi, $name
۰۳ echo “Hi, $name”; //Hi, Bob

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

متغیرهای CSS با PHP
این روزها خیلی از طراحان از امکانات CSS مانند پیش پردازنده های LESS یا Sass بهره می برند. هر چند در بعضی موارد هنگامیکه پروژه به قدری بزرگ نیست که از آنها استفاده کنید همچنان مایل به استفاده از قابلیت های متغیرها میباشید.
اما اگر کمی زرنگ باشیم حتی با کمک نسخه های قدیمی PHP هم قادر به استفاده از آنها میباشیم. اجازه دهید تا ابتدا با مفاهیم پایه شروع کنیم. فایل style.php زیر را در نظر بگیرید که شامل فهرستی از متغیرهای PHP و CSS میباشد:

۰۱ <?php
۰۲ Header(“Content-type: text/css; charset : UTF-8”);

متغیرها

۰۱ $primary = ‘red’ ;
۰۲ ?>
۰۳ .container {
۰۴ Margin: 0;
۰۵ Padding: 20px;
۰۶ Color: <?= $primary; ?>;
۰۷ }

باور کنید یا نکنید اگر از درون کد HTML خود به این فایل کوچک در اینجا ارجاع دهید:

<link rel=”stylesheet” href=”style.php”>

برای کار کردن برنامه کافی خواهد بود هر چند در اجرا بعضی نکات قابل توجه دور از چشم میماند. بیشتر به این خاطر که ما در حال استفاده از PHP هستیم ، و این فایل شانسی برای ذخیره شدن (cash) ندارد ( حداقل نه بدون اعمال چند تا حقه ساده). به جای آن راه حل بهتر آنست که از تکنیک زیر برای نوشتن برنامه استفاده کرده و آنگاه هنگام اجرا آنرا به CSS تبدیل کنیم. این تبدیل از طریق خط فرمان انجام خواهد شد:

۰۰۱ php style.php > style.css

فرمان فوق PHP را اجرا کرده و خروجی را به فایلی بانام style.css ارسال مینماید. با این تکنیک شما میتوانید چنانکه گفته شد از قدرت متغیرها (و PHP) کمک گرفته تا در نهایت یک css نیز برای تولید نهایی برنامه تهیه کرده باشید.
آشنایی با فریم ورکهای PHP
معمولا تمایل ما برای توسل به برنامه WordPress به قدری زیاد است که ما را هیچگاه وادار به امتحان برنامه دیگری نمیکند. اما چرا به جای آن از فریمورک‌های PHP نظیر FuelPHP و یا Laravel استفاده نکنیم؟
فرض کنید که میخواهیم یک جدول از کاربران ایجاد نمائیم. در Laravel به جای ساختن تعدادی رشته در SQL میتوانیم از قدرت و انعطاف migrationها استفاده کنیم. استفاده از ابزار خط فرمان Laravel یعنی artisan، ما را قادر به ساختن چهارچوب برای ایجاد و خلق جدول کاربران مینماید.
۰۰۱ php artisan migrate:make create_users
کد بالا یک کلاس Create_Users migration همراه با دو متد: up و down ایجاد مینماید. سپس میتوانیم از کلاس مفید Schema برای ساختن جدولمان و بدون نیاز به قراردادن خطوط تودر توی (nest) SQL درون کد PHP کمک بگیریم. مثال زیر:

۰۰۱ class Create_Users {
۰۰۲ /* Create the table. */
۰۰۳ public function up()
۰۰۴ {
۰۰۵ schema::create(‘users’ , function($table) {
۰۰۶ $table->increments(\id\);
۰۰۷ $table->string(‘username’);
۰۰۸ $table->string(‘password’);
۰۰۹ $table->string(‘email’);
۰۱۰ $table->timestamps();
۰۱۱ });
۰۱۲ DB::table(‘users’)->insert($new_user);
۰۱۳ }
۰۱۴ / * Revert the changes to the database. * /
۰۱۵ public function down()
۰۱۶ {
۰۱۷ schema::drop(‘users’);
۰۱۸ }
۰۱۹ }

جدول هم اکنون و با اجرای خط زیر ایجاد خواهد شد:

۰۰۱ php artisan migrate

جدول شما اکنون ایجاد شده است! قدرت migrations در اینجا است که ما میتوانیم تمام این تغییرات را برگردانیم:

۰۰۱ php artisan migrate:rollback

و حالا جدول حذف شده است. این فقط مثالی بود از قابلیتهای فریمورک جدیدی مانند Laravel که عرضه مینماید.

CLOSUREها
کاربران جاوااسکریپت برای سالیان درازی از قابلیتهای clouserها لذت می بردند. خوشبختانه ما آنها را از زمان نسخه ۵٫۳ در PHP نیز داریم. اگر نام closure برای شما خیلی ترسناک است بهتر است به آن فقط به چشم یک نوع تابع مخصوص نگاه کنید.
بلافاصله میتوانید استفاده از آنها را نظیر توابع بازگشتی تصور کنید، مشابه آن چیزی که احتمالا در jQuery استفاده میکردید. در اینجا مثالی از برنامه WordPress می آوریم:

۰۱ add_action(‘publish_post’ , function() {
۰۲ // send email to subscribers
۰۳ });

بعلاوه closureها قابل انتساب به متغیرها هستند:

۰۰۱ $name = function() {
۰۰۲ return ‘Douglas Quaid’ ;
۰۰۳ };
۰۰۴ $name(); // Douglas Quaid

حتی از این هم بهتر یک closure میتواند مقادیر را با استفاده از کلمات کلیدی(keywords) از دامنه (scope) خانواده نیز به ارث ببرد.

الگوبندی Blade
آیا دلیل دیگری برای توجه به Laravel نیاز دارید؟ در اینصورت وارد الگوبندی Blade شوید. خیلی از فریمورک ها تعدادی راه حل برای الگوبندی (Templating) ارائه میدهند. اما جایگاه Blade بین بهترین ها قرار دارد. همه ما از فرآیند ایجاد فرم ها بیزاریم; به همین دلیل blade قدم پیش گذاشت که از درد جانکاه این فرآیند بطور قابل ملاحضه ای بکاهد.
Blade به شما امکان میدهد تا از ساختاری زیبا و یکدست برای ساختارهای کنترلی PHP و همین طور نمایش داده ها استفاده کنید. مثلا به جای قراردادن <?php?> میتوانیم از عبارت {{}} استفاده کنیم. در مثال زیر:

۰۰۱ ?{{ Form::open(‘task/5’ , ‘PUT’) }}
۰۰۲ <ul>
۰۰۳ <li>
۰۰۴ {{ Form::label(‘title’ , ‘Title’) }}
۰۰۵ {{ Form::text(‘title’) }}
۰۰۶ </li>
۰۰۷ </li>
۰۰۸ {{ Form::label(‘message’, ‘Message’) }}
۰۰۹ {{ Form::text(‘message’) }}
۰۱۰ </li>
۰۱۱ <li> {{ Form::submit(‘Update Task!’) }} </li>
۰۱۲ </ul>
۰۱۳ {{ Form::close() }}

جهش به فضای مجازی
دور از ذهن نخواهد بود که در حین کارتان با فرآیندی نظیر بازکردن یک برنامه FTP مانند Transmit و کشیدن پوشه آپدیت شده به روی سرورتان مواجه شوید. بطور واضح این یک تمرین نیست بلکه یک واقعیت است. با خود بیاندیشید چه اتفاقی خواهد افتاد اگر اشتباه کرده باشید و مجبور باشید به نقطه ایی قبل از زمان آپدیت کردن فایلها برگردید. این کار به سادگی یک کشیدن و اندختن (drag and drop) نیست.
به جای آن بهتر است که برنامه خود را در فضای ابری (cloud) ذخیره کرده و از Git-based استفاده کنید. توجه داشته باشید که استفاده از پلاتفرم های نظیر PHP Fog یا Pagoda Box میتواند میزبانی سریع و قابل گسترش برای پروژه های PHP و برنامه های کاربردی شما باشند.
با این متد مرتب کردن پروژه شما به احتمال صد در صد میتواند از طریق خط دستور به انجام رسد.

ایجاد تصاویر کوچک (thumbnails)
گرچه کار با کتابخانه GD طاقت فرسا است، وقتی پای صحبت کار با تصاویر وسط باشد از قابلیتهای بالایی برخوردار است. برای مثال در ایجاد تصاویر کوچک بطور پویا باید گامهای زیر را برداریم:
اول با کمک تابع imagecreatefromjpeg تصاویر را از روی فایل سیستم بارگذاری مینمائیم. سپس از تابع getimagesize استفاده نموده تا پهنا و ارتفاع تصاویر را تعیین کنیم. این تابع یک آرایه بازمیگرداند که شامل اطلاعات گوناگونی درباره تصاویر است نظیر ابعاد، و نوع فایل. در این مثال ما تنها با ابعاد سرو کار داریم بنابراین با کمک تابع list دو آیتم اول را در آرایه و تحت متغیرهای $x و $y به ترتیب ذخیره مینمائیم.

۰۰۱ $source = ‘webdesigner.jpg’ ;
۰۰۲ $original = imagecreatefromjpeg($source);
۰۰۳ list($x, $y) = getimagesize($source);

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

۰۰۱ $desired_with = 200;
۰۰۲ $deired_height = $y / ( $x / $desired_width );

ما پهنا را بر روی ۲۰۰ قرار داده و با یک محاسبه کوچک ریاضی مقداری که $y میتواند بپذیرد را محاسبه میکنیم.
حالا آماده تولید تصاویرکوچک هستیم برای این منظور از تابع imagecreatetruecolor استفاده مینمائیم.

۰۰۱ $thumb = imagecreatetruecolor ($desired_width, $desired_height;

کد زیر کادر دربرگیرنده تصاویر کوچک را تنظیم میکند. سپس ما تصویر اصلی را که مورد اصلاح قرار دادیم داخل $tumb کپی میکنیم.

۰۰۱ // dest, original image, dest_x, dest_x, src_x, src_y, dest_w, dest_h, src_w, src_h
۰۰۲ imagecopyresampled($thumb, $original, 0, 0, 0, 0, $desired_width, $desire_height, $x, $y);

گام نهایی تنظیم نوع محتویات (content-type) و ارسال تصویر به مرورگر میباشد.

۰۱ header (“Content-type: image/jpeg”) ;
۰۲ imagejpeg($thumb);

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

۰۰۱ imagejpeg($thumb, ‘image-thumb.jpg’);

وضوحاً این روش پیاده سازی یک برنامه ساده است (بصورت procedure). اما شما احتمالاً قصد دارید که عملکرد این تابع را در غالب یک کلاس قابل استفاده و انعطاف پذیر داشته باشید.

استفاده از XDEBUG
هنگام نیاز شما به توانایی بیشتر درعیب یابی، میتوانید از برنامه جذاب PHP یعنی Xdebug استفاده کنید. برای این کار فایل php.ini را باز کرده و به دنبال [xdebug] وهمچنین خط زیر آن zend_extension بگردید و سپس با حذف علامت (;) ازابتدای آن، از حالت توضیح آنرا خارج نمائید. اگر نمیدانید که کجا فایل php.ini شما ذخیره گردیده است، ترمینال را باز کرده فرمان

php –i I grep ‘Loaded Configuration File’

را اجرا کنید. خروجی آن مسیر فایل ذخیره شده میباشد.
بعد چنانچه بخواهید خطاهای HTML را نیز فعال کنید به دنبال’html_errors’ گشته و مقدارآن را on کنید . درنهایت هم Apache را راه اندازی مجدد نمائید. دیگر همه چیز آماده است!

۰۰۱ git add . # add all changed files to the stage
۰۰۲ git commit –m ‘Added about page’ # commit the changes
۰۰۳ git push origin master # push the changes to PHPFog

با استفاده از همین سه خط دستور ساده ( که حتی میتوان آنرا با کمک اسامی مستعاراز این هم مختصر کرد) ما قابلیتهای این نسخه را همراه با Git تکیه گاه کار خود ساخته و آخرین تغییرات را به خوبی همیشه به PHP Fog اعمال میکنیم. اگر نیاز باشد که تمام آپدیت ها را بازگردانیم به سادگی اجرای کد زیر خواهد بود:

۰۰۱ git reset HEAD^ –hard
۰۰۲ it push origin -f

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

یافتن فایلها با GLOBO
با تابع glob شما میتوانید یک دایرکتوری را برای یک مجموعه مشخص از فایلها جستجو کنید. اجازه دهید برای مثال تمام فایلهای JPEG را پیدا کنیم.

۰۱ $files = glob(‘*.jpg’) ;
۰۲ Print_r($files);

تکه کد بالا آرایه پائین را برمیگرداند:

۰۱ Array
۰۲ (
۰۳ [۰] => image.jpg
۰۴ [۱] => people.jpg
۰۵ [۲] => photo.jpg
۰۶ )

گرچه این خیلی مفید میباشد اما هنوز تکلیف ما را با پسوندهای JPEG و PNG روشن نکرده است؟ برای به دام انداختن آنها نیز ما میتوانیم از GLOB_BRACE استفاده کنیم.

۰۱ $files = glob(‘*.{jpg,jpeg,png}’ , GLOB_BRACE);
۰۲ Print_r($files);

حالا ما تمام فایل ها را به دام انداخته ایم یا حداقل آنهایی را که پسوند PNG, JPG و JPEG را دارند.

۰۱ Array
۰۲ (
۰۳ [۰] => image.jpg
۰۴ [۱] => people.jpg
۰۵ [۲] => photo.jpg
۰۶ [۳] => city.jpeg
۰۷ )

بعنوان آخرین نکته در مورد glob، اگر شما بخواهید تمام مسیر تا فایلهای یافته شده را برگردانید، میتوانید آنرا به سادگی انجام دهید:

۰۱ $files = glob(‘*.{jpg,jpeg,png}’ , GLOB_BRACE);
۰۲ $files = array_map(‘realpath’ , $files);
۰۳ Print_r($files)

که آرایه زیر را روی خروجی می فرستد:

۰۱ Array
۰۲ (
۰۳ [۰] => /Applications/MAMP/htdocs/project/image.jpg
۰۴ [۱] => /Applications/MAMP/htdocs/project/people.jpg
۰۵ [۲] => /Application/MAMP/htdocs/project/photo.jpg
۰۶ [۳] => /Application/MAMP/htdocs/project/city.jpeg
۰۷ )

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

It is main inner container footer text