در این نوشته می خواهیم نشان دهید چگونه می توان نشانی یک تصویر را به کمک متد GET به اسکریپت پی اچ پی بفرستیم و سپس آن را به کمک متد ()imagescale، آن تصویر فرستاده شده را تغییر اندازه دهیم. زمانی که می گوییم درخواست GET، به این مفهوم است که می خواهیم درخواستی را از نشانی URL و همراه با رشته کوئری به سرور و اسکریپت پی اچ پی بفرستیم.

در این برنامه فرض می کنیم یک فایل index.php داریم که کدهای اسکریپت درون آن نوشته می شوند و می خواهیم با نوشتن یک رشته کوئری شامل سه کلید به نام image و width و height، یک تصویر را کاهش یا افزایش اندازه دهیم. کلید image خودش یک نشانی URL مانند https://s.imgur.com/images/upload-giraffe.png را دریافت می کند. کدی که می نویسیم بسیار ساده است و برای کار کردن آن، باید نشانی فرستاده شده به کلید image دارای نام فایلی با پسوند باشد. برای نمونه نام فایل دروت نشانی باید با یکی از چهار پسوند png, jpg, jpeg یا gif پایان یابد. همچنین دو کلید width و height نیز اندازه های پهنا و درازا (ارتفاع) تازه برای تصویر را به اسکریپت می فرستند. کد زیر الگوی مسیر دلخواه ما را نشان می دهد که در آن شماره درگاه به کار رفته 8000 است و شاید این برای شما شماره دیگری باشد. همچینن نام فایل index.php گرفته شده است و از این رو نیازی نیست که نام آن را بنوسیم.

در کدهای زیر با سه عبارت if جداگانه، بررسی می شود که کلیدهای دلخواه در رشته کوئری هستند یا نه و اگر هستند آیا مقداری برای انها فراهم شده است یا نه؟ در نوشته فرستادن داده بوسیله آدرس URL به سایت – متد GET درباره رشته کوئری (Query String) و متد GET از پروتکل HTTP گفته ایم. در پی اچ پی آرایه سراسری GET_$ همه کلیدهای فرستاده شده از نشانی به اسکریپت کنونی را نگه می دارد. منظور از اسکریپت کنونی، همان اسکریپتی است که در مرورگر نوشته ایم. بنابراین درکدهای زیر و به کمک تابع های ()isset و ()empty بررسی می شود که آیا نخست کلیدهای دلخواه به نشانی URL فرستاده شده اند یا نه و سپس بررسی می شود که آیا برای آنها مقداری نیز فراهم شده یا آنها تهی (Empty) فرستاده شده اند. توجه کنید که متد ()isset بررسی می کند که آیا کلید دلخواه ما در رشته کوئری نوشته شده باشد و سپس از متد ()empty کمک می گیریم که مقداری نیز برای آن فراهم شده باشد.

توجه کنید که در هر عبارت if اگر کلید دلخواه باشد (یا ()isset) و همچنین مقداری هم داشته باشد (یا ()empty!)، پس متغیرهای با مقدار true ساخته می شود وگرنه این متغیرها با مقدار false ساخته می شوند. رشته کوئری عبارتی از یک یا چندین دوتایی Key=Value است که به پایان نشانی URL چسبانده می شود و کاربردهای گوناگونی دارد. الگوی رشته کوئری به گونه زیر است:

  • فرستادن داده از نشانی URL به اسکریپت های پی اچ پی
  • تغییر در روند اجرای برنامه. برای نمونه در اسکریپت یک متغیر به نام var1 شناسانده (تعریف) شده است که دارای یک مقدار پیش فرض است، حال می توان یک کلید در رشته کوئری فراهم کرده که اگر این کلید با مقدار فرستاده شود، پس مقدار آن جایگزین مقدار کنونی متغیر var1 شود. البته این یک نمونه بسیار ساده و پیش پا افتاده بود.
  • همچنین می توان پس از انجام یک سری از فرایند ها، داده هایی را در غالب رشته کوئری به نشانی URL بفرستیم.

در کد زیر بررسی می شود که آیا همه سه متغیر بالا دارای مقدار true هستند یا نه؟ چون عملگر and ه کار بردیم، پس زمانی عبارت if درست خواهد بود که مقدار هر سه متغیر true باشد، دگر عبارت نادرست بوده و دستور echo خط پایانی فراخوانی می شود. زمانی که هر سه متغیر true باشند، پس اکنون با عبارت if … elseif … else پسوند فایل بررسی می شود که آیا png یا jpeg/jpg یا gif است. برای این تابع ()strpos به کار رفته است. این تابع در وردی یکم، یک رشته را دریافت می کند که در اینجا همان مقدار کلید URL یا همان نشانی تصویری است که می خواهیم به اسکریپت بدهیم تا ابعاد آن را تغییر دهیم. ورودی دوم تابع ()strpos یک زیر رشته است که می خواهیم بفهمیم آیا درون رشته ورودی یکم هست یا نه؟ همانگونه که می بینید ورودی دوم پسوندی مانند png. (با نقطه) است. بنابراین ()strpos مقدار true برگشت می دهد اگر زیر رشته ورودی دوم در رشته اصلی اول باشد.

به هر حال در خط های ۳ یا ۵ یا ۷ با یکی از متدهای نوشته شده، یک تصویر از روی تصویر نشانی ورودی از کلید image ساخته می شود. سپس این تصویر به ورودی یکم متغیر ()imagescale فرستاده شده و مقدار کلیدهای width و height در رشته کوئری نیز که در متغیرهای width$ و height$ هستند نیز به ورودی های دوم و سوم فرستاده می شوند. در نهایت بر پایه آنچه که پیش از این گفتیم، برای نمایش تصویر متغیر new_image$ که همان تصویر تغییر اندازه داده شده است، نخست متد ()header را برای محتوای image/jpeg آماده کرده و سپس با تابع ()imagejpeg تصویر را نمایش می دهیم.