SQLの窓 イラストAC フリー素材

2017年09月09日

PHP : curl で FTP サーバのファイル一覧( 結果は JSON )

これは ルートの一覧なので、対話式で階層を順番に読み出す必要があります。
<?php
error_reporting( E_ALL & ~E_NOTICE );
session_cache_limiter('nocache');
session_start();
header( "Content-Type: application/json; charset=utf-8" );

$server = "ftpサーバ";
$path = "";
$userpwd = "ユーザ:パスワード";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,"ftp://{$server}{$path}");
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_FTP_SSL, CURLFTPSSL_ALL);
curl_setopt($curl, CURLOPT_USERPWD, $userpwd);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$error = 0;

$result = curl_exec($curl);
if ( !$result ) {
	$data = array();
	$error = 1;
	exit();
}
else {
	$data = explode("\r\n", rtrim( $result ) );
	foreach( $data as $value  ) {
		$col = preg_split( "/\s+/", $value );
		$namecol["flg"] = $col[0];
		$namecol["size"] = $col[4];
		$namecol["date"] = "{$col[5]} {$col[6]} {$col[7]}";
		$namecol["name"] = $col[8];
		$file[] = $namecol;
	}
}
// ***************************
// JSON データ作成
// ***************************
$json = new stdClass;

$json->row = $file;	// 行データ
$json->status = $error;		// エラー

print json_encode( $json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE );


?>



テスト結果
{
    "row": [
        {
            "flg": "drwx---r-x",
            "size": "512",
            "date": "Sep 4 16:08",
            "name": "."
        },
        {
            "flg": "drwxr-xr-x",
            "size": "3072",
            "date": "Sep 4 21:31",
            "name": ".."
        },
        {
            "flg": "-rw-r--r--",
            "size": "773",
            "date": "Jan 7 2009",
            "name": ".cshrc"
        },
        {
            "flg": "-rw-r--r--",
            "size": "258",
            "date": "Jan 2 2009",
            "name": ".login"
        },
        {
            "flg": "-rw-r--r--",
            "size": "167",
            "date": "Jan 2 2009",
            "name": ".login_conf"
        },
        {
            "flg": "-rw-r--r--",
            "size": "3",
            "date": "Jun 28 13:35",
            "name": ".my.version"
        },
        {
            "flg": "-rw-r--r--",
            "size": "762",
            "date": "Jan 7 2009",
            "name": ".profile"
        },
        {
            "flg": "-rw-r--r--",
            "size": "980",
            "date": "Jan 2 2009",
            "name": ".shrc"
        },
        {
            "flg": "drwx------",
            "size": "512",
            "date": "May 10 10:31",
            "name": ".spamassassin"
        },
        {
            "flg": "drwx------",
            "size": "512",
            "date": "Mar 13 2009",
            "name": ".ssh"
        },
        {
            "flg": "drwx------",
            "size": "1024",
            "date": "May 10 14:09",
            "name": "MailBox"
        },
        {
            "flg": "drwx------",
            "size": "512",
            "date": "Mar 13 2009",
            "name": "db"
        },
        {
            "flg": "-rw-------",
            "size": "21098",
            "date": "Jun 16 10:35",
            "name": "dead.letter"
        },
        {
            "flg": "drwxr-xr-x",
            "size": "2048",
            "date": "Jul 15 2004",
            "name": "fml"
        },
        {
            "flg": "drwxr-xr-x",
            "size": "512",
            "date": "Aug 10 05:43",
            "name": "lightbox"
        },
        {
            "flg": "-rw-r--r--",
            "size": "865",
            "date": "Apr 27 11:22",
            "name": "nam.php"
        },
        {
            "flg": "drwx------",
            "size": "512",
            "date": "Sep 4 16:08",
            "name": "ports"
        },
        {
            "flg": "drwxr-xr-x",
            "size": "512",
            "date": "Jun 14 09:53",
            "name": "sakura_pocket"
        },
        {
            "flg": "drwxr-xr-x",
            "size": "512",
            "date": "May 18 11:06",
            "name": "tmp"
        },
        {
            "flg": "drwxr-xr-x",
            "size": "1024",
            "date": "Sep 6 15:56",
            "name": "www"
        }
    ],
    "status": 0
}






posted by at 2017-09-09 21:26 | Comment(0) | PHP+通信 | このブログの読者になる | 更新情報をチェックする

2015年11月05日

fake sendmail for windows ってなんで無名なんだ???

使ってみたらとても便利だった

レンタルサーバ用の PHP のソースコードがそのまま動く。mb_send_mail は、ユーザーやパスワードの設定無しに、サーバで環境設定されている sendmail を使って、サーバ環境内のメールサーバでメール処理するので、ローカルの Windows では、ローカルにメールサーバ立てないと同じ(同等のセキュアな)処理できない。だから、PearWindows の CDO.Message を使う方法しか無かったんだけど・・・

今日

作業の途中にいつものように脱線して、古いリンクの中に fake sendmail for windows を見つけて、『おっ』ってなって調べてみると、XAMP がらみの情報しか出てこない。それでも使い方はすぐ理解できたので、ダウンロードして実行してみた。

Gmail 経由で簡単にメールが送信できた。凄い。

なのに、何故か fake sendmail for windows で検索してもプログラマ用の情報らしきものはヒットしなかった。まあ、それはそうかも知れない。サーバの環境部分という色合い濃いし、そもそもアプリケーションとしてのメールシステムはとても面倒で、ある程度のスキルが無いと扱えないし、初心者には説明するのも難しいもんな。

ためしに、作者のブログへ行ってみたけれど、fake sendmail for windows に関する記述は無く、かろうじて Twitter に古い最後と思われる投稿が一つあっただけ。( ちなみにこれは、fake sendmail site:twitter.com/globau とすれば、Google で簡単に検索できる )




とても便利なんだけどなぁ・・・

以下、設定ファイル
; configuration for fake sendmail

; if this file doesn't exist, sendmail.exe will look for the settings in
; the registry, under HKLM\Software\Sendmail

[sendmail]

; you must change mail.mydomain.com to your smtp server,
; or to IIS's "pickup" directory.  (generally C:\Inetpub\mailroot\Pickup)
; emails delivered via IIS's pickup directory cause sendmail to
; run quicker, but you won't get error messages back to the calling
; application.

smtp_server=smtp.gmail.com

; smtp port (normally 25)

smtp_port=465

; SMTPS (SSL) support
;   auto = use SSL for port 465, otherwise try to use TLS
;   ssl  = alway use SSL
;   tls  = always use TLS
;   none = never try to use SSL

smtp_ssl=auto

; the default domain for this server will be read from the registry
; this will be appended to email addresses when one isn't provided
; if you want to override the value in the registry, uncomment and modify

;default_domain=mydomain.com

; log smtp errors to error.log (defaults to same directory as sendmail.exe)
; uncomment to enable logging

error_logfile=error.log

; create debug log as debug.log (defaults to same directory as sendmail.exe)
; uncomment to enable debugging

;debug_logfile=debug.log

; if your smtp server requires authentication, modify the following two lines

auth_username=ユーザ@gmail.com
auth_password=パスワード

; if your smtp server uses pop3 before smtp authentication, modify the 
; following three lines.  do not enable unless it is required.

pop3_server=
pop3_username=
pop3_password=

; force the sender to always be the following email address
; this will only affect the "MAIL FROM" command, it won't modify 
; the "From: " header of the message content

force_sender=

; force the sender to always be the following email address
; this will only affect the "RCTP TO" command, it won't modify 
; the "To: " header of the message content

force_recipient=

; sendmail will use your hostname and your default_domain in the ehlo/helo
; smtp greeting.  you can manually set the ehlo/helo name if required

hostname=





posted by at 2015-11-05 23:04 | Comment(0) | PHP+通信 | このブログの読者になる | 更新情報をチェックする

2015年05月24日

Livedoor の お天気Webサービス API は、JSON のテストするのに重宝しています。

制限も特に無く、GET メソッドで呼び出せる今時珍しい公開 API です。

お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報

ただ、JSON を返すまっとうな API なので、結果の表示はとてもテストには不向きです。


 

そこで、簡単な PHPコードで JSON を整形して日本語を表示する自分用 API を作成します
<?php
header( "Content-Type: application/json; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );
header( "Access-Control-Allow-Origin: *" );

if ( $_GET['city'] == '' ) {
	$_GET['city'] = "270000";
}

$work = file_get_contents( "http://weather.livedoor.com/forecast/webservice/json/v1?city={$_GET['city']}" );
$obj = json_decode( $work );
$work = json_encode( $obj, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT );

print $work;
?>

『Access-Control-Allow-Origin: *』があるので、JavaScript からも呼べます。

テストしたい放題です。
{
	"pinpointLocations": [
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2710000",
			"name": "大阪市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2714000",
			"name": "堺市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2720200",
			"name": "岸和田市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2720300",
			"name": "豊中市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2720400",
			"name": "池田市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2720500",
			"name": "吹田市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2720600",
			"name": "泉大津市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2720700",
			"name": "高槻市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2720800",
			"name": "貝塚市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2720900",
			"name": "守口市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2721000",
			"name": "枚方市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2721100",
			"name": "茨木市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2721200",
			"name": "八尾市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2721300",
			"name": "泉佐野市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2721400",
			"name": "富田林市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2721500",
			"name": "寝屋川市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2721600",
			"name": "河内長野市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2721700",
			"name": "松原市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2721800",
			"name": "大東市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2721900",
			"name": "和泉市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2722000",
			"name": "箕面市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2722100",
			"name": "柏原市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2722200",
			"name": "羽曳野市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2722300",
			"name": "門真市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2722400",
			"name": "摂津市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2722500",
			"name": "高石市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2722600",
			"name": "藤井寺市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2722700",
			"name": "東大阪市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2722800",
			"name": "泉南市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2722900",
			"name": "四條畷市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2723000",
			"name": "交野市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2723100",
			"name": "大阪狭山市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2723200",
			"name": "阪南市"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2730100",
			"name": "島本町"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2732100",
			"name": "豊能町"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2732200",
			"name": "能勢町"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2734100",
			"name": "忠岡町"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2736100",
			"name": "熊取町"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2736200",
			"name": "田尻町"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2736600",
			"name": "岬町"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2738100",
			"name": "太子町"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2738200",
			"name": "河南町"
		},
		{
			"link": "http:\/\/weather.livedoor.com\/area\/forecast\/2738300",
			"name": "千早赤阪村"
		}
	],
	"link": "http:\/\/weather.livedoor.com\/area\/forecast\/270000",
	"forecasts": [
		{
			"dateLabel": "今日",
			"telop": "晴れ",
			"date": "2015-05-24",
			"temperature": {
				"min": null,
				"max": null
			},
			"image": {
				"width": 50,
				"url": "http:\/\/weather.livedoor.com\/img\/icon\/1.gif",
				"title": "晴れ",
				"height": 31
			}
		},
		{
			"dateLabel": "明日",
			"telop": "晴のち曇",
			"date": "2015-05-25",
			"temperature": {
				"min": {
					"celsius": "17",
					"fahrenheit": "62.6"
				},
				"max": {
					"celsius": "30",
					"fahrenheit": "86.0"
				}
			},
			"image": {
				"width": 50,
				"url": "http:\/\/weather.livedoor.com\/img\/icon\/5.gif",
				"title": "晴のち曇",
				"height": 31
			}
		},
		{
			"dateLabel": "明後日",
			"telop": "晴時々曇",
			"date": "2015-05-26",
			"temperature": {
				"min": null,
				"max": null
			},
			"image": {
				"width": 50,
				"url": "http:\/\/weather.livedoor.com\/img\/icon\/2.gif",
				"title": "晴時々曇",
				"height": 31
			}
		}
	],
	"location": {
		"city": "大阪",
		"area": "近畿",
		"prefecture": "大阪府"
	},
	"publicTime": "2015-05-24T17:00:00+0900",
	"copyright": {
		"provider": [
			{
				"link": "http:\/\/tenki.jp\/",
				"name": "日本気象協会"
			}
		],
		"link": "http:\/\/weather.livedoor.com\/",
		"title": "(C) LINE Corporation",
		"image": {
			"width": 118,
			"link": "http:\/\/weather.livedoor.com\/",
			"url": "http:\/\/weather.livedoor.com\/img\/cmn\/livedoor.gif",
			"title": "livedoor 天気情報",
			"height": 26
		}
	},
	"title": "大阪府 大阪 の天気",
	"description": {
		"text": " 近畿地方は、東シナ海に中心を持つ高気圧に覆われて北部や中部では概ね\n晴れていますが、南部では南海上に停滞する前線の影響で雲の広がっている\nところがあります。\n\n 今夜の近畿地方は、高気圧に覆われて概ね晴れるでしょう。\n\n 明日の近畿地方は、高気圧に覆われて昼頃までは晴れますが、その後は気\n圧の谷や上空の寒気の影響で雲が広がりやすく、雨の降るところがある見込\nみです。",
		"publicTime": "2015-05-24T16:33:00+0900"
	}
}



posted by at 2015-05-24 17:13 | Comment(0) | PHP+通信 | このブログの読者になる | 更新情報をチェックする

2013年12月06日

PHP 5.2.0 以上で、サーバー間で FTPS( SSL 接続 )でファイル転送を行う

PHP でセキュアな FTP 操作は、標準では cURL を使うしかありませんが、PHP 5.2.0 である必要があります。

定義済み定数
<?php
header( "Content-Type: text/plain" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

$curl_const = array();

$curl_const[] = CURLOPT_FTP_SSL;
$curl_const[] = CURLFTPSSL_NONE;
$curl_const[] = CURLFTPSSL_TRY;
$curl_const[] = CURLFTPSSL_CONTROL;
$curl_const[] = CURLFTPSSL_ALL;

print_r($curl_const);

?>

上記コードでは以下のような結果で表示されます
Array
(
    [0] => 119
    [1] => 0
    [2] => 1
    [3] => 2
    [4] => 3
)
<?php
header( "Content-Type: text/plain" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

// *********************************************************
// ユーザとパスワード
// *********************************************************
$username = 'ユーザ';
$password = 'パスワード';

// *********************************************************
// 対象ファイル
// ログインディレクトリからの相対位置
// ( SSL のサーバーチェックの為、独自ドメインは使えません )
// *********************************************************
$url = 'lightbox.sakura.ne.jp/www/homepage/download/WinOfSql102.zip';

// *********************************************************
// URL
// *********************************************************
$ftp_server = "ftp://" . $username . ":" . $password . "@" . $url;

// *********************************************************
// 開始
// *********************************************************
$ch = curl_init();

// *********************************************************
// デバッグ用の詳しいメッセージを出力
// *********************************************************
curl_setopt($ch, CURLOPT_VERBOSE, TRUE); 
$fpe = fopen("./debug.txt","w");
curl_setopt($ch, CURLOPT_STDERR, $fpe);

// *********************************************************
// サーバーのパス
// *********************************************************
curl_setopt($ch, CURLOPT_URL, $ftp_server);

// *********************************************************
// SSL である事の明示
// *********************************************************
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_ALL); // SSL for all communication or fail 

// *********************************************************
// SSL に必要なオプション
// *********************************************************
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);	// 2はデフォルト値( 1は7.28.1 以降では使えなくなりました )

// *********************************************************
// ダウンロードされるファイルの保存設定
// *********************************************************
$fp = fopen("./WinOfSql102.zip","w");
curl_setopt($ch, CURLOPT_FILE, $fp);

// *********************************************************
// 実行
// *********************************************************
$result = curl_exec($ch);

// *********************************************************
// 終了
// *********************************************************
curl_close($ch);

// *********************************************************
// 後処理
// *********************************************************
fclose($fp);
fclose($fpe);

if ($data === false) {
	print "cURL failed\n";
}
else {
	print "OK\n";
}

?>

関連する情報

Curl: ftp.c ignores some SSL errors regardless of the curl_ftpssl setting



posted by at 2013-12-06 00:46 | PHP+通信 | このブログの読者になる | 更新情報をチェックする

2013年09月23日

abraham さんの twitteroauth の TwitterOAuth クラスのメソッド一覧概要

❶ oAuthRequest($url, $method, $parameters)
   最も核となる、実行メソッド

❷ http($url, $method, $postfields = NULL)
   内部メソッドですが、Http 通信を受け持つメソッド
   改造するならここを変更する事になると思います。

❸ get($url, $parameters = array())
❹ post($url, $parameters = array())
❺ delete($url, $parameters = array())
   いずれも、oAuthRequest のラッパーなので特に必要ありません

❻ getRequestToken($oauth_callback)
   アクセストークンを取得する為の最初のプロセスの実行
   次に認証ページを呼び出す為に与えるパラメータが取得できます

❼ getAuthorizeURL($token, $sign_in_with_twitter = TRUE)
   認証ページの完全 URL を取得します( API 的には二通りあります )

❽ getAccessToken($oauth_verifier)
   API が、Callback で指定した URL に戻って来るので、そこから呼び出すメソッド
   この結果、『アクセストークン』が取得できます

❾ getXAuthToken($username, $password)
   あまり推奨できません。ユーザ名とパスワードを直接渡してアクセストークンを取得します
   ( テストはしていません )

❿ getHeader($ch, $header)
   ❷ 内から呼ばれる、curl 用のコールバック。必要ありません


https://github.com/abraham/twitteroauth

※ ❻ ❼ ❽ を使う場合は、セッションを使用してデータの保存が必要です。





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

2013年09月21日

abraham さんの twitteroauth で Twitter 投稿

SkyDrive へ移動




twitteroauth のライブラリと 自作のコードも同梱されています。

twitter_post3.php
<?php
session_start();
require_once('twitteroauth/twitteroauth.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" );

$_SESSION['twitter_keys'] = $_POST['keys'];

$_POST['keys'] = str_replace("\r","",$_POST['keys']);
$_POST['keys'] = str_replace("\n","",$_POST['keys']);
$twitter_keys = explode(",", $_POST['keys'] );

$result = twitter_update(
		$twitter_keys[0],
		$twitter_keys[1],
		$twitter_keys[2],
		$twitter_keys[3],
		$_POST['tpost']
);

$_SESSION['consumer_key'] = $twitter_keys[0];
$_SESSION['consumer_secret'] = $twitter_keys[1];
$_SESSION['access_token'] = $twitter_keys[2];
$_SESSION['access_token_secret'] = $twitter_keys[3];

print "<a href='twitter3.php?tpost=" . urlencode($_POST['tpost']) . "'>戻る</a>";
print "<pre>";
print_r(json_decode($result));
print "</pre>";

// *************************************************************************
// twitteroauth による処理
// *************************************************************************
function twitter_update( $apikey, $secret, $token, $token_secret, $text ) {

	$oauth = new TwitterOAuth(
		$apikey,
		$secret,
		$token,
		$token_secret
	);

	$parameters = array( 'status' => $text );
 
	$result = $oauth->oAuthRequest(
		'https://api.twitter.com/1.1/statuses/update.json',
		'POST',
		$parameters
	);

	return $result;

}
?>


twitter3.php
<?php
session_start();

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" );

?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link type="text/css" rel="stylesheet" href="client/style.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script src="client/jquery.balloon.min.js"></script>
<script>

$(function() {
	$('#twitter_keys').balloon(
		{
			position: "right",
			tipSize: 20,
			css: {
				opacity: "1",
				color: "#000",
				fontSize: "16px",
				borderRadius: "10px",
				border: "solid 2px #A63814",
				padding: "10px"
			},
			contents: 'この中に、カンマを区切りにして入力して下さい<br><br>'+
				'一度投稿すると、セッションに保存されて、下部の赤枠内に表示されます<br>'
		}
	);
});

function check() {
}
</script>
</head>
<body>
<span style="color:#ff0000;font-weight:bold;"><?= $_GET['err'] ?></span>

<h2>Twitter 投稿</h2>
<pre>
<form
	action="twitter_post3.php"
	method="post"
	onsubmit="return check();"
>	このページでは、<a href="http://matome.naver.jp/odai/2135675108939679601" target="_blank">Consumer key,Consumer secret,Access token,Access token secret</a> を使って Twitter へ投稿します

	<textarea name ="tpost" cols="100" rows="6"><?= $_GET['tpost'] ?></textarea>
	<input type="submit" 
		name="submit" 
		value="投稿"
	>

	※ Consumer key,Consumer secret,Access token,Access token secret
	<textarea name ="keys" cols="100" rows="5" id="twitter_keys"><?= $_SESSION['twitter_keys'] ?></textarea>

</form></pre>

<hr>

※ $_SESSION
<pre style='clear:left;font-size:20px;padding:20px;border:solid 2px #DE4600;margin-top:0px;'>
<?php
print_r($_SESSION);
?>
</pre>

</body>
</html>

関連する記事

abraham さんの twitteroauth のライセンスは、MIT ライセンスと同文


posted by at 2013-09-21 05:08 | PHP+通信 | このブログの読者になる | 更新情報をチェックする

abraham さんの twitteroauth のライセンスは、MIT ライセンスと同文

相変わらず、ライセンスの世界は『日本人にとって』難解・・・・

GPLやMITやCCなど主要ライセンスの内容と意味のまとめ

この中で説明されている MIT ライセンスは以下のようなもの
再配布時には著作権表示を残す+無保障である、という2点のみが、このライセンスを持つものの使用許諾条件です。
数あるライセンスのうちでも、最も自由で解りやすいライセンスだと認識していますが、世界の常識ではわざわざ MIT とは表示しなくなっているのかもしれません。 License/MIT License 上記リンク先では、わりと正式っぽく詳しく説明されていますが、例えば jQuery にしても、ファイル名にこそ MIT とありますが、本文には記述がありません。 そうすると、きっと、どこからか誤解だって生まれているんでしようけれど、もともとフリーだしそれを厳密にどうこうする流れも無いでしょうし。で、abraham さんの twitteroauth では、こんな感じに。
Copyright (c) 2009 Abraham Williams - http://abrah.am - abraham@abrah.am
 
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
 
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
あと、Json.NET もこんな感じでした。
Copyright (c) 2007 James Newton-King

Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software
without restriction, including without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be included in all copies
or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
というか、みんな自由に使って欲しい事を望んでるのは間違い無いですね。 Json.NET の実装記事VS(C#) : Json.NET を使用して文字列形式の JSON をプログラムで参照する具体的な方法VS2010 コンソール : Twitter ツイートとリツイート 関連する記事 abraham さんの twitteroauth で Twitter 投稿
posted by at 2013-09-21 04:09 | PHP+通信 | このブログの読者になる | 更新情報をチェックする

2009年05月06日

PHPからのメール送信

Pear を使うと複雑な処理が可能になりますが、通常WEBアプリケーションの
機能として簡単に実装できるログや連絡機能としてはそこまで必要ありません。

PEAR でメール送信

PHP の、mb_send_mail 関数は、サーバーで sendmail が使えるレンタル
サーバーでは最も簡単にメールを送る手段になりますが、少しだけ技術的な
要素もあります。また、windows 環境では、COM(Basp21) という選択肢
が最も簡単です( CDO は環境によって最近使えなくなる事があります )

で、以下利用サンプルです。

PHP : メール送信(unix)
PHP : メール送信(windows+basp21)


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

2009年04月13日

PHPによるFTPサーバーのデータ一括ダウンロード

もう1年半も前に作ったスクリプトですが、学生にサイト管理を教えるならば、
当然最初に考え無いといけないのが「バックアップ」ですし。
少し手直ししてダウンロードできるようにしました。




元々業務用に作ったもので、2年間毎日夜中に相当長い時間頑張ってるスクリプトです。
そっちは、サーバが windows ですけど。


さて。

銀行等行って来て帰って来ました。
Gmail では、

ダウンロード対象ファイル数 : 15760
1:.htaccess
.
.
15759:dspdata/wmi/090408153915.grp/090408153948
15760:dspdata/wmi/090408153915.grp/title.txt
実際のファイルダウンロード数 : 6195
な感じでメッセージが、コマンドプロンプトでは、最後の行に
実際のファイルダウンロード数 : 6195
2009/04/13 14:04:48 >>> 処理が終了しました
エラーがあった場合は、メール側ですが、特に何も無く終わってました

 



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

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

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

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

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


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

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

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

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

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


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX