SQLの窓

2014年09月27日


PHP : htmlentities : テキストエリアによるテキスト処理

テキストエリアで長いソースコード等を入力して保存する場合、読み込んで表示する時のみ htmlentities 変換してから TEXTAREA 要素で挟む必要があります。

変換結果の確認は、Google Chrome のコンソールで 『$("body > form > table > tbody > tr:nth-child(2) > td:nth-child(2) > textarea").innerHTML』です
<?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" );

// POST メソッドで送信された時のみ処理する
// ( URL から呼び出された場合は処理しない )
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

	if ( $_POST['send'] == '読み出し' ) {
		$text = @file_get_contents("./text.data");
		$text = htmlentities( $text, ENT_NOQUOTES, "utf-8" );
	}
	if ( $_POST['send'] == '書き込み' ) {
		file_put_contents("./text.data", $_POST['text'] );
		$text = htmlentities( $_POST['text'], ENT_NOQUOTES, "utf-8" );
	}

}

?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>HTML雛形</title>
<style type="text/css">
* {
	font-family: "メイリオ","MS Pゴシック";
	font-size: 16px;
}
.column {
	border-style:solid;
	border-width:1px;
	border-color:#000000;
	padding: 4px;
}
</style>

<script type="text/javascript">
function submitForm() {
	if ( !confirm( "Submit ボタンで送信しますか?" ) ) {
		return false;
	}
	return true;
}
</script>

</head>
<body>

<form
	name="frm"
	method="post"
	action=""
	onsubmit='return submitForm();'
>
<table
	border=1
	style='
		border-collapse:collapse;
		border-style:solid;
		border-width:1px;
		border-color:#000000;
	'
>

<tr>
	<td class="column" colspan=2>
	<input
		type="submit"
		name="send"
		value="読み出し"
	>
	<input
		type="submit"
		name="send"
		value="書き込み"
	>
	</td>
</tr>

<tr>
	<td class="column">テキストエリア</td>
	<td class="column">
<textarea
	name="text"
	cols="60"
	rows="15"
><?= $text ?></textarea>
	</td>
</tr>

</table>
</form>


</body>
</html>





タグ:PHP htmlentities
posted by lightbox at 2014-09-27 16:20 | PHP + WEBアプリ | このブログの読者になる | 更新情報をチェックする

PHP : 入力値のデバッグ

ソースコードの最下部に追加すれば良いと思います。
<?php
print "<pre>";
print_r($_GET);
print_r($_POST);
print "</pre>";
?>

デバッグする文字列に HTML が含まれている場合は、以下のようにするといいと思います。
<?php
foreach( $_POST as $key => $value ) {
	$_mypost[$key] = htmlentities( $value, ENT_NOQUOTES, "utf-8" );
}
print "<pre>";
print_r($_mypost);
print "</pre>";
?>



タグ:PHP
posted by lightbox at 2014-09-27 16:20 | PHP + WEBアプリ | このブログの読者になる | 更新情報をチェックする

2014年09月26日


PHP : 曲線が使い物にならない GD ライブラリ / Canvas の楕円と比較

単純な画像加工ならば、フォントも普通に使えるますし、レンタルサーバーでも普通に実装されているので利用しやすいですが、曲線が美しく無いので、最近ではブラウザ側の canvas を使ったほうがいいでしょう。





▼ 四角形
<?php
header("Content-type: image/png");
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "pragma: no-cache" );
header( "Cache-control: no-cache" );

// ******************************
// キャンバス作成( 300 x 300 )
// ******************************
$im = imagecreatetruecolor( 300, 300 );
imageantialias( $im, true );	// アンチエイリアス

// ******************************
// 色
// ******************************
$gray = imagecolorallocate( $im, 0xC0, 0xC0, 0xC0 );
$black = imagecolorallocate( $im, 0, 0, 0 );
$white = imagecolorallocate( $im, 255, 255, 255 );

// キャンバスを灰色で塗りつぶす
imagefilledrectangle ( $im ,0, 0, 300, 300, $gray );

// ******************************
// 線幅
// ******************************
imagesetthickness ( $im, 4 );

// ******************************
// BOX
// ******************************
imagerectangle( $im, 50, 50, 250, 250, $black );

// ******************************
// BOX内部塗りつぶし
// ******************************
imagefilltoborder ( $im , (50+250)/2, (50+250)/2, $black, $white );

// ******************************
// PNG 出力
// ******************************
imagepng($im);

// ******************************
// 終了処理
// ******************************
imagecolordeallocate( $im, $black );
imagecolordeallocate( $im, $white );
imagedestroy($im);

?>


▼ 楕円
<?php
header("Content-type: image/png");
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "pragma: no-cache" );
header( "Cache-control: no-cache" );

// ******************************
// キャンバス作成( 300 x 300 )
// ******************************
$im = imagecreatetruecolor( 300, 300 );
imageantialias( $im, true );	// アンチエイリアス

// ******************************
// 色
// ******************************
$gray = imagecolorallocate( $im, 0xC0, 0xC0, 0xC0 );
$black = imagecolorallocate( $im, 0, 0, 0 );
$white = imagecolorallocate( $im, 255, 255, 255 );

// キャンバスを灰色で塗りつぶす
imagefilledrectangle ( $im ,0, 0, 300, 300, $gray );

// ******************************
// 線幅
// ******************************
imagesetthickness ( $im, 4 );

// ******************************
// 楕円
// ******************************
imagefilledarc( $im, 150, 150, 200, 180, 0, 360, $black, IMG_ARC_NOFILL );

// ******************************
// 塗りつぶし
// ******************************
imagefilltoborder ( $im , 150, 150, $black, $white );

// ******************************
// PNG 出力
// ******************************
imagepng($im);

// ******************************
// 終了処理
// ******************************
imagecolordeallocate( $im, $black );
imagecolordeallocate( $im, $white );
imagedestroy($im);

?>

imagefilledarc は、円弧、塗りつぶしと全てまかなえるので使っています

関連する記事

PHP : 曲線が必要ならば ImageMagick ( 但し使えるかどうかはサーバー次第 )

canvas で楕円

<style type="text/css">
#circle {
	border: solid 1px #000000;
}
</style>
<canvas id="circle"></canvas>
<script type="text/javascript">
	var canvas = document.getElementById("circle");
	canvas.width = 400;
	canvas.height = 330;
	var draw = canvas.getContext("2d");

	draw.beginPath();
	draw.fillStyle = "#c0c0c0";
	
	draw.save();
	draw.scale( 1, 0.8 );
	draw.arc(200, 200, 150, 0, Math.PI*2, false);
	draw.fill();
	draw.restore();

	draw.lineWidth = 3;
	draw.stroke();
</script>



posted by lightbox at 2014-09-26 21:28 | PHP + WEBアプリ | このブログの読者になる | 更新情報をチェックする

2013年11月23日


PHP : 曲線が必要ならば ImageMagick ( 但し使えるかどうかはサーバー次第 )



GD と比べてはるかに美しい曲線を描画できます。

さくらインターネットでは、php.ini に extension=imagick.so を追加
するだけで使用できるようになります

▼ 楕円( クリックすると拡大して、もう一度クリックすると戻ります )
<?
header("Content-type: image/png");
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "pragma: no-cache" );
header( "Cache-control: no-cache" );

$canvas = new Imagick(); 
$canvas->newImage(300, 300, "#C0C0C0"); 

$draw = new ImagickDraw(); 
$draw->setFillColor("#FFFFFF"); 
$draw->setStrokeColor( "#000000" ); 
$draw->setStrokeWidth(4); 
$draw->arc( 50, 60, 250, 240, 0, 360 ); 

$canvas->drawImage($draw); 

// フォーマット
$canvas->setImageFormat('png'); 

// 出力
print $canvas; 
?>


▼ 四角形( クリックすると拡大して、もう一度クリックすると戻ります )
<?
header("Content-type: image/png");
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "pragma: no-cache" );
header( "Cache-control: no-cache" );

$canvas = new Imagick(); 
$canvas->newImage(300, 300, "#C0C0C0"); 

$draw = new ImagickDraw(); 
$draw->setFillColor("#FFFFFF"); 
$draw->setStrokeColor( "#000000" ); 
$draw->setStrokeWidth(4); 
$draw->rectangle( 50, 50, 250, 250 );

$canvas->drawImage($draw); 

// フォーマット
$canvas->setImageFormat('png'); 

// 出力
print $canvas; 
?>

関連する記事

ImageMagickをWindowsのPHPで利用する


PHP : 曲線が使い物にならない GD ライブラリ


さくらインターネットでは、PHP で extension=imagick.so するだけで
ImageMagick が使えます


マニュアル

画像処理 [ImageMagick] : php オンラインマニュアル



posted by lightbox at 2013-11-23 02:04 | PHP + WEBアプリ | このブログの読者になる | 更新情報をチェックする

2013年09月22日


Twitter API 汎用テスター

Twitter API 汎用テスター


SkyDrive へ移動
twitteroauth.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_api(
		$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='twitter_api.php?tpost=" . urlencode($_POST['tpost']) . "'>戻る</a>";
print "<pre>";
print_r(json_decode($result));
print "</pre>";

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

	$param = explode("\r\n", $text);

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

	$imax = count( $param );
	$parameters = array();
	for( $i = 2; $i < $imax; $i++ ) {
		$data = explode("=", $param[$i]);
		if ( $data[0] != '' ) {
			$parameters[$data[0]] = $data[1];
		}
	}
 
	$result = $oauth->oAuthRequest(
		$param[1],
		$param[0],
		$parameters
	);

	return $result;

}
?>

GET users/show
GET
https://api.twitter.com/1.1/users/show.json
screen_name=sworc
GET search/tweets
GET
https://api.twitter.com/1.1/search/tweets.json
q=進撃の巨人
count=30
POST statuses/retweet/:id ( リツイート / id は詳細ページの URL の最後の番号 )
POST
https://api.twitter.com/1.1/statuses/retweet/381781849153884160.json
posted by lightbox at 2013-09-22 23:07 | PHP + WEBアプリ | このブログの読者になる | 更新情報をチェックする

2011年07月03日


PHP : Google のURL短縮APIを呼び出す関数

json文字列が取得できるので、JavaScript に以下のようにセットすると使えます。
<?
$ret = googleShorten("目的のURL");
$ret = str_replace( "\n", "", $ret );
$ret = str_replace( "'", "\\'", $ret );
?>
<script type="text/javascript">
var shorten = eval("(" + '<?=$ret?>' + ")" );
</script>
function googleShorten( $url ) {

	// *********************************************************
	// curl 処理
	// *********************************************************
	$curl = curl_init();
	// *********************************************************
	// https 用
	// *********************************************************
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);

	curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
	curl_setopt($curl, CURLOPT_HEADER, false);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
	$api_url = "https://www.googleapis.com/urlshortener/v1/url";
	$api_url .= "?key=ここにAPIs Consoleで取得したキーをセット";
	curl_setopt($curl, CURLOPT_URL, $api_url );
	curl_setopt($curl, CURLOPT_POST, 1);
	curl_setopt($curl, CURLOPT_POSTFIELDS, "{\"longUrl\": \"{$url}\"}" );

	$header = array();
	$header[] = 'Content-Type: application/json';
	curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
//	$handle = fopen("./header.txt", "w");
//	curl_setopt($curl, CURLOPT_WRITEHEADER, $handle);

	$result = curl_exec($curl);
	curl_close($curl);

	return( $result );

}

APIs Console

▼ APIs Console です


▼ APIキーの取得です


▼実際に 正しいAPIキーで呼ばれているかどうかは、これで確認します



Google のURL短縮 API の簡単な実装例
Google URL Shortener API



posted by lightbox at 2011-07-03 18:18 | PHP + WEBアプリ | このブログの読者になる | 更新情報をチェックする
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 ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり