PDA

View Full Version : مشکل در خواندن فایل در php



mhabat
شنبه 08 تیر 1392, 18:50 عصر
با سلام بنده یه برنامه می خوام بنویسم که وقتی کاربر آدرس فایل متنی شو در جعبه متنی وارد می کنه
در همون جا متنش فایل رو می تونه بخونه . اما متسفانه نمی دونم کدام قسمتش ارور میده!
بعد اینکه چطور میشه سایز button رو تغییر بدی ؟ یا اینکه متناسب با text box اندازش تغییر کنه؟
سورس:
<html>
<head>
<title>SIMPLE PHP</title>
</head>
<body>
<FORM ACTION="file.php" METHOD=post>
<LABEL FOR="tar" ACCESSKEY="t"><U>T</U>arget name:</LABEL>
<INPUT TYPE=text NAME="target" id="tar"/);
<BR/><BR/>
<INPUT TYPE="submit" NAME="ok" VALUE="OK"/);
<?php
$mohammad=fopen($_POST["target"],"r");
echo("source of target is:$mohammad");
?>
</FORM>
</body>
</html>

Javidhb
شنبه 08 تیر 1392, 19:09 عصر
شما باید فایل کاربر و آپلود کنید رو سرورتون بعد با fopen اون رو بخونید.



<form action="" enctype="multipart/form-data" method="post">

<input type="file" name="datafile">

<input type="submit" value="Send">
</form>


و بعد با php:



$target_path = "uploads/"; //harjayee ke khodetom tarjih midid

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path))
{
echo "The file ". basename( $_FILES['uploadedfile']['name']).
" has been uploaded";
}
else
{
echo "There was an error uploading the file, please try again!";
}


حالا میتونید با fopen فایلی رو که آپلود کردید بخونید.

*بهتره کدهای PHP رو قبل از فرم بنویسید.


برای تغییر سایز دکمه... راحتترین کار اینه که INPUT و Button رو توی یک div قرار بدید و با ،css برای دکمه مقدار width = 100% رو قرار بدید.

mhabat
شنبه 08 تیر 1392, 19:42 عصر
ببخشید میشه یه مثال بزنید که چطور میشه بندازم رو div?

mhabat
شنبه 08 تیر 1392, 20:00 عصر
آقا شرمنده اصلا متجه روند برنامه نشدم.
اگه میشه مورد های زیر رو توضیح بدین ممنون میشم:
1-enctype="multipart/form-data

2-نفهمیدم چطور بدون هیچ کاری فایل درآدرسی کهدر متغیرtarget_patch هست ذخیره میشه.

3- $_FILES['uploadedfile']['tmp_name'], $target_path

4-basename( $_FILES['uploadedfile']['name'])
ممنون

Javidhb
شنبه 08 تیر 1392, 20:15 عصر
این صفحه (http://www.abdollahi.us/index.php/education/php-language-tutorial/129-php-tutorial-file-upload.html) کامل توضیح داده.
بازم اگه سوالی بود.. اگه بدونم خوشحال میشم، جواب بدم.

Javidhb
شنبه 08 تیر 1392, 20:28 عصر
در مورد تغییر سایز دکمه:



<!DOCTYPE html>
<html>
<head>
<style>
#uploadForm {width : 300px;}
#fileInput {width : 100%;}
</style>
</head>
<body>

<div id="uploadForm">
<form action="" enctype="multipart/form-data" method="post">

<input id="fileInput" type="file" name="datafile">

<input type="submit" value="Send">
</form>
</div>

</body>
</html>
البته میتونید عرض دکمه رو بجای 100%، برحست پیکسل هم تغییر بدید مثلا width : 50px

mhabat
یک شنبه 09 تیر 1392, 11:14 صبح
سلام ممنون بایت پاسخ.
آقا کد مربوط به آپلود رو درست کردم اما کار نمی کنه! خطا نداره اما کار نمی کنه!
کد upload.html:

<html>
<head>
<titel>Upload File </titel>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data" >
<input type="file" name="upload"/>
<input type="submit" name="uploading" value="Upload"/>
</form>
کد فایلupload.php:

<html>
<body>
<?php
if(isset($_POST['uploading'])) {
if($_FILES['upload'][error']>0) {
echo"Error".$_FILES['upload']['error']."Occured!<br/>"; }
else {
if(file_exists('image/'.$FILES['upload']['name']))
echo "This File Aleady Exsits";
else {
move_uploaded_file($_FILES['upload']['tmp_name'],"/image/".$_FILES['upload']
['name']);
echo "The File is Upload/".$_FILES['upload']['name']."<br/>";
}
}
}
?>
</body>
</html>

Javidhb
یک شنبه 09 تیر 1392, 12:12 عصر
- توی فایل upload.php دیگه احتیاجی به تگهای html ندارید.
- توی خط 5ام کد بالا(خودت نوشتی) باید ['error'] باشه.. یکی از کوتیشنهاشو ننوشتی.
- بجای 'upload' باید بنویسید 'uploading' (اسمی که برای فیلد آپلود توی فرم نوشتید).
- پوشه image رو هم یادتون باشه ایجاد کرده باشید.

فایل upload.php


<?php
if(isset($_POST['uploading'])) {
if($_FILES['uploading']['error']>0) {
echo"Error".$_FILES['uploading']['error']."Occured!";
}
else {
if(file_exists('image/'.$_FILES['uploading']['name'])){
echo "This File Aleady Exsits";
}
else {
move_uploaded_file($_FILES['uploading']['tmp_name'], "/image/".$_FILES['upload']['name']);
echo "The File is Upload/".$_FILES['uploading']['name']."";
}
}
}else{
echo 'no file has been sent to upload.php';
}
?>

mhabat
یک شنبه 09 تیر 1392, 13:03 عصر
بنده دقیقا همین سورس شما رو قرار دادم اما وقتی یه فایل متنی یا عکس می خوام آپلود کنم این ارور رو میده:

SCREAM: Error suppression ignored for( ! ) Notice: Undefined index: uploading in C:\wamp\www\upload.php on line 3Call Stack#TimeMemoryFunctionLocation10.0003143088{main }( )..\upload.php:0
( ! ) SCREAM: Error suppression ignored for( ! ) Notice: Undefined variable: FILES in C:\wamp\www\upload.php on line 7Call Stack#TimeMemoryFunctionLocation10.0003143088{main }( )..\upload.php:0This File Aleady Exsits
ارور this file already exsits هم میده اما چنین فایلی تو پوشه image نیست!
توتابع uploade_file نباید در پارامتر دوم به جای upload کلمه uploading رو قرار بدم؟

Javidhb
یک شنبه 09 تیر 1392, 13:12 عصر
ببخشید... من اشتباه کردم uploading رو شما واسه دکمه submit نوشته بودید (پاکش کنید)
name برای input فایل همون upload هست.
توی خط هفتم اشتباه تایپی بود.. باید FILE_ باشه.



<?php
if(isset($_POST['upload'])) {
if($_FILES['upload']['error']>0) {
echo"Error".$_FILES['upload']['error']."Occured!";
}
else {
if(file_exists('image/'.$_FILES['upload']['name'])){
echo "This File Aleady Exsits";
}
else {
move_uploaded_file($_FILES['upload']['tmp_name'], "/image/".$_FILES['upload']['name']);
echo "The File is Upload/".$_FILES['upload']['name']."";
}
}
}else{
echo 'no file has been sent to upload.php';
}
?>

mhabat
یک شنبه 09 تیر 1392, 13:27 عصر
ممنون.
الان دیگه ارور نداره اما هر فایلی بخوای آپلود کنی میزنه این فایل آپلود نشد!
بعد اینکه در لینک آموزشی که قرار دادین برای آپلود فایل در تابع isset باتون رو چک می کرد اما اینجا ما همون فایل رو چک کردیم؟

Javidhb
یک شنبه 09 تیر 1392, 13:39 عصر
شما بیاید به جای اون کار ... چک کنید که اگه Files_ وجود داشته باشه بره واسه آپلود.

توی خط دوم بجای


if(isset($_POST['upload']))

بنویسید:


if(isset($_FILES['upload']))

mhabat
یک شنبه 09 تیر 1392, 13:55 عصر
کاری که گفتین رو انجام دادم ببینید:

<?php
if(isset($_FILES['upload'])) {
if($_FILES['upload']['error']>0)
{echo"Error".$_FILES['upload']['error']."Occured!";}
else
{if(file_exists('image/'.$_FILES['upload']['name']))
{echo "This File Aleady Exsits";}
else {move_uploaded_file($_FILES['upload']['tmp_name'], "/image/".$_FILES
['upload']['name']);
echo "The File is Upload/".$_FILES['upload']['name']."";}}}
else{echo 'no file has been sent to upload.php';}
?>
کار نمی کنه!
رو هاست شما کار می کنه؟

Javidhb
یک شنبه 09 تیر 1392, 14:15 عصر
این کد رو تست کردم... کار میکنه:



<?php
if(isset($_FILES['upload'])) {
if($_FILES['upload']['error']>0) {
echo"Error".$_FILES['upload']['error']."Occured!";
}
else {
if(file_exists('image/'.$_FILES['upload']['name'])){
echo "This File Aleady Exsits";
}
else {
/*** مشکل در مکان آپلود عکس بود.. که اگه اینجوری کد رو تغییر بدید کار میکنه ***/
move_uploaded_file($_FILES['upload']['tmp_name'], dirname(__FILE__). '//image//' .$_FILES['upload']['name']);
echo "The File is Upload/".$_FILES['upload']['name']."";
}
}
}else{
echo 'no file has been sent to upload.php';
}
?>

mhabat
یک شنبه 09 تیر 1392, 14:29 عصر
آقا شرمنده خیلی اذیت شدین . ممنون درست درست کار می کنه.
فقط اگه میشه یه توضیحی درمورد ساختار این بدین:
dirname(__FILE__). '//image//'
اگه مثل قبلی لینک هم بدین بازم خوبه.
ممنون

Javidhb
یک شنبه 09 تیر 1392, 14:50 عصر
()dirname (http://php.net/manual/en/function.dirname.php) برای گرفتن آدرس بکار میره و وقتی __FILE__ رو بهش بدید، آدرس فایل Php رو برمیگردونه.(فایلی که توش دستور (__dirname(__FILE رو نوشتید).

در مورد // من همینجوری سریع تست کردم... باید با یدونه / هم کار کنه.

mhabat
دوشنبه 10 تیر 1392, 02:13 صبح
سلام. از اونجایی که عنوان تایپک به فایل هم مربوط میشه:
بنده در کد های php وقتی از تابع filesize استفاده می کنم ارور میده دلیل چی هست؟
کد:

<?php
$file = fopen ("sss.txt" , "r");
$str = fread($file , filesize($file));
echo $str;
?>
ما اگه بخوایم یه فایل عکس دار رو نمایش بدیم چکار باید بکنیم؟ مثلا می خوام به جای sss.txt فایلsss.jpg رو قرار بدم.

با تشکر.

Javidhb
دوشنبه 10 تیر 1392, 16:34 عصر
سلام،
لطفا پیغام خطا رو بزارید.


تابع fopen یا fread و ... برای خواندن فایلهای متنی هستن.
ولی اگه منظورتون اینه که قصد نمایش عکس رو دارین که باید چیزی شبیه زیر رو اکو کنید:



echo '<img src="sss.jpg">';

mhabat
دوشنبه 10 تیر 1392, 16:57 عصر
این ارور رو میده:

Warning: filesize() expects parameter 1 to be a valid path, resource given in C:\wamp\www\file.php on line 3
البته اگه تو تابع filesize به جای این که اسم متغیر رو بزارم اسم خود فایل رو که sss.txt بزارم برنامه کار می کنه .اما من نمی خوام اسم فایل رو بزارم می خوام متغیر بزارم داخلش(داخلfilesize).
یه چیزی وقتی از تابع fread استفاده می کنم مثلا می خوام چند خط متن رو برام نمایش بده دستش درد نکنه نمایش میده اما همه رو تو یک خط نمایش میده
مثلا:

<?php
$file = fopen ("sss.txt" , "r");
$str = fread($file ,filesize("sss.txt"));
echo $str;
fclose($file);
?>

Javidhb
دوشنبه 10 تیر 1392, 18:22 عصر
ببینید خودش تو اررو داره میگه که ()filesize باید پارامتر اولش "مسیر معتبر فایل" باشه...
برای اینکه هم شما راضی باشید هم تابع ()filesize، میتونید: :چشمک:



$fileName = "sss.txt";
$file = fopen ($fileName , "r");
$str = fread($file ,filesize($fileName));



در مورد نمایش خط به خط (http://www.w3schools.com/php/php_file.asp):


<?php
$fileName = "sss.txt";
$file = fopen ($fileName , "r");
while(!feof($file))
{
echo fgets($file). "<br>";
}
fclose($file);
?>