SQLの窓

2015年10月03日


PHP で Windows標準のオブジェクト(CDO.Message)とGMail を使ってメール送信

ひさしぶりにテスト( Windows7 ) しようとすると、Gmail からエラーが返って来ましたが、Gmail 側で安全性の低いアプリの許可を『有効』にする必要がありました。

また、php 側では、php_com_dotnet.dll を php.ini で有効にする必要があります。

※ CDO.Message に関する詳細は、ソース内に URL を記述しています

関連する記事

Windows標準のオブジェクト(CDO.Message)とGMail を使ってメール送信

本来は、VBScript で実行するものですが、PHP が分かる人なら、こちらのほうがいろいろ応用がきいて使い勝手もいいと思います。

▼ バッチファイル
------------------------------------------------------
@echo off
setlocal
set PATH=c:\php;%PATH%

php mail.php "題名" "本文\nで す\nよ"

endlocal
------------------------------------------------------

mail.php
<?php
// ***********************************************
// バッチファイル内容
// setlocal は、環境変数を一時的に設定する為に使用します
// php.exe は、c:\php にあります
// ***********************************************
/*
@echo off
setlocal
set PATH=c:\php;%PATH%

php mail.php "題名" "本文\nで す\nよ"

endlocal
*/

// ***********************************************
// php.ini で必要な拡張
// ***********************************************
/*
extension=php_com_dotnet.dll
*/

// ***********************************************
// Gmail 側の設定
// ***********************************************
/*
安全性の低いアプリの許可を『有効』にする

https://myaccount.google.com/security?pli=1#connectedapps
*/

// ***********************************************
// PHP の処理開始
// ***********************************************
$strFrom = "私です <ユーザ名@gmail.com>";
$strTo = "あなたです <宛先メールアドレス>";

$strServer = "smtp.gmail.com";
$nPort = 465;
$strUser = "ユーザ名@gmail.com";
$strPass = "パスワード!";

// ***********************************************
// CDO.Message( CDO for Windows 2000 )
// ***********************************************
$cdo = new COM( "CDO.Message" );

$cdo->From = $strFrom;
$cdo->To = $strTo;

// ***********************************************
// 題名
// ***********************************************
$cdo->Subject = $argv[1];

// ***********************************************
// バッチファイルで引渡した本文文字列内の \n を実際の改行に変換
// ***********************************************
$data = str_replace( "\\n", "\n", $argv[2] );
$cdo->Textbody = $data;

// ***********************************************
// 送信情報オプション
// ***********************************************
$cdo->Cc = "メールアドレス1,メールアドレス2";
//$cdo->Bcc = "";
$cdo->Htmlbody = "<img src=\"http://winofsql.jp/image/winofsql.png\">";

// ***********************************************
// ファイル添付
// ***********************************************
$cdo->AddAttachment( "C:\\Users\\lightbox\\Desktop\\画像\\_img.jpg" );

// cdoSendUsingPort : 2 : Send the message using the network (SMTP over the network)
// https://msdn.microsoft.com/en-us/library/ms527265.aspx.
$cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"] = 2;

// The name (DNS) or IP address of the machine hosting the SMTP service through which messages are to be sent.
// https://msdn.microsoft.com/en-us/library/ms527294.aspx
$cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/smtpserver"] = $strServer;

// The port on which the SMTP service specified by the smtpserver field is listening for connections.
// https://msdn.microsoft.com/en-us/library/ms526227.aspx
$cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/smtpserverport"] = $nPort;

// Indicates that SSL should be used when sending messages using the SMTP protocol over the network.
// https://msdn.microsoft.com/en-us/library/ms526975.aspx
$cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/smtpusessl"] = true;

// Specifies the authentication mechanism to use when authentication is required to send messages
// to an SMTP service using a TCP/IP network socket.
// https://msdn.microsoft.com/en-us/library/ms526600.aspx
// 1 : Use basic (clear-text) authentication
// https://msdn.microsoft.com/en-us/library/ms526961.aspx
$cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"] = 1;

// ユーザとパスワード
$cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/sendusername"] = $strUser;
$cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/sendpassword"] = $strPass;

$cdo->Configuration->Fields->Update();

$cdo->Send();

// ***********************************************
// レジストリ内容
// ***********************************************
/*
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{CD000001-8B95-11D1-82DB-00C04FB1625D}]
@="CDOMessage Class"

[HKEY_CLASSES_ROOT\CLSID\{CD000001-8B95-11D1-82DB-00C04FB1625D}\InprocServer32]
@="C:\\Windows\\system32\\cdosys.dll"
"ThreadingModel"="Both"

[HKEY_CLASSES_ROOT\CLSID\{CD000001-8B95-11D1-82DB-00C04FB1625D}\ProgID]
@="CDO.Message.1"

[HKEY_CLASSES_ROOT\CLSID\{CD000001-8B95-11D1-82DB-00C04FB1625D}\Programmable]

[HKEY_CLASSES_ROOT\CLSID\{CD000001-8B95-11D1-82DB-00C04FB1625D}\VersionIndependentProgID]
@="CDO.Message"
*/
?>

参考情報

メーラーからGmailへの接続時に認証(パスワード)のエラーが生じる場合の対処方法



posted by lightbox at 2015-10-03 21:44 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

2015年06月22日


PHP : http 経由でファイルのサイズを取得する file_size 関数と ファイルサイズを付加した get_imagesize 関数

getimagesize は、ファイルのサイズが取得されません。あまり大きいサイズは事前に排除したいので、ファイルサイズを付加すれば便利だろうと思い、まず file_size 関数を作成しました。



※ getimagesize( get_imagesize ) は、画像以外だとエラーになります。
<?php
header( "Content-Type: text/html; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

if ( $_SERVER["REQUEST_METHOD"] == "POST" ) {

	if ( $_POST["send"] == "テスト送信" ) {
		$result = @getimagesize( $_POST["url"] );
		if ( $result !== false ) {
			$view = print_r( $result, true );

			$header = get_headers( $_POST["url"] );
			$view .= print_r( $header, true );

			$size = implode( "\n", $header );
			$view .= $size;

			if (preg_match('/Content-Length: (\d+)/', $size, $matches)) {
				$contentLength = (int)$matches[1];
				$view .= "\n\niamge size : {$contentLength}";
			}

		}
		else {
			$view = "{$_POST["url"]} を読み込めません";
		}
	}

	if ( $_POST["send"] == "get_imagesize" ) {
		$result = get_imagesize( $_POST["url"] );
		if ( $result !== false ) {
			$view = print_r( $result, true );
		}
		else {
			$view = "{$_POST["url"]} を読み込めません";
		}
	}

	if ( $_POST["send"] == "fle_size" ) {
		$result = fle_size( $_POST["url"] );
		if ( $result !== false ) {
			$view = "filesize : $result";
		}
		else {
			$view = "{$_POST["url"]} を読み込めません";
		}
	}
}

function get_imagesize($url) {

	$result = @getimagesize($url);
	if ( $result !== false ) {
		$view = print_r( $result, true );

		$size = fle_size($url);
		if ( $size !== false ) {
			$result["size"] = $size;
		}
		return $result;
	}
	else {
		return false;
	}

}

function fle_size($url) {

	$header = @get_headers($url) ;
	if ( $header !== false ) {
		$size = implode( "\n", $header );
		if (preg_match('/Content-Length: (\d+)/', $size, $matches)) {
			$contentLength = (int)$matches[1];
			return $contentLength;
		}
		else {
			return false;
		}
	}
	else {
		return false;
	}

}

?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<style>
* {
	font-size: 16px;
	font-family: "Hiragino Kaku Gothic ProN", "メイリオ", Meiryo, "MS Pゴシック", sans-serif;
}
</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(function(){

});
</script>
</head>
<body>

<form method="post" target="_self">
	URL => <input type="text" name="url" style="width:800px;" value="<?= $_POST["url"] ?>">
	<br>

	<input type="submit" name="send" value="テスト送信">
	<input type="submit" name="send" value="get_imagesize">
	<input type="submit" name="send" value="fle_size">
</form>
<pre>
<?= $view ?>
</pre>
</body>
</html>

※ ボタン画像



posted by lightbox at 2015-06-22 14:26 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

2015年05月15日


連想配列のキー部分がプロパティと一致したらセットする( メール送信用クラス )

▼ 以下の記事のメール送信部分に汎用性を持たせる為に、作成しました。ブラウザからは、FORM で直接呼び出してもいいですが、jQuery で .serialize() から .post() を使用する方法もあります。

@BBS(アットビービーエス) のサービスが終了するので、管理人宛のメールサービスをほぼ同じ画面デザインで作成しました。( ご自由にお使い下さい )

UTF-8 前提です
<?php

mb_language( "ja" );
mb_internal_encoding("utf-8");

$mail = new mail_data();

$_GET['from_address'] = "このPHPが置かれるサーバで使用できるメールアドレス";
$_GET['from_text'] ="日本語差出人";
$_GET['to_address'] ="送り先のメールアドレス";
$_GET['to_text'] ="日本語受取人";
$_GET['subject'] ="件名";
$_GET['body'] ="本文1\n本文2\n";

$_GET['another'] ="その他";

$mail->send_mail_set($_GET);

print "<pre>";
print_r($mail);
print "</pre>";

$mail->send_mail();

// ***********************************************
// メール処理用クラス
// ***********************************************
class mail_data {

	public $from_address;
	public $from_text;
	public $to_address;
	public $to_text;
	public $subject;
	public $body;

	// ***********************************************
	// 連想配列のキー部分がプロパティと一致したらセット
	// ***********************************************
	public function send_mail_set( $data ) {

		foreach( $data as $k => $v ) {
			if ( property_exists( $this, $k ) ) {
				$this->{$k} = $v;
			}
		}

	}

	// ***********************************************
	// サーバー(メールサーバ)送信処理
	// ***********************************************
	public function send_mail() {

		$from = mb_convert_encoding( $this->from_text, "JIS", "utf-8" );
		$from = "From: =?ISO-2022-JP?B?" . base64_encode($from) . "?= <{$this->from_address}>";
		$to = mb_convert_encoding( $this->to_text, "JIS", "utf-8" );
		$to = "To: =?ISO-2022-JP?B?" . base64_encode($to) . "?= <{$this->to_address}>";
		mb_send_mail($to, $this->subject, $this->body, $from );
	}

}

?>

$_GET を使っているのは、テスト段階なのが理由です。実装では $_POST が望ましいです。




posted by lightbox at 2015-05-15 17:14 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

@BBS(アットビービーエス) のサービスが終了するので、管理人宛のメールサービスをほぼ同じ画面デザインで作成しました。( ご自由にお使い下さい )

デモページ


フォントは変更し、必要無い文言は削除しています。
( オリジナルは SHIFT_JIS でしたが、全て UTF-8 に変更しました )



自分が管理するサーバー(レンタルサーバー)があって、そのサーバーから PHP の mb_send_mail 関数で呼び出す事のできるメールアカウントを使って利用可能です。

common.php
<?php
header( "Content-Type: text/html; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

mb_language( "ja" );
mb_internal_encoding("utf-8");

function admin_mail( $user_body, $user_mail, $user_subject ) {
	$from_address = "<このPHPが置かれるサーバで使用できるメールアドレス>";
	$from = "日本語の差出人";
	$to_address = "<管理人のメールアドレス>";
	$to = "管理人宛";

	$from = mb_convert_encoding( $from, "JIS", "utf-8" );
	$from	= "From: =?ISO-2022-JP?B?" . base64_encode($from) . "?= $from_address";
	$to = mb_convert_encoding( $to, "JIS", "utf-8" );
	$to	= "To: =?ISO-2022-JP?B?" . base64_encode($to) . "?= $to_address";

	$mail_body = "------------------------------------------------\n";
	$mail_body .= "(注)このメールに直接返信しないでください。\n";
	$mail_body .= "送信元は投稿者ではありません。\n";
	$mail_body .= "下記掲載の「投稿者のメールアドレス」に返信してください。\n";
	$mail_body .= "------------------------------------------------\n";
	$mail_body .= "投稿者のIP:{$_SERVER["REMOTE_ADDR"]}\n";
	$mail_body .= "投稿者のメールアドレス:{$user_mail}\n";
	$mail_body .= "内容:\n";
	$mail_body .= $user_body;

	mb_send_mail($to, $user_subject, $mail_body, $from );

}
?>

カスタマイズしやすいように、画面処理は 3つ の PHP ファイルで遷移させています。

1) 入力 : adminmail_1.php
2) 確認 : adminmail_2.php
3) 終了 : adminmail_3.php

その為、通常のデータの受け渡しは、POST を使用していますが、エラー処理の画面遷移では GET を使用しています。

セッションを使うともっと簡潔になりますが、ここでは使用していません。

adminmail_1.php

このページに サーバーから $_POST が送られる事はありませんが、画面遷移を1つのページに仕様変更する際には必要なので、便宜上記述しています。

str_replace の処理は、入力値を HTML 内に問題無く埋め込めるようにする為に、HTML の < と > と 属性の値に使われる "(ダブルクォーテーション) を変換しています。
<?php
require_once( "common.php" );

foreach($_POST as $k => $v) {
	$v = str_replace("\"","&#34;",$v);
	$v = str_replace("<","&lt;",$v);
	$_POST[$k] = str_replace(">","&gt;",$v);
}
foreach($_GET as $k => $v) {
	$v = str_replace("\"","&#34;",$v);
	$v = str_replace("<","&lt;",$v);
	$_GET[$k] = str_replace(">","&gt;",$v);
}

$message = "";
if ( $_GET['e1'] == "1" ) {
	$message .= "<br>※ 件名を入力してください";
}
if ( $_GET['e2'] == "1" ) {
	$message .= "<br>※ メールアドレスを入力してください";
}
if ( $_GET['e2'] == "2" ) {
	$message .= "<br>※ メールアドレスが正しく無いようです";
}
if ( $_GET['e3'] == "1" ) {
	$message .= "<br>※ 本文を入力して下さい";
}

if ( $message != "" ) {
	foreach($_GET as $k => $v) {
		$_POST[$k] = $_GET[$k];
	}
}

?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>管理人へメールを送る</title>

<link type="text/css" rel="stylesheet" href="adminmail.css">

</head>
<body>

<div id="header" style="text-align:left;">
	<a href="adminmail_1.php">リロード</a>
</div>

<div id="container">
	
	<div id="top">
	  <h1>管理人へメールを送る</h1>
	</div>
	<div id="message">
		<?= $message ?>
	</div>	

	<div id="content">
		<fieldset>
			<legend>送信情報</legend>
			
			<div class="explain">
				<ol>
						<li>下記のフォームを埋めて投稿してください。</li>
						<li>メールアドレスは正しく入力してください。</li>
					</ol>
				<p></p>
			</div>


			<form action="adminmail_2.php" method="post" class="form">
				
				<p><label for="subject">件名</label></p>
				
				<p><input type="text" name="subject" value="<?= $_POST["subject"] ?>" id="subject" size="60"></p>
				
				<p><label for="usermail">メールアドレス</label></p>
				
				<p><input type="text" name="usermail" value="<?= $_POST["usermail"] ?>" id="usermail" size="60"></p>
				
				<p><label for="body">本文</label></p>
				
				<p><textarea cols="50" rows="5" name="body" id="body"><?= $_POST["body"] ?></textarea></p>
				
				<input type="submit" name="confirm" value="確認" class="buttons">
				
			</form>
		</fieldset>
	</div>
	
	<div class="clear"></div>
	
</div>


</body>
</html>


adminmail_2.php

メールアドレスのフォーマットチェックには、filter_var 関数(PHP 5 >= 5.2.0) を使用しています。
<?php
require_once( "common.php" );

$err = false;
$param = "";

// 入力チェック
if( trim( $_POST['subject'] ) == "") {
	$err = true;
	if ( $param != "" ) {
		$param .= "&";
	}
	$param .= "e1=1";
}
if( trim( $_POST['usermail'] ) == "") {
	$err = true;
	if ( $param != "" ) {
		$param .= "&";
	}
	$param .= "e2=1";
}
else {
	if( !filter_var($_POST['usermail'], FILTER_VALIDATE_EMAIL)) {
		$err = true;
		if ( $param != "" ) {
			$param .= "&";
		}
		$param .= "e2=2";
	}
}
if( trim( $_POST['body'] ) == "") {
	$err = true;
	if ( $param != "" ) {
		$param .= "&";
	}
	$param .= "e3=1";
}

if ( $err ) {
	$url = "adminmail_1.php?{$param}";
	$url .= "&subject=" . urlencode($_POST['subject']);
	$url .= "&usermail=" . $_POST['usermail'];
	$url .= "&body=" . urlencode($_POST['body']);
	header("Location: {$url}");
	exit();
}

foreach($_POST as $k => $v) {
	$v = str_replace("\"","&#34;",$v);
	$v = str_replace("<","&lt;",$v);
	$_POST[$k] = str_replace(">","&gt;",$v);
}

$_POST["body_html"] = str_replace("\r\n","<br>",$_POST["body"]);
$_POST["body_html"] = str_replace("\n","<br>",$_POST["body_html"]);


?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>管理人へメールを送る</title>

<link type="text/css" rel="stylesheet" href="adminmail.css">

</head>
<body>

<div id="header" style="text-align:left;">
	<a href="adminmail_1.php">リロード</a>
</div>

<div id="container">
	
	<div id="top">
	  <h1>管理人へメールを送る</h1>
	</div>
	
		
	<div id="content">
		<fieldset>
			<legend>送信情報</legend>
			
			<div class="explain">
				<ol>
						<li>下記のフォームを埋めて投稿してください。</li>
						<li>メールアドレスは正しく入力してください。</li>
					</ol>
				<p></p>
			</div>
			
			
			<form action="adminmail_3.php" method="post" class="form">
				<p><label>件名</label></p>
				
				<p><?= $_POST["subject"] ?></p>
				<input type="hidden" name="subject" value="<?= $_POST["subject"] ?>">
				<p><label>メールアドレス</label></p>
				
				<p><?= $_POST["usermail"] ?></p>
				<input type="hidden" name="usermail" value="<?= $_POST["usermail"] ?>">
				<p><label>本文</label></p>
				
				<p><?= $_POST["body_html"] ?></p>
				<input type="hidden" name="body" value="<?= $_POST["body"] ?>">
				<input type="submit" name="edit" value="<< 修正" class="buttons" formaction="adminmail_1.php">
				<input type="submit" name="sendmail" value="送信" class="buttons">
			</form>
		</fieldset>
	</div>
	
	<div class="clear"></div>
	
</div>


</body>
</html>


adminmail_3.php

ここでメール送信を実行しています。送信後、この画面にリダイレクトしているので、ブラウザで再表示しても再度送信しようとする事はありません。
<?php
require_once( "common.php" );

if ($_SERVER["REQUEST_METHOD"] == "POST") {

	admin_mail( $_POST["body"], $_POST["usermail"], $_POST["subject"]);

	header("Location: adminmail_3.php");
	exit();

}

?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>管理人へメールを送る</title>

<link type="text/css" rel="stylesheet" href="adminmail.css">

</head>
<body>

<div id="header" style="text-align:left;">
	<a href="adminmail_1.php">リロード</a>
</div>

<div id="container">
	
	<div id="top">
	  <h1>管理人へメールを送る</h1>
	</div>
	
		
	<div id="content">
		<fieldset>
			<legend>送信情報</legend>
			
			<div class="explain">
				<ol>
						<li>下記のフォームを埋めて投稿してください。</li>
						<li>メールアドレスは正しく入力してください。</li>
					</ol>
				<p></p>
			</div>
			
			
					<p style="color:#336699; font-weight:bold;">メールを送信しました。</p>
			<p><a href="adminmail_1.php">メール作成フォームへ戻る</a></p>
					<div class="clear"></div>
		</fieldset>
	</div>
	
	<div class="clear"></div>
	
</div>


</body>
</html>

送り先が固定なのでここでは実装していませんが、セッションを使えば最初の画面表示から、メール送信までの時間間隔が一定以上必要になるようにする事ができます。



posted by lightbox at 2015-05-15 07:44 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

2014年08月01日


PHP : リモートのファイルサイズを取得する

PHP のオンラインマニュアルの投稿データにあります。
<?php
$remoteFile = '対象 URL(http)';
$ch = curl_init($remoteFile);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
curl_close($ch);
if ($data === false) {
  echo 'cURL failed';
  exit;
}

$contentLength = 'unknown';
$status = 'unknown';
if (preg_match('/^HTTP\/1\.[01] (\d\d\d)/', $data, $matches)) {
  $status = (int)$matches[1];
}
if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
  $contentLength = (int)$matches[1];
}

echo 'HTTP Status: ' . $status . "\n";
echo 'Content-Length: ' . $contentLength;
?>
Here's the best way (that I've found) to get the size of a remote file
なんて書いてあるのですが、確かにうまくいきます。当たり前と言えばあたりまえですが、An HTTPD でログを取るとこんな感じです。
<<< s=300: Fri Sep 18 23:30:20 2009 <<<
HEAD /php/elenat.ttf HTTP/1.1
Host: localhost
Accept: */*

>>> s=300: Fri Sep 18 23:30:20 2009 >>>
HTTP/1.1 200 Document follows
MIME-Version: 1.0
Server: AnWeb/1.42p
Date: Fri, 18 Sep 2009 14:30:20 GMT
Content-Type: application/octet-stream
Accept-Ranges: bytes
Content-Length: 5116536
ETag: "43a96df0-4e1278"
Last-Modified: Wed, 21 Dec 2005 15:00:00 GMT
レスポンスはすぐに返ってきます。実際使う場合は、curl が使えるか事前にチェックする必要がありますが、たぶん大丈夫でしょう。ですが、Windows の場合は意図的に使えるようにする必要があります(php.ini でextension=php_curl.dll)。こちらは、実際にそのへんを考慮して作ったサンプルです
posted by lightbox at 2014-08-01 12:17 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

2014年07月30日


ローカルの PHP を使ってコマンドプロンプトより簡単にバイナリファイルをアップロードする

PHP の簡単なコードへ向けて、データをアップロードします。PHP のコードは、『VBscript(または JScript) で簡単にバイナリファイルをアップロードする』を参照して下さい。

コマンドプロンプトからは以下のようにして実行します。
php.exe curl_put.php

cURL 関数を使用するには、Windows では、php.ini で extension=php_curl.dll が必要です。また、ここでは使用していませんが、https に対して実行する場合は、24行と25行のコメントを外して下さい

curl_put.php
<?php
// ***********************
// curl 処理
// ***********************
$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, "http://yourdomian/put/put.php");
curl_setopt($curl, CURLOPT_PUT, true);

// ***********************
// 読み込むファイル
// ***********************
$file_path = "./winofsql.png";
curl_setopt($curl, CURLOPT_INFILESIZE, filesize ( $file_path ));
$handle = fopen($file_path, "r");
curl_setopt($curl, CURLOPT_INFILE, $handle);

// ***********************
// https 用
// ***********************
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

// ***********************
// 送信
// ***********************
$result = curl_exec($curl);

// ***********************
// 結果
// ***********************
if($result === false) {
	$result = 'Curl error: ' . curl_error($curl);
}
curl_close($curl);
fclose($handle);

print mb_convert_encoding( $result, "CP932", "UTF-8" ) . "\n";

?>

mb_convert_encoding を使用しているのは、WEB が返すキャラクタセットが UTF-8 で、そのままではコマンドプロンプトで表示できないからです。

関連する記事


タグ:Curl PHP
posted by lightbox at 2014-07-30 23:38 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり