113

113

روش نصب Apache HTTP به همراه PHP سرور

http://www.iranphp.net

1

سرور

Apache HTTP به همراه PHP عنوان مقاله : روش نصب

نگارنده

: علی نادری

naderi@arcor.de

١٣٨١

: آدرس پست الکترونیک/۵/ تاریخ نگارش : ۵

http://www.iranphp.net

2

سرور

: Apache HTTP به همراه PHP روش نصب

را تا حد ممکن به صورت گام به گام توضیح دهم

را از آدرس

. Apache HTTP Server به همراه PHP در این نوشته سعی خواهم کرد روش نصب: Apache HTTP Server نرم افزار

http://www.apache.org/dist/httpd/binaries/win32/apache_2.0.40-win32-x86-no_ssl.exe

دریافت نمایید و آن را نصب کنید

.

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

کنید

) ( Default ) (در حالتی که همه ی گزینه ها، پیش فرض: Install کرده آن را Download آن را هم از آدر سهای زیر Installer و PHP نرم افزار

http://de.php.net/do_download.php?download_file=php-4.2.2-Win32.zip

http://de.php.net/do_download.php?download_file=php-4.2.2-installer.exe

که

مربوط به پیکربندی این برنامه است را بیابید

تغییرات زیر باید در این پرونده اعمال شوند

httpd.conf وجود دارد که در آن م یتوانید فایل \conf را نصب کرده اید، زیرشاخه ای به نام Apache HTTP Server در شاخه ای که. با یک ویرایش گر ساده ی متن می توانید این پرونده را باز کرده و تغییردهید .برای اجرا شدن فایل ها با پسوند: php

ها معرفی شده اند، سطر زیر را وارد م یکنیم

: ScriptAlias ١- در بخشی که

ScriptAlias

/php4/ "c:/php/"

در آن نصب شده ، وارد شود

سطر زیر را می آوریم

. PHP باید مسیری را که c:/php/ نکته این که: به جای: ، AddType application ٢- در قسمت

AddType applicatin

/x-httpd-php4 .php

هم این خط اضافه م یشود

: Action application ٣- در بخش

Action application

/x-httpd-php4 "/php4/php.exe"

را درآن ذخیره و اجرا کنید، می نویسیم

ما معرفی می شود

کنید

در بخش آدرس تایپ

کنید

.( این php بین علامت های نقل قول مسیر شاخه ای که م یخواهید پرونده های DocumentRoot ٤- جلوی عبارت.) LocalHost زیر فهرست به عنوان. Restart ، توسط منویی که می شود Taskbar را، با کلیک بر روی نشانه ی آن در Apache HTTP Server پس از اعمال این تغیراتBrowser نوشته اید، در شاخه ای که در بند ۴ به آن اشاره کردم کپی کرده و برای نمایش آن در PHP حال کافی ست برنامه ای را که با:

http://localhost/[ProgramName].php

مدیریت فایل های ارسالی توسط کاربران

http://www.iranphp.net

1

عنوان مقاله

: مدیریت فایل های ارسالی توسط کاربران

نگارنده

: مهدی ساغری

آدرس پست الکترونیک

: .………………

تاریخ نگارش

: …….…………

http://www.iranphp.net

2

مدیریت فایل های ارسالی توسط کاربران

:

را می دهند به عنوان مثال در قسمت

است و یا نمونه پیغام صوتی خود را به

( Html فایل از طریق صفحات (فرم های Upload حتما تا بحال سایت هایی را دیده اید که به کاربران اجازهJpg یا Gif های یاهو که شما به عنوان یک کاربر عادی می توانید تصویر خود را که یک فایل با فرمت Profile

و یا بصورت

PDF تان اضافه کنید و یا بخش آرشیو سایت های تحقیقاتی که به اعضای خود اجازه می دهند نتایج کار خود را در قالب یک فایل Profile

شده بر روی سایت قرار دهند

. Zip

به مطالب گفته شده در بالا حتما به این نتجه رسیده اید که در اینگونه سیستم ها سه نکته اساسی قرار داد

FTP.

فایل های غیر مجاز

.به جای HTTP ۱-چکونگی ارسال فایل با استفاده از پروتکل. Upload ۲-بررسی فرمت فایل و جلوگیری از

۳

-بررسی اندازه فایل و جلوگیری از ارسال فایلهای حجیم.

برای دریافت فایل از کاربر ابتدا باید فرمی به شکل زیر ایجاد کرد

:

<

<

<

<

form name="form1" method="post" action="_URL_" enctype="multipart/form_data">input type="file" name="userfile">input type="submit" name="Submit" value="Submit">/form>

کادر

مخصوص در یافت فایل قرار گرفته در واقع این همان فایلی است که کاربر قصد ارسال به سرور را دارد

Submit فرم بالا را از فرمهایی که تا بحال با آن کار کرده ایم متمایز می کند . در فرم بالا قبل از دکمه multipart/form_data عبارت.

ای دارد که قصد دارید عمل دریافت فایل را در آنجا انجام دهید

خوانده و بر روی سرور ذخیره کرد

. PHP اشاره به برنامه _URL_ در این فرم. Client تا اینجا فرم مورد نیاز طراحی شده است حال با یک برنامه ساده مثل نمونه زیر می توان فایل را از

<?

if

(isset( $Submit )) {

if

($_FILES['userfile']['type'] == "image/gif"){ copy ($_FILES['imagefile']['tmp_name'],

"files/"

.$_FILES['imagefile']['name'])

or die

("Could not copy");

echo

"";

echo

"Name: ".$_FILES['imagefile']['name']."";

echo

"Size: ".$_FILES['imagefile']['size']."";

echo

"Type: ".$_FILES['imagefile']['type']."";

echo

}

"Copy Done....";

else

{

echo

"";

echo

}

}?>

"Could Not Copy, Wrong Filetype (" .$_FILES['imagefile']['name'].")";

بر روی سرور ذخیره می

کند

Files باشد آنرا با همان نامی که روی کامپیوتر کاربر قرارداشته در شاخه GIF این برنامه در صورتی که فایل ارسالی یک فایل.

و تنظیمات آن متفاوت می باشند

ایجاد می گردند

ایجاد خواند شد

به جای

. PHP فایل تعریف می شوند بسته به نسخه Upload البته همانطور که میدانید متغییر هایی که برای. $HTTP_POST_FILES و $_FILES فعال باشد آرایه های track_vars موفق ، هنگامی که Upload بعد از یک. globals فعال باشد متغییرها به صورت register_globals سرانجام اگر$_FILES به بعد ترجیحا از متغییر عمومی PHP از نسخه ٤,٠,٣ به طور پیش فرض فعال است . از 4.1.0 : track_vars توجه

http://www.iranphp.net

3

استفاده می گردد

. $HTTP_POST_FILES

به منظور مهیا کردن مشخصات فایل

(های (ارسال شده ایجاد شده اند . محتوای این دو متغییر به شرح زیر است $HTTP_POST_FILES/$_FILES :

است

HTML نام انتخابی ما در هنگام ساخت فرم userfileالبته توجه کنید که

<?

$HTTP_POST_FILES

?>

['userfile']['name'];

نام اصلی فایل بر روی کامپیوتر کاربر

.

<?

$HTTP_POST_FILES

?>

['userfile']['type'];

اجازه ذخیره شدن داده می شود حال چنانچه بخواهیم کاربر را محدود به

نماییم

مقایسه کنیم

GIF فایل . در برنامه فوق تنها به فایلهای (MIME type) شناسه محتوایWav ارسال فایل های: "audio/wav" باید مقدار این متغییر را با

<?

.

$HTTP_POST_FILES['userfile']['size'] ?>[code]اندازه فایل برحسب بایت

[

code]<? $HTTP_POST_FILES['userfile']['tmp_name'] ?>

موقتا با آن نام بر روی سرور ذخیره می گردد

حمایت می کند

فعال باشد متغییرهای زیر موجود خواهند بود

. Upload نام موقتی که فایل در هنگام$HTTP_POST_FILES از PHP تنها در نسخه های ٤,١,٠ و بالاتر شناخته شده است و نیز نسخه ٣ $_FILES توجه : متغییر: register_globals پارامتر PHP.INI .همچنین اگر در فایل

<?

$userfile

$userfile_name

$userfile_size

$userfile_type

?>

در فایل

تعیین شده باشد

upload_tmp_dir فایل ها به طور پیش فرض در دایرکتوری فایلهای موقت سرور ذخیره می شوند مگر اینکه مکان دیگری توسط. در پایان اجرای اسکریپت چناچه فایل ارسال شده از طرف کاربر را به مکان دیگری انتقال ندهید و یا نام آن را تغییر ندهید PHP.INI

توسط سیستم این فایل پاک خواهد شد

.

و بالاتر می توانید خط اول برنامه فوق را بصورت زیر بنویسید

: PHP در صورت استفاده از 4.1.0

<?

if

{ <

(is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) <br />br />

//In PHP 4.1.0 or later, $_FILES should be used instead of $HTTP_POST_FILES.

ارسال چندین فایل به طور همزمان

:

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

باشد

ب است که این پیاده سازی همراه با استفاده بهینه از گرامر زبان.

برای اینکه کاربر بتواند بیش از یک فایل را در یک لحظه ارسال کند فرمی به شکل زیر طراحی

کنید:

<

<

form name="form1" method="post" action="_URL_" enctype="multipart/form_data">input type="file" name="userfile[]">

http://www.iranphp.net

4

<

<

<

<

input type="file" name="userfile[]">br />input type="submit" name="Submit" value="Submit">/form>

همانطور که مشاهده می شود این فرم دارای دو کادر دریافت فایل است که به نام آنها به صورت یک آرایه است

. پس از ارسال این فرم بر روی سرور متغییر های

:

<?

$HTTP_POST_FILES

['userfile']['name'][0]

$HTTP_POST_FILES

['userfile']['size'][0]

$HTTP_POST_FILES

['userfile']['type'][0]

$HTTP_POST_FILES

?>

['userfile']['tmp_name'][0]

دلالت بر مشخصات فایل اولی و متغییرهای

:

<?

$HTTP_POST_FILES

['userfile']['name'][1]

$HTTP_POST_FILES

['userfile']['size'][1]

$HTTP_POST_FILES

['userfile']['type'][1]

$HTTP_POST_FILES

?>

['userfile']['tmp_name'][1]

دلالت بر مشخصات فایل دوم دارند

. همینطور الی آخر می توان چندین فایل را ارسال کرد.

HTTP PUT

روش

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

خاصی در سرورها دارد از توضی

ظ امنیت سرور نیاز به تنظیماتح آن در اینجا صرف نظر کرده ام . چنانچه مایل به آشنایی با این روش هستید به آدرس زیر مراجعه کنید:

http://www.php-center.de/en-html-manual/features.file-upload.put-method.html

درهنگام نوشتن چنین برنامه هایی مراقب مجوز هایی که به دایرکتوری ذخیره این فایل ها می دهید و همچنین بررسی اینکه فایل ارسال شده از طرف کاربر همان

چیزی است که باید باشد باشید

نگاهی هم به مقاله زیر داشته باشید

.فراموش نکنید که همیشه عده ای بر روی اینترنت به دنبال راهی برای نفوذ به کامپیوتر و یا وب سایت شما هستند بد نیست:

http://securityresponse.symantec.com/avcenter/security/Content/2208.html

نمایش چند صفحه ای اطلاعات

http://www.iranphp.net

1

عنوان مقاله

: نمایش چند صفحه ای اطلاعات

نگارنده

: آرش میکائیلی

arash@iranphp.net

تاریخ نگارش

: آدرس پست الکترونیک: …….…………

http://www.iranphp.net

2

نمایش چند صفحه ای اطلاعات

:

تصمیم

استفاده شده اما این روش را

بکار برد

DataBase با توجه به مطالب مطرح شده در انجمن این سایت و جالب بودن بحث صفحه به صفحه نمایش دادن اطلاعات نتیجه شده از جستجو درMySQL گرفتم که مقاله ای در این خصوص تهیه کنم و امیدوارم که این مطالب مورد استفاده دوستان قرار بگیرد.در این مقاله از. DataBase می توان با هر

:

LIMIT جزء

را در

خود داشته باشیم

DataBase کلید حل مشکل ماست ، به وسیله این جزء است که ما می توانیم سطرهای مورد نظر خود از Select در عبارت LIMIT جزء. Query

با یک آرگومان استفاده شود تعداد جواب به آن

LIMIT به دو شکل به کار می رود با یک آرگومان و یا با دو آرگومان ،این آرگومانها عدد هستند ، اگر LIMIT

عدد محدود می شود

:

SELECT

* FROM table LIMIT 5

با دو آرگومان استفاده شود آرگومان اول مشخص کننده

سطرها از

LIMIT را در جواب بر می گرداند ،اما اگر Table در این حالت ٥ سطر اول Select عبارتSQL سطر آغازین است و آرگومان دوم تعداد سطرهایی را که باید برگردانده شوند را مشخص می کند ، البته باید به این نکته توجه کرد که در

.(

صفر ( ٠) شروع می شوند نه از یک ( ١

SELECT

* FROM table LIMIT 5, 5

را برمی گرداند

مشکل نیست ولی برای اینکه به هدف مطرح شده در این مقاله نیل کنیم لازم است که چگونگی عملکرد آن را درک کنید

. DataBase سطرهای ٦ تا ١٠ از SQL این عبارت. LIMIT کار با جزء

:

$start گام اول متغیر

استفاده استفاده کنیم

. اما سوال این است که چگونه متوجه DataBase در اینجا می دانیم که از چه چیزی باید برای بدست آوردن سطرهای مورد نظر خود از

$start

استفده می کنیم و این متغیر را از صفحه ای به صفحه دیگر می فرستیم

کنیم یا به عبارت دیگر از کدام سطر باید شروع کنیم ؟ پاسخ خیلی روشن است ما از یک متغیر به نام LIMIT می شویم که از کجا باید.

می کنیم

: PHP حال که روش کار مشخص شده شروع به نوشتن کد در

<?

$query

?>

php= "SELECT * FROM table LIMIT " . $start . ", 10";

می کند

می نویسیم و یا با شرطی چک می کنیم که

اگر قبلا مقداری به آن داده نشده ما مقدار آن را صفر می کنیم لازم است برای این کار از کدی شبیه به کد زیر استفاده می کنیم

. اما برای مشخص select باشد را start را از جایی که مساوی مقدار table سطر از query ماست و این 10 query این شکلURL دو راه وجود دارد(در هنگامی که اولین ١٠ سطر را بازیافت می کنیم ) یا آن را در start کردن مقدار:

<?

php

if

?>

(!isset($start)) $start = 0;

به صورت خودکار صفر خواهد شد

$start حالا وقتی کسی صفحه ما را مشاهده کند مقدار

:

Previous و Next های Link ساختن

http://www.iranphp.net

3

داریم که به ما می گوید از کجا شروع کنیم و از طرفی

start خیلی ساده است اگر آنچه را که تا اینجا انجام داده ایم مرور کنید می بینید که ما متغیری به نام

Next

هست یا نه

سطر باشد و ما در صفحه پنجم از

است و ما سطرهای ٥٠ تا ٦٠ را در جواب داریم پس صفحه قبل باید سطرهای ۴۰ تا ٥٠ را نشان دهد یعنی

می دانیم که در هر مرحله چند سطر را در جواب بر می گردانیم با توجه به این اطلاعات در هر مرحله می توانیم مشخص کنیم که آیا نیازی به. Previous وLIMIT) مان دریافت می کنیم (بدون استفاده از 63 query برای مثال فرض کنید که کل سطرهایی که ما در جواب از$stat= جواب باشیم در این حالت 50

نیز صادق است

.

Next نیاز داریم همین مطلب برای Previous برای صفحه قبل بزرگتر از صفر می شود پس به $start است .چون $stat=40

این کار را با تکه کد زیر انجام می دهیم

<?

php

if

($start > 0)

echo

"<a href=" . $PHP_SELF . "?start=" . ($start - 10) .">Previous</a><BR>n";

if

($numrows > ($start + 10))

echo

?>

"<a href=" . $PHP_SELF . "?start=" . ($start + 10) .">Next</a><BR>n";

حال ما تمام قسمتهایی را که نیاز داشتیم ایجاد کردیم و وقت آن رسیده که تمام این قسمتها را در کنار هم قرار دهیم

:

<?

php

if

(!isset($start)) $start = 0;

$query

= "SELECT * FROM table LIMIT " . $start . ", 10";

//do database connection

$result

//display data

//this code was wrong, I did not have the second query.

// need another query to get the total amount of rows in our table

= mysql_query($query); //you should do error checking

$query

= "SELECT count(*) as count FROM table";

$result

= mysql_query($query);

$row

= mysql_fetch_array($result);

$numrows

= $row['count'];

if

($start > 0)

echo

"<a href=" . $PHP_SELF . "?start=" . ($start - 10) . ">Previous</a><BR>n";

if

($numrows > ($start + 10))

echo

?>

"<a href=" . $PHP_SELF . "?start=" . ($start + 10) . ">Next</a><BR>n";

امیدوارم که این تو

ضیحات ایده کلی را به شما برای این کار داده باشد ، و بتوانید این مطالب را برای کارهای خود استفاده کنید.