PDA

View Full Version : آپلود عکس و بعد نمایش عکس



hamidhassas
شنبه 17 دی 1390, 17:27 عصر
چطور میشه یک عکس رو با PHP از روی هارد کامپیوتر شخص که انتخاب شده بر روی سایت خود آپلود کرد و بعد اون عکس رو در یک صحفه نمایش داد

منظورم ریختن عکس تو دیتابیس و یا هاست است و بعد نمایش آن عکس هست

لطفا قدم به قدم و جزء به جزء توضیح بدین
ممنون

MMSHFE
شنبه 17 دی 1390, 18:15 عصر
با سلام، مرحله اول، ایجاد یک فرم برای دریافت فایل هست:


<form action="store.php" enctype="multipart/form-data" method="post">
<input name="MAX_FILE_SIZE" type="hidden" value="1048576"/>
<input name="photo" type="file"/><br/>
<input type="submit" value="Upload"/>
</form>

توی کد فوق، نکات زیر مهم هست:
1- صفحه مقصد فرم، فایل store.php هست یعنی اطلاعات بعد از دریافت از کاربر، به اون صفحه منتقل میشه.
2- خاصیت enctype با مقدار multipart/form-data برای آپلود فایل واجبه و اگه نباشه، نمیتونید فایل آپلود کنید.
3- توی آپلود فایل، باید حتماً روش ارسال فرم، post باشه.
4- تگ input مخفی با نام MAX_FILE_SIZE برای تعیین حداکثر اندازه مجاز برای آپلود فایل برحسب بایت هست که در اینجا، مقدار 1 مگابایت براش درنظر گرفته شده.
5- تگ input از نوع file برای دریافت فایل هست.
6- تگ input از نوع submit برای ارسال اطلاعات هست.
حالا ببینیم توی صفحه store.php باید چکار کنیم؟ فرض کنید میخوایم تصاویر رو توی پوشه images ذخیره کنیم. برای اینکار، باید قبل از اینکه کد رو ببینید، توضیحات زیر رو به دقت مطالعه کنید:
در صفحه مقصد فرمهای دریافت فایل، آرایه ای به نام FILES_$ ایجاد میشه که دوبعدی هست (دو اندیس داره). اندیس اول، نام عنصر دریافت فایل هست که در فرمی که ما گذاشتیم، اسمش photo هست. اندیس دوم، یکی از مقادیر زیر هست:
error : کد خطای احتمالی که ممکنه در هنگام آپلود رخ بده (0 یعنی خطایی وجود نداشته)
name : نام فایل اصلی روی کامپیوتر ارسال کننده فایل (مسیر بخاطر مسائل امنیتی ذخیره نمیشه)
size : اندازه فایل آپلود شده
tmp_name : مسیر و نام موقت فایل آپلود شده روی سرور
type : نوع MIME (http://forum.majidonline.com/showthread.php?t=173542) فایل آپلود شده (مثلاً برای تصاویر JPEG، نوع MIME فایل برابر با image/jpeg هست)
حالا با این اطلاعات، ببینیم کد فایل store.php چطور میشه:


if(isset($_FILES['photo']) && $_FILES['photo']['error'] == 0 && $_FILES['photo']['type'] == 'image/jpeg' && $_FILES['photo']['size'] <= 1048576) {
move_uploaded_file($_FILES['photo']['tmp_name'], 'images/'.$_FILES['photo']['name']);
}

شاید این کد خیلی ساده بنظر بیاد ولی واقعیت همینه که آپلود فایل در PHP اصلاً کار سختی نیست. اما توی همین کد ساده، چند نکته مهمه:
1- اول چک شده ببینیم اصلاً فایلی آپلود شده یا نه
2- بعد چک کردیم ببینیم توی آپلود خطایی رخ داده یا خیر؟
3- بعد از اون بررسی کردیم که آیا فایل آپلود شده از نوع JPEG هست؟
4- نهایتاً چک کردیم ببینیم سایز فایلمون کمتر از 1 مگابایت باشه. دقت کنید که این شرط آخری خیلی مهمه. شاید بگین تگی که توی فرم گذاشتیم پس چی میشه؟ باید بدونید که اون رو خیلی راحت میشه با جاوا اسکریپت دور زد! پس بهتره سمت سرور هم سایز فایل رو چک کنیم.
نهایتاً اگه همه شرایط فوق برقرار بود، با تابع move_uploaded_file فایل آپلود شده رو توی پوشه images با نام اصلیش ذخیره میکنیم. نکته مهم اینه که اگه فایل آپلود شده رو توی صفحه مقصد فرم، با move_uploaded_file منتقل نکنید یا کلاً ازش استفاده نکنید، بعد از اتمام این اسکریپت، فایل موقت از بین میره.
حالا برای نمایش فایلهای توی پوشه images هم میتونید روشهای مختلفی بکار ببرین. مثلاً:


$photos = scandir('images');
foreach($photos as $image) {
$ext = pathinfo('images/'.$image, PATHINFO_EXTENSION);
if(in_array(strtolower($ext), array('jpe', 'jpg', 'jpeg'))) {
echo '<div><img src="images/'.$image.'"/></div>'."\n";
}
}

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

mbf5923
شنبه 17 دی 1390, 20:36 عصر
این هم اسکریپت کدهایی که آقای شهرکی گذاشتن با نمایش عکس بعد از آپلود

hamidhassas
شنبه 17 دی 1390, 22:08 عصر
این هم اسکریپت کدهایی که آقای شهرکی گذاشتن با نمایش عکس بعد از آپلود

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

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

درضمن وقتی که یک متن و یک عکس را می خوایم در داخل دیتابیس زخیره کنید اون وقت کد را باید چطوری بنویسم

idocsidocs
شنبه 17 دی 1390, 22:32 عصر
4- نهایتاً چک کردیم ببینیم سایز فایلمون کمتر از 1 مگابایت باشه. دقت کنید که این شرط آخری خیلی مهمه. شاید بگین تگی که توی فرم گذاشتیم پس چی میشه؟ باید بدونید که اون رو خیلی راحت میشه با جاوا اسکریپت دور زد! پس بهتره سمت سرور هم سایز فایل رو چک کنیم.
سوالی که پیش می یاد اینه که آیا هکر می تونه با تغییر هدرها، اطلاعات آرایه فایل رو تغییر بده؟

مثلا یه فایل با حجم 1 گیگ آپلود کنه ولی کاری کنه که $_FILES['photo']['size'] مقدار 100 کیلوبایت رو نمایش بده؟

اصلا آرایه فایل اطلاعات خودش رو از کجا می گیره و آیا هکر می تونه این اطلاعات رو دستکاری کنه؟

MMSHFE
یک شنبه 18 دی 1390, 09:20 صبح
با سلام، فکر نمیکنم به این راحتی باشه چون این مسئله خیلی وقت پیش برام سؤال شده بود و با مکاتباتی که با جناب راسموس عزیز (میشناسیدش که) انجام دادم، ایشون گفتن اولاً MAX_FILE_SIZE به شرطی مورد بررسی قرار میگیره که از upload_max_filesize توی php.ini بیشتر نباشه و ثانیاً اطلاعات size آرایه FILES_$ بعد از انجام آپلود و ازطریق بررسی محتویات فایلی که توی پوشه موقت ذخیره میشه، استخراج میشه.

MMSHFE
یک شنبه 18 دی 1390, 09:22 صبح
من فایل های شما رو امتحان کردم همش میکه پسوند نادرست است حتی در کد ها پسوند ها رو با حروف بزرگ هم نوشتم ولی باز میگه پسوند نادرست است چرا؟

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

درضمن وقتی که یک متن و یک عکس را می خوایم در داخل دیتابیس زخیره کنید اون وقت کد را باید چطوری بنویسم
میشه کد کاملی که نوشتین رو بگذارین؟ دقت کنید که باید اول صفحه فرم رو فراخوانی کنید و ازطریق اون، با کلیک روی دکمه ارسال اطلاعات، به صفحه store.php منتقل بشین. درمورد ذخیره عکس در دیتابیس پیشنهاد میکنم مسیرش رو ذخیره کنید نه خودش رو چون سرعت و راندمان دیتابیس رو پایین میاره. برای دریافت متن هم کافیه یک فیلد input متنی ("type="text) به فرم اضافه کنید و متن رو ازطریق اون دریافت کنید و بعد توی دیتابیس ذخیره کنید. البته متنها توی آرایه POST_$ قرار میگیرن.
موفق باشید.

idocsidocs
یک شنبه 18 دی 1390, 11:00 صبح
با مکاتباتی که با جناب راسموس عزیز (میشناسیدش که) انجام دادمنه متاسفانه. می شه درمورد ایشون توضیح بدید؟

اطلاعات size آرایه FILES_$ بعد از انجام آپلود و ازطریق بررسی محتویات فایلی که توی پوشه موقت ذخیره میشه، استخراج میشه
اگر اینطور باشه، بقیه محتویات آرایه فایل هم بعد از آپلود فایل بدست می یان و هکر نباید بتونه که مثلا با ارسال هدرهای جعلی، نوع میم فایل رو یه چیز دیگه نشون بده. اما این کار انجام می شه. آیا می شه به این گفته اعتماد کرد؟

mbf5923
یک شنبه 18 دی 1390, 12:06 عصر
آقای راسموس لردورف ابداع کننده زبان php هستن
دوست عزیز هدر فایل و حجم فایل دو مقوله جداگانه هستن.در ضمن برای هدر هم راه هایی هست که حتی اگه هکر اون رو تغییر داده بدو و فیال عکس نبود برنامه متوجه بشه و از آپلود ممانعت کنه.
در نهایت امنیت مطلق معنایی نداره نه در PHP و نه در ASP و نه در هیچ زبان برنامه نویسی تحت وب دنیا و این فقط و فقط بسته به استعداد و هوش برنامه نویس در پیاده سازی الگوریتم هاست

idocsidocs
یک شنبه 18 دی 1390, 12:36 عصر
دوست عزیز هدر فایل و حجم فایل دو مقوله جداگانه هستن.در ضمن برای هدر هم راه هایی هست که حتی اگه هکر اون رو تغییر داده بدو و فیال عکس نبود برنامه متوجه بشه و از آپلود ممانعت کنه.می شه بیشتر توضیح بدید؟

mbf5923
یک شنبه 18 دی 1390, 13:19 عصر
توی این قسمت (http://barnamenevis.org/showthread.php?321163-%D8%A2%DB%8C%D8%A7-%D9%87%DA%A9%D8%B1-%D9%85%DB%8C-%D8%AA%D9%88%D9%86%D9%87-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D9%81%D8%A7%DB%8C%D9%84-%DA%A9%D9%87-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-_FILE-%D9%82%D8%B1%D8%A7%D8%B1-%D9%85%DB%8C-%DA%AF%DB%8C%D8%B1%D9%87-%D8%B1%D9%88-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D8%A8%D8%AF%D9%87%D8%9F) که خودتون هم توش شرکت داشتین یک راه گفته شد و با جستجو در مورد آپلود فایل توی گوگل مطالب زیادی در مورد جلوگیری از آپلود فایل ها با هدر جعلی گفته شده

idocsidocs
یک شنبه 18 دی 1390, 13:31 عصر
توی این قسمت (http://barnamenevis.org/showthread.php?321163-%D8%A2%DB%8C%D8%A7-%D9%87%DA%A9%D8%B1-%D9%85%DB%8C-%D8%AA%D9%88%D9%86%D9%87-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D9%81%D8%A7%DB%8C%D9%84-%DA%A9%D9%87-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-_FILE-%D9%82%D8%B1%D8%A7%D8%B1-%D9%85%DB%8C-%DA%AF%DB%8C%D8%B1%D9%87-%D8%B1%D9%88-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D8%A8%D8%AF%D9%87%D8%9F) که خودتون هم توش شرکت داشتین یک راه گفته شد و با جستجو در مورد آپلود فایل توی گوگل مطالب زیادی در مورد جلوگیری از آپلود فایل ها با هدر جعلی گفته شده

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

mbf5923
یک شنبه 18 دی 1390, 13:39 عصر
چرا ولی به گفته دوستمون آقای شهرکی توجه کنید متوجه خواهید شده

MAX_FILE_SIZE به شرطی مورد بررسی قرار میگیره که از upload_max_filesize توی php.ini بیشتر نباشه و ثانیاً اطلاعات size آرایه FILES_$ بعد از انجام آپلود و ازطریق بررسی محتویات فایلی که توی پوشه موقت ذخیره میشه، استخراج میشه.

MMSHFE
یک شنبه 18 دی 1390, 14:31 عصر
دوست عزیز، اندیس size آرایه FILES_$ ازطریق بررسی محتویات فایلی که توی پوشه موقت ذخیره میشه، استخراج میشه، درصورتی که اندیس type ازطریق پسوند فایل (اندیس name آرایه FILES_$ یعنی نام فایل اصلی) بدست میاد.

MMSHFE
یک شنبه 18 دی 1390, 14:32 عصر
نه متاسفانه. می شه درمورد ایشون توضیح بدید؟
اگر اینطور باشه، بقیه محتویات آرایه فایل هم بعد از آپلود فایل بدست می یان و هکر نباید بتونه که مثلا با ارسال هدرهای جعلی، نوع میم فایل رو یه چیز دیگه نشون بده. اما این کار انجام می شه. آیا می شه به این گفته اعتماد کرد؟
همونطور که دوستمون گفتن، جناب راسموس لردورف سازنده زبان PHP هست. اگه به گفته های ایشون نشه اعتماد کنیم، به حرف کی میشه اعتماد کرد؟ :چشمک:

idocsidocs
یک شنبه 18 دی 1390, 15:20 عصر
همونطور که دوستمون گفتن، جناب راسموس لردورف سازنده زبان PHP هست. اگه به گفته های ایشون نشه اعتماد کنیم، به حرف کی میشه اعتماد کرد؟ :چشمک: مطلب شما درسته، اما همونطور که می گید، هکر نمی تونه مقادیر آرایه فایل رو تغییر بده. از طرفی، پی اچ پی نوع میم فایل رو از همین تابع بدست می یاره، پس چطور این همه بحث ایجاد می شه که نباید به فرمت فایل های اعتماد کرد و باید بصورت دستی فرمت فایلها رو بدست آورد؟

hamidhassas
یک شنبه 18 دی 1390, 15:46 عصر
میشه کد کاملی که نوشتین رو بگذارین؟ دقت کنید که باید اول صفحه فرم رو فراخوانی کنید و ازطریق اون، با کلیک روی دکمه ارسال اطلاعات، به صفحه store.php منتقل بشین. درمورد ذخیره عکس در دیتابیس پیشنهاد میکنم مسیرش رو ذخیره کنید نه خودش رو چون سرعت و راندمان دیتابیس رو پایین میاره. برای دریافت متن هم کافیه یک فیلد input متنی ("type="text) به فرم اضافه کنید و متن رو ازطریق اون دریافت کنید و بعد توی دیتابیس ذخیره کنید. البته متنها توی آرایه POST_$ قرار میگیرن.
موفق باشید.

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

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

بازم ممنون از راهنمایی ها و آموزش و کمک هاتون

MMSHFE
یک شنبه 18 دی 1390, 16:26 عصر
مطلب شما درسته، اما همونطور که می گید، هکر نمی تونه مقادیر آرایه فایل رو تغییر بده. از طرفی، پی اچ پی نوع میم فایل رو از همین تابع بدست می یاره، پس چطور این همه بحث ایجاد می شه که نباید به فرمت فایل های اعتماد کرد و باید بصورت دستی فرمت فایلها رو بدست آورد؟
درسته، به MIME نباید زیاد اعتماد کرد چون خود شما هم میتونید یک فایل اجرایی رو با پسوند exe. تغییر نام بدین و پسوندش رو jpg. کنید و اونوقت MIME اعلام شده، image/jpeg خواهد بود!

idocsidocs
یک شنبه 18 دی 1390, 16:48 عصر
درسته، به MIME نباید زیاد اعتماد کرد چون خود شما هم میتونید یک فایل اجرایی رو با پسوند exe. تغییر نام بدین و پسوندش رو jpg. کنید و اونوقت MIME اعلام شده، image/jpeg خواهد بود! پس با توجه به توضیح شما، آرایه فایل با استفاده از پسوند فایل آپلود شده، نوع میم رو بدست می یاره؟

اینطوری درسته و نباید بهش اعتماد کرد.

مرسی.

ravand
یک شنبه 18 دی 1390, 16:51 عصر
اين اون چيزي هست كه شما ميخواي؟

<form id="form1" name="form1" enctype="multipart/form-data" action="upload.php" method="POST">

Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" />

name: <input type="text" name="text" id="text" size="20">
<input type="submit" name="submit" VALUE="send" />
</form>



<?php
session_start();
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("tesavir");
$target="uploads";
$size=100000;
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");

$text = $_REQUEST['text'];
if($text=="")
die('نامتان را وارد نکردید');

if($_FILES['uploadedfile']['error']==0){

if(in_array($_FILES['uploadedfile']['type'],$format)){
if($_FILES['uploadedfile']['size']<=$size){
$des="$target/".$_FILES['uploadedfile']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];
}

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],$des)){
echo "فایل اپلود شد";
mysql_query("INSERT INTO uploads (`url`,`text`) VALUES ('$des' ,'".$_POST['text']."')")or die(mysql_error());

}



}else
echo "حجم فایل زیاد است";




}else
echo "نوع فایل مورد قبول نمی باشد";



}else
echo "لطفا فایل خودتان را انتخاب کنید";




?>

hamidhassas
یک شنبه 18 دی 1390, 18:05 عصر
اين اون چيزي هست كه شما ميخواي؟

<form id="form1" name="form1" enctype="multipart/form-data" action="upload.php" method="POST">

Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" />

name: <input type="text" name="text" id="text" size="20">
<input type="submit" name="submit" VALUE="send" />
</form>



<?php
session_start();
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("tesavir");
$target="uploads";
$size=100000;
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");

$text = $_REQUEST['text'];
if($text=="")
die('نامتان را وارد نکردید');

if($_FILES['uploadedfile']['error']==0){

if(in_array($_FILES['uploadedfile']['type'],$format)){
if($_FILES['uploadedfile']['size']<=$size){
$des="$target/".$_FILES['uploadedfile']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];
}

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],$des)){
echo "فایل اپلود شد";
mysql_query("INSERT INTO uploads (`url`,`text`) VALUES ('$des' ,'".$_POST['text']."')")or die(mysql_error());

}



}else
echo "حجم فایل زیاد است";




}else
echo "نوع فایل مورد قبول نمی باشد";



}else
echo "لطفا فایل خودتان را انتخاب کنید";




?>

1- نام فیلدی که آدرس عکس در دیتابیس زخیره میشه چیه
2-عکس در چه فلدری زخیره میشه
3-نوع فیلدی که آدرس عکس در آن زخیره میشه چی باید باشه

mbf5923
یک شنبه 18 دی 1390, 18:17 عصر
نام فیلدی که آدرس عکس در دیتابیس زخیره میشه چیه
نام فایل ذخیره نمیشه مسیر فایل ذخیره میشه

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

نوع فیلدی که آدرس عکس در آن زخیره میشه چی باید باشه
با توجه به شواهد از نوع Text

ravand
یک شنبه 18 دی 1390, 19:26 عصر
من يه فيلد براش ساختم كه متني رو ارسال كنه براي ديتابيس و يه فيلد براي آدرس عكس . كه هر دو رو مي توني از نوع char يا varchar استفاده كني خود عكس هم ميره توي يه پوشه به نام uploads.

hamidhassas
دوشنبه 19 دی 1390, 10:00 صبح
نام فایل ذخیره نمیشه مسیر فایل ذخیره میشه

در پوشه ای به نام uploads

با توجه به شواهد از نوع Text

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

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

mbf5923
دوشنبه 19 دی 1390, 12:14 عصر
اسم دیتابیس
tesavir

نام جدول
uploads

نام فیلد زخیره آدرس عکس
url

hamidhassas
دوشنبه 19 دی 1390, 12:34 عصر
در خط فرمان زیر میشه بگید که tmp_name و uploadedfile چی هستتند


if(move_uploaded_file($_FILES['uploadedfile']['tmp_name']'

ravand
دوشنبه 19 دی 1390, 12:41 عصر
در خط فرمان زیر میشه بگید که tmp_name و uploadedfile چی هستتند


if(move_uploaded_file($_FILES['uploadedfile']['tmp_name']'


uploadedfile نام فايل و tmp_name نشان دهنده ی محل ذخیره موقت فایل در سرویس دهنده .

hamidhassas
دوشنبه 19 دی 1390, 13:31 عصر
uploadedfile نام فايل و tmp_name نشان دهنده ی محل ذخیره موقت فایل در سرویس دهنده .

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

Warning: move_uploaded_file(image_news/2.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\xampp\htdocs\test\upload.php on line 28
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\xampp\tmp\phpE555.tmp' to 'image_news/2.jpg' in C:\xampp\htdocs\test\upload.php on line 28

ravand
دوشنبه 19 دی 1390, 13:33 عصر
همون جايي كه فايل ارسال و دريافت رو ذخيره كرده پوشه ي uploads رو هم قرار دادي؟

hamidhassas
دوشنبه 19 دی 1390, 13:49 عصر
همون جايي كه فايل ارسال و دريافت رو ذخيره كرده پوشه ي uploads رو هم قرار دادي؟

هموجایی که فایل کد ها php برای اپلود عکس است پوشه ی uploads قرار داره ولی باز همون پیغام رو میده.

ravand
دوشنبه 19 دی 1390, 14:05 عصر
ببين عكس شما وقتي آپلود ميشه بايد يه همچين آدرسي داشته باشه:uploads/6.gif
من اين كدها رو امتحان كردم و كار ميكنه و مشكلي نداره.
شما يه پوشه درست كن به نام مثلاً upup و سپس داخل همين پوشه پوشه اي بساز با نام uploads توي پوشه ي upup فايل ارسال كه html هست و فايل كدهاي php رو قرار بده.
اينم كدهاي mysql من :

80448

hamidhassas
دوشنبه 19 دی 1390, 16:14 عصر
ممنون ایراد رو پیدا کردم برنامه Appachi از کار افتاده بود با ریستارت سیستم درست شد

MMSHFE
دوشنبه 19 دی 1390, 17:36 عصر
ممنون ایراد رو پیدا کردم برنامه Appachi از کار افتاده بود با ریستارت سیستم درست شد
:عصبانی++: :چشمک:

hamidhassas
دوشنبه 19 دی 1390, 20:08 عصر
یک سوال داشتم
میخوام بعد از اینکه فایل آپلود شد و پیغام آپلود داده شد در زیر پیغام آپلود آدرس فایلی که آپلود شده را بنویسد

می خوام وقتی کاربر فایل خود را روی سرور آپلود کرد در آخر که پیغام آپلود تکمیل شد به او داده شد آدرس فایل عکس که روی سرور آپلود شده برای او به نمایش در بیاد تا کاربر با کپی کردن آدرس عکس بتونه اون عکس رو در جای دلخواه خودش به نمایش بگزاره

hamed-php
دوشنبه 19 دی 1390, 20:47 عصر
یک سوال داشتم
میخوام بعد از اینکه فایل آپلود شد و پیغام آپلود داده شد در زیر پیغام آپلود آدرس فایلی که آپلود شده را بنویسد

می خوام وقتی کاربر فایل خود را روی سرور آپلود کرد در آخر که پیغام آپلود تکمیل شد به او داده شد آدرس فایل عکس که روی سرور آپلود شده برای او به نمایش در بیاد تا کاربر با کپی کردن آدرس عکس بتونه اون عکس رو در جای دلخواه خودش به نمایش بگزاره

try this for all address



<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("tesavir", $con);

$result = mysql_query("SELECT * FROM uploads");

while($row = mysql_fetch_array($result))
{
echo $row['url'] . " " . $row['text'];
echo "<br />";
}

mysql_close($con);
?>



good work

hamidhassas
دوشنبه 19 دی 1390, 21:22 عصر
try this for all address



<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("tesavir", $con);

$result = mysql_query("SELECT * FROM uploads");

while($row = mysql_fetch_array($result))
{
echo $row['url'] . " " . $row['text'];
echo "<br />";
}

mysql_close($con);
?>



good work

میشه کمی توضیح بدین چی شد و یا این کد را کجا باید بنویسم من که سر در گم شدم این کدی که نوشتین درسته آخه تو قسمت SELECT * FORM uploads از کجا باید بفهمه که بعد از دیتابیس tesavir و جدول uploads آدرس فایلی که همین حالا آپلود شده چی هست

من این جوری فکر میکنم که کد زیر را به ادامه به آخر کد های آپلود اضافه باید بکنم تا آدرس فایل آپلود شده رو بعد از پیغام آپلود انجام شد نشون بده


$result = mysql_query("SELECT * FROM uploads");

while($row = mysql_fetch_array($result))
{
echo $row['url'] . " " . $row['text'];
echo "<br />";
}

mysql_close($con);

mbf5923
سه شنبه 20 دی 1390, 09:40 صبح
نه دوست من این کدی که hamed-php عزیز گذاشتن تمام آدرس ها رو نشون میده!!
در آخر همون صفحه که ثبت در دیتابیس رو انجام میده اضافه کنید:

echo $des;

zootos
سه شنبه 20 دی 1390, 12:15 عصر
اين اون چيزي هست كه شما ميخواي؟

<form id="form1" name="form1" enctype="multipart/form-data" action="upload.php" method="POST">

Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" />

name: <input type="text" name="text" id="text" size="20">
<input type="submit" name="submit" VALUE="send" />
</form>

<?php
session_start();
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("tesavir");
$target="uploads";
$size=100000;
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");

$text = $_REQUEST['text'];
if($text=="")
die('نامتان را وارد نکردید');

if($_FILES['uploadedfile']['error']==0){

if(in_array($_FILES['uploadedfile']['type'],$format)){
if($_FILES['uploadedfile']['size']<=$size){
$des="$target/".$_FILES['uploadedfile']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];
}

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],$des)){
echo "فایل اپلود شد";
mysql_query("INSERT INTO uploads (`url`,`text`) VALUES ('$des' ,'".$_POST['text']."')")or die(mysql_error());

}



}else
echo "حجم فایل زیاد است";




}else
echo "نوع فایل مورد قبول نمی باشد";



}else
echo "لطفا فایل خودتان را انتخاب کنید";




?>

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

ravand
سه شنبه 20 دی 1390, 13:24 عصر
يه اعتبارسنجي با جاوا اسكريپت براش بنويسيد كه هر كس عكس رو با نام فارسي انتخاب كرد بهش پيغام بده .

زینب فاطمی
پنج شنبه 26 مرداد 1391, 22:13 عصر
اسم فایل رو فارسی بزنید ببینید چی میشه ، یونی کد نمی شه ،این رو هم حل کنید
فقط می تونید اسم فایل رو عوض کنید به چیزه دیگه
سلام
بعد خط سوم این یک خط کد رو بزنید نام فارسی هم در دیتابیس ذخیره میشه .

mysql_query('set names utf8') or die(mysql_error());

MMSHFE
جمعه 27 مرداد 1391, 07:57 صبح
دوست عزیز، باید دقت کنید که سیستم فایل توی سیستمهای عامل، اسامی رو با کد پیج Arabic یا همون Code Page (صفحه کد) Windows-1256 به نرم افزارها اعلام میکنه ولی شما Unicode لازم دارین. درنتیجه برای ذخیره فایلها با اسم فارسی باید این کار رو انجام بدین:


<?php
$name = str_replace('ی', 'ي', $_FILES['image']['name']);
$u_name = iconv('windows-1256', 'utf-8', $name);
move_uploaded_file($_FILES['image']['tmp_name'], 'upload/' . $name);
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_query("INSERT INTO `images` (`filename`) VALUES('{$u_name}')");
?>

توضیح: ابتدا توی اسم اصلی فایل، ی رو با ي جایگزین میکنیم چون ی یونیکد هست و توی جدول حروف Arabic نیست و توی متغیر name$ میگذاریم و فایل رو هم با همین اسم ذخیره میکنیم. بعد متغیر u_name$ رو تعریف میکنیم و ابتدا name$ رو با کمک تابع iconv از سیستم Arabic به Unicode تبدیل میکنیم و توی u_name$ میگذاریم. حالا میتونیم با خیال راحت u_name$ رو توی دیتابیس ذخیره کنیم و حروف خرچنگ قورباغه نبینیم!
یک سؤالی هم که دوستان داشتن اینه که حالا که اسم یونیکد رو توی دیتابیس داریم، چطور موقع نمایش تصاویر، دوباره اسم اصلی (Arabic) رو بدست بیاریم تا بتونیم به فایل دسترسی پیدا کنیم. راه حل این مسئله هم ساده هست: مرحله تبدیل به یونیکد رو برعکس طی کنید:


<?php
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$images = mysql_query('SELECT * FROM `images` ORDER BY `id`');
if($images && mysql_num_rows($images) > 0) {
while($image = mysql_fetch_assoc($images)) {
$u_name = $image['filename'];
$name = iconv('utf-8', 'windows-1256', $u_name);
echo '<p><img src="upload/' . $name . '"/></p>' . PHP_EOL;
}
}
?>

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

mbf5923
شنبه 28 مرداد 1391, 00:07 صبح
با اینکار اگه بعضی فایل ها با نام لاتین باشن مشکلی پیش نمیاد؟

MMSHFE
شنبه 28 مرداد 1391, 00:34 صبح
خیر مشکلی پیش نمیاد، تابع iconv کارش رو خوب بلده. :چشمک: موفق باشید.

mbf5923
شنبه 28 مرداد 1391, 01:01 صبح
move_uploaded_file(images/???? ???.jpg): failed to open stream: No such file or directory

باز هم با نام فارسی مشکل داره

jaafar1363
سه شنبه 19 دی 1391, 15:00 عصر
اين اون چيزي هست كه شما ميخواي؟

<form id="form1" name="form1" enctype="multipart/form-data" action="upload.php" method="POST">

Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" />

name: <input type="text" name="text" id="text" size="20">
<input type="submit" name="submit" VALUE="send" />
</form>



<?php
session_start();
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("tesavir");
$target="uploads";
$size=100000;
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");

$text = $_REQUEST['text'];
if($text=="")
die('نامتان را وارد نکردید');

if($_FILES['uploadedfile']['error']==0){

if(in_array($_FILES['uploadedfile']['type'],$format)){
if($_FILES['uploadedfile']['size']<=$size){
$des="$target/".$_FILES['uploadedfile']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];
}

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],$des)){
echo "فایل اپلود شد";
mysql_query("INSERT INTO uploads (`url`,`text`) VALUES ('$des' ,'".$_POST['text']."')")or die(mysql_error());

}



}else
echo "حجم فایل زیاد است";




}else
echo "نوع فایل مورد قبول نمی باشد";



}else
echo "لطفا فایل خودتان را انتخاب کنید";




?>
سلام
آقا تو این کد من می خوام هربار که آپلود کردم، تو صفحه upload.php عکس رو هم نشون بده.من اینو نوشتم ولی فقط همون عکس اولی که آپلود شده رو نشون می ده.


$show="SELECT `uploads`.`url` FROM `uploads`";
$q=mysql_query($show);
$row=mysql_fetch_array($q);
$r=$row['url'];
echo $r.'<br>'; // آدرس محل ذخیره عکس
echo "<img src=$r>";

mehdiv
سه شنبه 19 دی 1391, 20:26 عصر
98074

سلام
من از کد هایی که دادید استفاده کردم و به نتیجه رسیدم
5 تاپیک زدم واسه همین کد ها ولی کسی جواب نداد
تا اینجا کد رو دیدم
خوب یه سوال داشتم
من عکس رو آپلود کردم با موفقیت آپلود شد و ... توی دیتا بیس هم آدرس عکس ثبت شد
حالا موقعی که با این کد عکس رو فراخانی میکنم


echo "<td><div style='text-align:center; color:#666666'><a href='".$row['text']."'><img class='picthumb2' height='160' width='150px' src='".$row['url']."'><a></div></div>";

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

jaafar1363
چهارشنبه 20 دی 1391, 15:48 عصر
اینم کد آپلود عکس و ثبت آدرس عکس در دیتابیس و نمایش عکس آپلود شده.:گیج:


<?php
$target="img";
$size=100000;
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");

if($_FILES['file']['error']==0){

if(in_array($_FILES['file']['type'],$format)){
if($_FILES['file']['size']<=$size){
$des="$target/".$_FILES['file']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];
echo $des.'<br>';
echo "<img src='$des' >";
}

if(move_uploaded_file($_FILES['file']['tmp_name'],$des)){
echo "فایل اپلود شد";


}

}else
echo "حجم فایل زیاد است";




}else
echo "نوع فایل مورد قبول نمی باشد";



}else
echo "لطفا فایل خودتان را انتخاب کنید";


//mysql_query("INSERT INTO `ads` (`ads_title`,`ads_ax`,`ads_date`) VALUES('$title','$des','$tsabt')");
?>

wbm000
جمعه 24 مرداد 1393, 18:48 عصر
سلام دوستان حالا چطوری هر عکس جدید که آپلود میشه تو سایت نمایش داده شود ؟؟؟

(منظورم اینه مثلا 10 تا عکس آپلود شده حالا چطوری باید تو سایت results آن را بگیریم و هر عکسی که آپلود میکنیم به این عکس ها اضافه شده و نمایش داده شود !)

del30m
دوشنبه 03 شهریور 1393, 17:19 عصر
سلام و خسته نباشید.

دوستان یک فایل image رو upload میکنم و محل ذخیره اش رو تغییر میدم و بعد اون فایل رو به باینری تبدیل کنم و حالا میخوام دوباره اونو به image برگردونم که قابل دیدن باشه.
طبق کد زیر:



// move uploaded file
move_uploaded_file($_FILES["file"]["tmp_name"], 'upload/' . $_FILES["file"]["name"]);
echo "<br>";
echo "<br>" . "Stored in: " . 'upload/' . $_FILES["file"]["name"];

// convert to binary
$content=file_get_contents('upload/' . $_FILES["file"]["name"]);
$encode=base64_encode($content);
echo "<br>";
echo "<br>";

// convert to image
$decoded = base64_decode($encode);
echo $decoded;


فایل در محل مورد نظر ذخیره میشه و کاملا تبدیل به باینری انجام میشه ولی وقتی دوباره میخوام قابل دیدنش کنم به تصویر زیر روبه رو میشم.

ممنون میشم کمکم کنید که اشکال کجا میتونه باشه.122666

SlowCode
سه شنبه 04 شهریور 1393, 00:50 صبح
برای نمایش عکس باید ابتدا header بفرستی:

header("Content-type: image/gif");
البته image/gif باید متناسب با فرمت تصویرت باشه.

البته اگه میخوای اطلاعات دیگه ای هم تو صفحه چاپ بشه باید به این صورت عمل کنی:


// move uploaded file
move_uploaded_file($_FILES["file"]["tmp_name"], 'upload/' . $_FILES["file"]["name"]);
echo "";
echo "" . "Stored in: " . 'upload/' . $_FILES["file"]["name"];
// convert to binary
$content=file_get_contents('upload/' . $_FILES["file"]["name"]);
$encode=base64_encode($content);
echo ""; echo "";
// convert to image
$decoded = base64_decode($encode);
echo '<img src="data:image/png;base64,' . $decoded . '" />';

13751391
پنج شنبه 20 فروردین 1394, 11:55 صبح
سلام دوستان ببخشید من یه همچین کدی میخوام
کار بر عکس رو انتخاب کنه پیش نمایش تصویر در زیرش نمایش داده بشه و اصلا آپلود نکنه
فقط این

13751391
پنج شنبه 20 فروردین 1394, 11:57 صبح
فقط سایز پیش نمایش رو بشه تنظیم کرد

MMSHFE
پنج شنبه 20 فروردین 1394, 12:04 عصر
تا وقتی آپلود نشده، شما هیچ دسترسی در سمت سرور به عکسی که روی کامپیوتر کلاینت هست، ندارین.

13751391
پنج شنبه 20 فروردین 1394, 12:09 عصر
پس میشه بعد آپلود به صفحه ای دیگه ای نره و در همون صفحه نمایش بده و بعد از یک دقیقه حذف بشه

13751391
پنج شنبه 20 فروردین 1394, 12:35 عصر
یا دیگه اون عکس رو برای کاربرای دیگه نمایش نده و فقط برا خودش نمایش بده

m.esmaeilzadeh
پنج شنبه 20 فروردین 1394, 14:00 عصر
اگر میخوای چیزی شبیه به سایت هایی مثل فیسبوک درست کنی ابتدا باید بعد آپلود لودش کنی و بعد با کمک jQuery و کلاس های image crop که برای php نوشته شده عکس رو ویرایش و تغییرات رو اعمال کنی !!
نمونه بسیار در اینترنت هست , گوگل سرچ کنید ....

13751391
پنج شنبه 20 فروردین 1394, 14:06 عصر
برین این فرم ثبت نام کنید
http://et-urmia.ir/index.php/component/rsform/form/3?Itemid=144
در مرحله آخر میخوام یه کد اضافه بشه فقط همین

13751391
پنج شنبه 20 فروردین 1394, 15:24 عصر
آقایون داداشا هیچیکی جوابمونو نمدونه بدجور گیر کردیم ها

13751391
جمعه 21 فروردین 1394, 16:41 عصر
کسی نیست بتونه مشکلمو حل کنه ؟؟