ここから本文です

ftp_putを使いサーバーにファイルをアップロードする場合、zip形式ファイルは使え...

ois********さん

2018/10/823:07:09

ftp_putを使いサーバーにファイルをアップロードする場合、zip形式ファイルは使えないのでしょうか?

アップロード後のzip形式ファイルを開くと「破損ファイル」と出ます。
jpg形式ファイルの場合は、問題なくアップロードできたのですが。
アップロード前のzipファイル(file.zip)は、解凍すると中に入れた.jpgファイルを見ることができます。

①zipファイル作成プログラム
②ftpプログラム
は、下記のように記述しています。

①zipファイル作成プログラム
<?php
$zip_file = 'file.zip';
$zip = new ZipArchive();
$opened = $zip->open($zip_file, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
foreach(glob('flashair/*') as $file){
if(is_file($file)){
echo htmlspecialchars($file);
echo '<br>';
$ret = $zip->addFile($file);
}
}
$ret = $zip->close();
?>

②ftpプログラム
<?php
// $ftp_server:FTPサーバ名(ホスト名、IPアドレスなど)
// $ftp_port:ポート番号(通常は21)
// $ftp_user_name:FTPログイン名
// $ftp_user_pass:FTPログインパスワード
// $ftp_send_file:送信対象ファイルパス
// $ftp_remote_file:送信先のパス

// ***送信先******* の場合***
$ftp_server = '*******';
$ftp_port = 21;
$ftp_user_name = '*****';
$ftp_user_pass = '*****';
$ftp_send_file = 'file.zip';
$ftp_remote_file = '/www/ftp_accept/file.zip';

// FTPサーバへ接続する
$conn_id = ftp_connect($ftp_server, $ftp_port);
if($conn_id == false){
echo "FTPサーバへの接続失敗"."\n";
exit();
}

// ユーザー名とパスワードでログインする
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if($login_result == false){
echo "FTPサーバへのログイン失敗"."\n";
// 接続を閉じる
ftp_close($conn_id);
exit();
}

//パッシブモードに設定
ftp_pasv($conn_id, true);

// ファイルをアップロードする
if (ftp_put($conn_id, $ftp_remote_file, $ftp_send_file, FTP_ASCII)) {
echo "UPLOAD 成功"."\n";
} else {
echo "UPLOAD 失敗"."\n";
}

// 接続を閉じる
ftp_close($conn_id);

?>

FTP,n&amp;quot,&#39;file.zip&#39;,FTPサーバ,new ZipArchive,ASCIIモード,binary

閲覧数:
42
回答数:
2
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

shi********さん

2018/10/907:54:49

すでに回答がありますが、FTPコマンドでのascii/binary切替以前に、まずは下記を試すべきかと。

× if (ftp_put($conn_id, $ftp_remote_file, $ftp_send_file, FTP_ASCII)) {
〇 if (ftp_put($conn_id, $ftp_remote_file, $ftp_send_file, FTP_BINARY)) {

RTFM.
http://php.net/manual/ja/function.ftp-put.php

  • 質問者

    ois********さん

    2018/10/920:44:54

    お世話になります。的確でわかりやすい回答ありがとうござました。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2018/10/9 21:01:48

最初に頂いた回答でも、転送モードが違っていることに気がついたのですが、「bin (もしくは binary )というコマンド送信にて変わります、それからPUTしてみてください」と、「別サイトですが同様QAがありました」を見ても経験浅い私の頭がついていけず、こちらをベストアンサーとさせていただきました。すいません。
スマホのPHP向けサーバーを使い、これでflashairの画像をアップします。

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

ste********さん

編集あり2018/10/823:21:42

FTPの通信モードにはASCIIモードとバイナリーモードがあり、デフォルトはASCIIモードです。
ASCIIモードではOS間の改行コードの差異を吸収する処理が入り、データを加工してしまいますので、画像、動画、ZIPファイルなどはBINARYモードに切り替えないとだめです。
bin (もしくは binary )というコマンド送信にて変わります、それからPUTしてみてください

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる