آپلود فایل توسط ftp

sibetorsh

Member
برای آپلود کردن توسط اف تی پی من دستورات زیر رو نوشتم!
HTML:
<form enctype="multipart/form-data" action="uploader.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
Choose a file to upload: <input name="uploadedfile" type="file" /> <br />
<input type="submit" value="Upload File" />
</form>
و کد php
PHP:
<?php


$host = 'host';
$usr = 'user';
$pwd = 'pass';

// file for upload:
$local_file = $_FILES['uploadedfile']['name'];
//directory for uoload
$ftp_path="uploads/";
$ftp_path=$ftp_path.basename($_FILES['uploadedfile']['tmp_name']);

// connect to FTP server 
$conn_id = ftp_connect($host, 21) or die ("Cannot connect to host");

// login FTP
ftp_login($conn_id, $usr, $pwd) or die("Cannot login");

//Upload file
if (ftp_put($conn_id, $ftp_path, $local_file, FTP_ASCII)) {
 echo "upload shod";
} else {
 echo "upload nashod";
}
 
// close FTP 
ftp_close($conn_id);

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

Warning: ftp_put(mali.xlsx) [function.ftp-put]: failed to open stream: No such file or directory in /home/sib/public_html/up/uploader.php on line 19
There was a problem while uploading mali.xlsx

مثلا در اینجا من خواستم یه فایل به نام mali.xlsx رو آپلود کنم. اما خطای بالا رو می ده!
واقعا نمی دونم باید چی کار کنم!
لطفا راهنماییم کنید
 

Domanjiri

Well-Known Member
سلام

پارامتر (بعد از ویرایش:wink: ) دوم تابع ftp_put رو به این شکل قرار بدین، شاید مشکل حل بشه:
PHP:
$second_par = $ftp_path . basename($_FILES['uploadedfile']['name']);

موفق باشین
 
آخرین ویرایش:

Cyletech

Member
آرگومان دوم تابع ftp_put
ببخشید ها دوست خوبم. خودت باید بدونی من همیشه به درستی پاسخ هایی که به سوالات دوستان میدی اطمینان دارم ولی گاهی خود منم اشتباه لفظی می کنم. ببخشید . خواهش می کنم دلخور نشو.
توابع از پیش تعریف شده php مثل همین ftp_put() ، در داخل پرانتز ، پارامتر می گن نه آرگومان :rose: بازم ببخشید

این چه طرزه کد نویسیه آخه؟
PHP:
$ftp_path="uploads/";
$ftp_path=$ftp_path.basename($_FILES['uploadedfile']['tmp_name']);
خلاصه کن و مثل زیر بنویس که فضایی که مصرف میشه هم کاهش پیدا کنه. بعلاوه هرچیزی که نیاز نیست رو نباید داخل متغیر قرار داد.
PHP:
$ftp_path='uploads/'.basename($_FILES['uploadedfile']['tmp_name']);
علاوه بر این ، مشکل رو Domanjiri عزیز مشخص کردن. دلیلش اشتباه کد نویسی شما بود. وقتی شما مثل کد پی اچ پی بالا نه بالاییش! می نویسی ، پی اچ پی اول میاد اولین متغیر رو تفسیر می کنه و بهش اگر مقداری داره میده. بعد میاد خط بعدی و یه متغیر دیگه میسازه به همون نام (پس جایگزین قبلی میشه) و اینم مقداری داره که اول مقدارش رو برابر مقدار نهاییش قرار میده بعد به مورد بعدی مشخص شده توسط خودتون با نقطه وصل می کنه. پس در حقیقت اون چیزی که شما نوشتی همین زیره:
PHP:
$ftp_path=basename($_FILES['uploadedfile']['tmp_name']).basename($_FILES['uploadedfile']['tmp_name']);
 

Domanjiri

Well-Known Member
سلام
ببخشید ها دوست خوبم. خودت باید بدونی من همیشه به درستی پاسخ هایی که به سوالات دوستان میدی اطمینان دارم ولی گاهی خود منم اشتباه لفظی می کنم. ببخشید . خواهش می کنم دلخور نشو.
توابع از پیش تعریف شده php مثل همین ftp_put() ، در داخل پرانتز ، پارامتر می گن نه آرگومان بازم ببخشید
بسیار ممنونم:rose: ابدن از اینکه اشتباهاتم رو بهم تذکر بدین ناراحت نمیشم (یعنی چی آخه؟ واسه چی باید ناراحت بشم؟!!:green: )، حالا هر جور اشتباهی که می خواد باشه.. بازم مرسی.

در این مورد هم کاملن حق با شماست. در واقع اینطور هست که به این متغییر های توی پرانتز، موقع تعریف تابع "آرگومان" و موقع فراخوانی اون "پارامتر" میگن (!) و اینجا هم باید بهش گفت پارامتر که من اشتباهی گفتم آرگومان!!:green: (الان این توضیحی که دادم درست بود دیگه؟;">)

پستم رو ویرایش کردم.:paint:

شاد و پیروز باشین:rose:
 
آخرین ویرایش:

sibetorsh

Member
ببخشید ها دوست خوبم. خودت باید بدونی من همیشه به درستی پاسخ هایی که به سوالات دوستان میدی اطمینان دارم ولی گاهی خود منم اشتباه لفظی می کنم. ببخشید . خواهش می کنم دلخور نشو.
توابع از پیش تعریف شده php مثل همین ftp_put() ، در داخل پرانتز ، پارامتر می گن نه آرگومان :rose: بازم ببخشید

این چه طرزه کد نویسیه آخه؟
PHP:
$ftp_path="uploads/";
$ftp_path=$ftp_path.basename($_FILES['uploadedfile']['tmp_name']);
خلاصه کن و مثل زیر بنویس که فضایی که مصرف میشه هم کاهش پیدا کنه. بعلاوه هرچیزی که نیاز نیست رو نباید داخل متغیر قرار داد.
PHP:
$ftp_path='uploads/'.basename($_FILES['uploadedfile']['tmp_name']);
علاوه بر این ، مشکل رو Domanjiri عزیز مشخص کردن. دلیلش اشتباه کد نویسی شما بود. وقتی شما مثل کد پی اچ پی بالا نه بالاییش! می نویسی ، پی اچ پی اول میاد اولین متغیر رو تفسیر می کنه و بهش اگر مقداری داره میده. بعد میاد خط بعدی و یه متغیر دیگه میسازه به همون نام (پس جایگزین قبلی میشه) و اینم مقداری داره که اول مقدارش رو برابر مقدار نهاییش قرار میده بعد به مورد بعدی مشخص شده توسط خودتون با نقطه وصل می کنه. پس در حقیقت اون چیزی که شما نوشتی همین زیره:
PHP:
$ftp_path=basename($_FILES['uploadedfile']['tmp_name']).basename($_FILES['uploadedfile']['tmp_name']);

ممنونم از بابت تذکر کدنویستون! چشم از این به بعد رعایت می کنم!
من اون چیزی که شما گفتید رو رعایت کردم. اما باز هم خطا داد!
این کد نهایی

PHP:
 <?php


$host = 'host';
$usr = 'user';
$pwd = 'pass';

// file for upload:
$local_file = $_FILES['uploadedfile']['name'];
//directory for uoload
$ftp_path='uploads/'.basename($_FILES['uploadedfile']['tmp_name']);  

// connect to FTP server 
$conn_id = ftp_connect($host, 21) or die ("Cannot connect to host");

// login FTP
ftp_login($conn_id, $usr, $pwd) or die("Cannot login");

//Upload file
if (ftp_put($conn_id, $ftp_path, $local_file, FTP_ASCII)) {
 echo "upload shod";
} else {
 echo "upload nashod";
}
 
// close FTP 
ftp_close($conn_id);

?>
 

جدیدترین ارسال ها

بالا