Intereting Posts
jQuery JSON Templating из MySQL Joomla 1.0, ссылка администратора перенаправляется на «installation / index.php», как предотвратить это перенаправление? Ищете эквивалент array_map для работы с ключами в ассоциативных массивах Регулярное выражение: галочка без буквенной или пунктуации Является ли Symfony лучшим выбором, чем Zend для магазина веб-разработки (10+), потому что это полноценная структура стека? ajax и php отправляют пользователей в массив Я запутался в PHP Post / Redirect / Get Предупреждение: getimagesize () : Имя файла не может быть пустым предупреждающим сообщением? вопрос о печати после печати. это даже возможно? В PHP, Как вызвать функцию в строке? бесконечная загрузка прокрутки / изображений jQuery PHP: что является альтернативой empty (), где строка «0» не считается пустой? использовать завиток для загрузки непрямого файла изображения PHPMailer работает на localhost, но не работает на сервере Невозможно заполнить выпадающий список цепочек с помощью Ajax и Javascript

PHP: загрузите любой файл с ftp-сервера в harddrive?

Мне действительно нужна ваша помощь. Я успешно настраиваю соединение с моим ftp-сервером. Однако я не могу понять, как загрузить динамический файл с моего сервера. Думаю, это помогло бы многим другим людям, так как я не мог найти учебник или объяснения в любом месте в Интернете.

Я просто перечисляю все свои файлы на своем ftp. Если я нажму на один, я вызову download.php, который снова подключится к серверу и должен загрузить файл на моем жестком диске. Я смог автоматически запросить окно загрузки, и файл загрузится на мой hdd. однако только поврежденный файл, в котором нет заголовков.

/* path to files on ftp server … eg /folder/folder/name_of_file.jpg */ $p_arr = explode("/", $path); /* the file name … eg name_of_file.jpg */ $file = end($p_arr); //$finfo = finfo_open(FILEINFO_MIME_TYPE); //returns a fatal error - function not found //$mimetype = finfo_file($finfo, $file); //finfo_close($finfo); //filetype($file) /* creating a temporyry file to save to */ $tempFile = tempnam("/tmp", "FOO"); if(ftp_get($conn_id, $tempFile, $file, FTP_BINARY)){ /*header Content-type: must be dynamic*/ //header('Content-type:' . $mimetype); /*header to auto_prompt download window*/ header('Content-Disposition: attachment; filename="'. $file .'"'); readfile($tempFile); } else { echo "There was a problem <br>"; echo $file . "<br>"; //eg image.jpg } /* deleting the file after the process */ //unlink($tempFile); 

1.) Я не могу понять, почему ftp_get возвращает false. Соединение устанавливается и файл существует в правильном каталоге. 2.) Я не знаю, как я могу узнать тип файла на сервере и предоставить ему загруженный файл, чтобы он не был поврежден.

пожалуйста, помогите мне, я действительно застрял. заранее спасибо

Сначала попробуйте сохранить его локально, а затем верните его в браузер.

Используйте этот код, чтобы сохранить файл локально.

 <?php // define some variables $folder_path = "YOUR FOLDER PATH"; $local_file = "LOCAL FILE PATH"; $server_file = "SERVER FILE PATH"; //-- Connection Settings $ftp_server = "IP ADDRESS"; // Address of FTP server. $ftp_user_name = "USERNAME"; // Username $ftp_user_pass = "PASSWORD"; // Password #$destination_file = "FILEPATH"; // set up basic connection $conn_id = ftp_connect($ftp_server); // login with username and password $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // try to download $server_file and save to $local_file if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { echo "Successfully written to $local_file\n"; } else { echo "There was a problem\n"; } // close the connection ftp_close($conn_id); ?> 

Я также нашел это, возможно, это может помочь вам

Мой FTP-сервер всегда отвечал «bool (false)» вместо того, чтобы предоставлять мне список каталогов. Мне пришлось добавить ftp_pasv ($ conn_id, true); сразу после $ login_result = ftp_login (…); линия. После этого он просто отлично работал.

TempNam ()

Когда я использовал tempnam() он изменил расширение файла на .tmp . Это может вызвать проблемы, поэтому я не рекомендую это делать так. По крайней мере, вы должны изменить расширение на то, что было в исходном имени файла.

Вы можете достичь этого с помощью pathinfo() в сочетании с regexp и rename() после того, как вы установили файл ftp'ed.

MimeType

Что касается типа mimetype: вам нужна только эта информация, если вы хотите, чтобы браузер отображал файл, который вы отправляете пользователю. Для загрузки браузер должен знать только, что это двоичный файл, и браузер или пользователь могут догадаться о расширении.

Если вы все еще хотите проверить тип mimetype, вам придется подождать, пока файл не будет находиться на вашем сервере, поэтому код проверки mime будет if(ftp_get()) внутри блока if(ftp_get()) .

FTP

Вы не указали свой код подключения (так я и предполагаю), но вам понадобится полный путь для файла, который вы извлекаете из FTP. Если шаг ftp_get() не работает, возможно, вы запрашиваете недопустимый файл.

В противном случае вам ftp_chdir() после подключения и входа в систему, чтобы вы ftp_chdir() в правильной удаленной папке.

код

Этот код работал для меня:

  <? PHP
 $ ftp = ftp_connect ('server');
 ftp_login ($ ftp, 'username', 'password');
 $ file = '/media.banzaimonkey.net/images/forums/boasas_banner_07.gif';

 $ tempFile = tempnam ("/ tmp", "FOO");

 if (ftp_get ($ ftp, $ tempFile, $ file, FTP_BINARY)) {
     эхо «успех!»;
 } else {
     echo 'ffffail';
 }
 ?> 

Если этот код не работает для вас, у вас могут возникнуть проблемы с разрешениями, настройкой или некоторыми другими проблемами, относящимися к конкретной среде.

Это работает для меня:

 $fname = "file.xxx"; $conn = ftp_connect(FTP_URL); if(ftp_login($conn, FTP_USER, FTP_PWD)) { if(ftp_chdir($conn, FTP_DIR)) { $th = fopen('php://temp', 'r+'); if(ftp_fget($conn, $th, $fname, FTP_ASCII, 0)) { rewind($th); $data = stream_get_contents($th); } } } header("Content-Disposition: attachment; filename=$fname"); echo $data; 

Таким образом, вам не нужно сначала сохранять файл локально