CSVファイルをFTPアップロードする PHP版

   2015/08/04

前回に引き続き、今度はPHPでのCSVのFTPアップロードの

ご紹介です。

実は本ブログでPHPのコードをご紹介するのは初めてです。


C#では、クライアントアプリケーションで用いることが多いのに対して、

PHPはWEBアプリとして用いることが多いです。

さらに、PHPの用途としてはバッチファイル化して、特定の時間に

動作させるような動きも考えられます。


前置きはこれくらいにして、早速コードをご紹介しましょう。


まずは、CSVファイルの作成です。

流れとしてはC#のときと同様で、まずは一時ファイルを作成して

テキストデータを書き込みます。


ここでは、前回と同様にYahooショッピングの在庫データベースファイルを作成します。

//MYSQLへ接続
if(!$link = mysqli_connect("ホストURL","ホストユーザ","パスワード","DBのインスタンス"))
{
	//MySQLのエラーを例外として投げる
	throw new Exception("エラー番号 : ". mysqli_connect_errno(). "\nメッセージ : ". mysqli_connect_error());
}

//キャラクタセット
if(!mysqli_query($link,"set names utf8"))
{
	//MySQLのエラーを例外として投げる
	throw new Exception("エラー番号 : ". mysqli_errno($link). "\nメッセージ : ". mysqli_error($link));
}

//在庫反映に必要な情報を取得する。
$sql  = "DBからデータを取得";

$result = mysqli_query($link, $sql) or die("Failed to send query.<br />SQL:".$sql);
//結果セットの行数を取得する
$rows = mysqli_num_rows($result);

$Headers = "\"code\",\"sub_code\",\"quantity\",\"mode\"";

$CSV  = $Headers;

$ret = "0";

if($rows)
{
	while($row = mysqli_fetch_array($result)) {
		//行数分繰り返す
		$CSV .= "\n";
		$CSV .= "\"".$row["ItemNo1"]."\",";//商品コード
		$CSV .= "\"".$row["ItemNo2"]."\",";//サブコード
		$CSV .= "\"".$row["StockQuantity"]."\","; //在庫数
		$CSV .= "\"\"";//モード(空)
	}
}
 //一時ファイル名
 $tmpFile = "tmpFiles/YahooOutput/".date("YmdHis")."quantity.csv";
 
 //アップロードするファイル名
 $remotefile = "img".date('YmdHi', time() +(60 * 20))."00".".csv";

 //文字化け対策
 $CSV = mb_convert_encoding($CSV, "SJIS", "AUTO");
 $tmpFile = mb_convert_encoding($tmpFile, "SJIS", "AUTO");
 //書き込み
 $fp = fopen($tmpFile, 'w');
 fwrite($fp, $CSV);
 fclose($fp);

 //アップロード処理
 FtpUpload($ftpdir, $remotefile.".csv", $tmpFile);

データベースはMySQLです。

まずはMySQLに接続し出力対象の情報を取得します。

取得した情報を、CSVファイルに書き込むテキストとして組み立て、

一時ファイルに保存します。

そして、一時ファイルに保存したファイルをFTPアップロードします。

アップするファイル名は以前ご紹介した、タイムスタンプつきです。

FTPアップロードは別関数にしています。


//$dir:FTPアップロード先ディレクトリ名
//$remote_file:FTPアップロード先ファイル名
//$file:アップロード元一時ファイル名
function FtpUpload($dir, $remote_file,$file)
{
	//接続を確立する
	$conn_id = ftp_connect("サーバホスト");
	
	//ログイン
	$result = ftp_login($conn_id, "FTPユーザ", "FTPパスワード");
	
	//パッシブモードに
	ftp_pasv($conn_id, true);
	
	//ftp_pasv($conn_id, true);
	if(!empty($dir)){
		ftp_chdir($conn_id, $dir); // アップロード先のディレクトリに移動
	}
	
	//アップロード
	if (!ftp_put($conn_id, $remote_file, $file, FTP_BINARY))
	{
		//アップロードに失敗
		//接続を閉じる
		ftp_close($conn_id);
		exit;
	}
	
	//接続を閉じる
	ftp_close($conn_id);
}


これでFTPアップロードできました。もうちょっと上手い書き方があるかもしれませんが。

次回は、PHPから画像ファイルをアップロードする方法をご紹介します。

  • ブログランキング・にほんブログ村へ
  • FC2ブログランキングへ
  • 人気ブログランキングへ
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る