勉強したことのメモ

webプログラマが勉強したことのメモ。

PHPで他サーバにファイルをアップロードする2

   

formで画像を送信した後、他サーバにファイルをアップロードしたかった。以前はPHPのFTP関数を用いる方法を使ったけど、今回の環境では上手く動かなかった。HTTPで送信する方法を調べたのでメモ。

 

■送信側

foreach( $_FILES as $key => $val ){

	if( !$val['size'] ){
		continue;
	}

	$data = array(
		'file'=>'@'.$_FILES[$key]['tmp_name'].';filename='.$_FILES[$key]['name'].';type='.$val['type'], 
		'key' => $key, 
		'id' => $id,
	); //file以外にkeyやidなども配列に入れて送信できる

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_URL, 'http://hogehoge.com/receive.php'); //受取側のURL指定
	$result = curl_exec($ch);
	curl_close($ch);

}

 

■受信側

$img_name = imgUpload($_FILES);

function imgUpload( $img_list = array() ){

	if( empty($img_list) ){
		return false;
	}

	foreach( $img_list as $key => $val ){
		$ext = $val['type'];
		if ($ext == 'image/jpeg' || $ext == 'image/jpg') {
			$tmp_ext = '.jpg';
		} elseif ($ext == 'image/png') {
			$tmp_ext = '.png';
		} elseif ($ext == 'image/gif') {
			$tmp_ext = '.gif';
		} else {
			return false;
		}

		$tmp_name = md5(uniqid(rand(), true)) . $tmp_ext;

		if( !move_uploaded_file($val['tmp_name'], $img_path . $tmp_name) ){
			return false;
		}

		$return[$key]['url'] = $tmp_name;
	}

	return $return;
}

 

■その他

まとめてアップロードできたらいいんだけど、方法が分からなかったので今回は1枚ずつアップロードした。

 - PHP

  関連記事

PHPでyoutubeから更新分の情報を取得する(スクレイピング)

「○○のサイトから自動更新分を持ってきて 自サイトに反映させらへん?」と以前に聞 ...

お名前.comの共用サーバー(SD)でのphp設定

画像のアップロードフォームを作っていて、そういえば最大ファイルサイズは? と思っ ...

MySQLでのエラーについて

エラーログをとるようになってから色々エラーを 見る機会が出来てきたのでメモ。 プ ...

PHPのfor文とforeach文

ループ処理の際、forとforeachのどっちでもいけそうな場合、 特にどっちを ...

さくらvpsでPHPのエラーログ設定

PHPのエラーログを設定した際のメモ。 vi /etc/php.ini で設定フ ...

PHPのswitch文で比較演算子の使用

switch文は指定の変数が、特定の値もしくは文字列 だった場合のみに使うような ...

PHPのセッションでログイン、ログアウトの管理。あとセッションが保存されない場合の対処。

セッションはほとんど使ったことがなく、 色々つまづいたのでメモ。 やりたかった事 ...

PHPで画像を上下反転させ保存する

やりたかった事は、下記の通り。 ・既にフォルダに保存されている画像を上下反転させ ...

GoogleスプレッドシートとPHPの連携

GoogleスプレッドシートとPHPプログラムを連携させたいという案件をたまに見 ...

PHPでログインフォームにひらがな認証を設置する方法

ログインフォームに平仮名認証を設置したい。英数字認証だとSecurimageとい ...