SQLの窓

2023年08月04日


Replit : php-json-syain-sqlite3

https://replit.com/@sworc/php-json-syain-sqlite3



- SQLite3 を使用してデータを PHP の PDO で読み出す > 他の RDBMS への変更が容易
- setting.php に 他の RDBMS で利用時の接続情報を準備
// データベース
$server = "localhost";
$user = "root";
$dbname = "lightbox";
$password = '';
- Ajax で呼び出す事を想定した、header
header( "Access-Control-Allow-Origin: *" );
header( "Content-Type: application/json; charset=utf-8" );

Replit の 呼び出し URL



posted by lightbox at 2023-08-04 15:39 | PHP | このブログの読者になる | 更新情報をチェックする

2020年07月25日


ロリポップのモジュール版 PHP でエラーを出力する方法




実行する PHP の先頭で、『ini_set("display_errors", 1);』を実行して、処理は全て別のファイルに書いて require_once() します。こうする事によって、PHP は以下の例の action1.php 内で発生したエラーに対して error_reporting の設定に基づいてエラーを表示します。
<?php
ini_set("display_errors", 1);

require_once("action1.php");

?>

action1.php のサンプル
<?php
common_action();

$a = 1;

function common_action() {

    error_reporting( E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED );
    session_cache_limiter('nocache');
    session_start();

    header( "Content-Type: text/html; charset=utf-8" );
}


?>
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
<meta charset="utf-8">
<title>メール送信</title>
<head>
<body>
<div>メール送信</div>
</body>
</html>

このソースで、$a = 1; のセミコロンを削除して実行してみると以下のようになるはずです
Parse error: syntax error, unexpected 'function' (T_FUNCTION) in /home/users/1/yourdomain/web/yourapp/path/action1.php on line 6



そして、action1.php を直接実行すると Google Chrome では以下のようになります




では、WordPress の場合はどうするかというと

※ wp-config.php の先頭に 『ini_set("display_errors", 1);』を記述してください



posted by lightbox at 2020-07-25 15:12 | PHP | このブログの読者になる | 更新情報をチェックする

2019年02月28日


PHP : unset によるオブジェクトのプロパティのと配列の要素の削除

unset() は指定した変数を破棄します。その結果オブジェクトではプロパティが削除され、連想配列ではその変数が削除されます

Run code で検証

※ 日本語のプロパティなので、$obj->{"手当"} というように参照します

get_object_vars : 非 static プロパティを連想配列として返します
$format1 = <<<FIELD
{
    "社員コード": "",
    "氏名": "",
    "フリガナ": "",
    "所属": "",
    "性別": "",
    "作成日": "",
    "更新日": "",
    "給与": "",
    "手当": "",
    "管理者": "",
    "生年月日": ""
}
FIELD;

print "\n-----------------------------------";
print "\nJSON文字列\n";
print $format1;

print "\n-----------------------------------";
print "\nオブジェクトに変換したもの\n";

$obj = json_decode($format1);
print_r($obj);

print "\n-----------------------------------";
print "\n『手当』プロパティを削除\n";
unset($obj->{"手当"});

print_r($obj);

print "\n-----------------------------------";
print "\n配列に変換したもの\n";

$array = get_object_vars( $obj );
print_r( $array );

print "\n-----------------------------------";
print "\n配列の要素を削除\n";

unset($array["所属"]);
    
print_r( $array );


実行結果
-----------------------------------
JSON文字列
{
    "社員コード": "",
    "氏名": "",
    "フリガナ": "",
    "所属": "",
    "性別": "",
    "作成日": "",
    "更新日": "",
    "給与": "",
    "手当": "",
    "管理者": "",
    "生年月日": ""
}
-----------------------------------
オブジェクトに変換したもの
stdClass Object
(
    [社員コード] => 
    [氏名] => 
    [フリガナ] => 
    [所属] => 
    [性別] => 
    [作成日] => 
    [更新日] => 
    [給与] => 
    [手当] => 
    [管理者] => 
    [生年月日] => 
)

-----------------------------------
『手当』プロパティを削除
stdClass Object
(
    [社員コード] => 
    [氏名] => 
    [フリガナ] => 
    [所属] => 
    [性別] => 
    [作成日] => 
    [更新日] => 
    [給与] => 
    [管理者] => 
    [生年月日] => 
)

-----------------------------------
配列に変換したもの
Array
(
    [社員コード] => 
    [氏名] => 
    [フリガナ] => 
    [所属] => 
    [性別] => 
    [作成日] => 
    [更新日] => 
    [給与] => 
    [管理者] => 
    [生年月日] => 
)

-----------------------------------
配列の要素を削除
Array
(
    [社員コード] => 
    [氏名] => 
    [フリガナ] => 
    [性別] => 
    [作成日] => 
    [更新日] => 
    [給与] => 
    [管理者] => 
    [生年月日] => 
)




タグ:PHP
posted by lightbox at 2019-02-28 15:59 | PHP | このブログの読者になる | 更新情報をチェックする

2016年05月05日


レンタルサーバで PHP のバージョンを 5.4 から 5.6 に変更する時の注意事項

PHP 5.4 までは default_charset に値が入っていませんでした。しかし、5.6 では default_charset = UTF-8 となるので日本語が化ける可能性がとても多くなります。そこで、php.ini の中に以下のように設定を追加します
default_charset = 

こうすると、PHP 5.4 と同じ no_value 設定になります( phpinfo 関数で確認します )



但し、その php ファイルが参照できる範囲に別の個別の php.ini があると、その設定で全て上書きされるので注意して下さい。



posted by lightbox at 2016-05-05 14:36 | PHP | このブログの読者になる | 更新情報をチェックする

2015年06月25日


【3大手法】 PHP で変数を埋め込んだ画面定義を外部ファイルにして、ループ内で展開する

外部ファイルを読み込む手段としては二つあって、一つは一般的な require で行います。もう一つはテキストファイルとして file_get_contents を使用します。

以下のサンプルソースの実行時の環境としては、データベースに対して接続した後、select 文を実行して行データをループで取得しているという前提です。

require 使った標準的な手法

この方法は PHP のあたりまえの記述で、想定通りの結果になる手法です。ただ、外部ファイルの埋め込み方法の記述も一般的になる為、変数埋め込みの記法が面倒で、画面作成やメンテナンスに時間がかかりますし、他の目的への転用は全くできません。
// 画面作成
print "<table>";
while ($row = $result->fetch_array(MYSQLI_BOTH)) {

	// 行の繰り返し
	require("view_row.php");

}
print "</table>";

<tr>
	<td class="left"><?= $row["社員コード"] ?></td>
	<td class="right"><?= $row["氏名"] ?></td>
</tr>


file_get_contents 使った手法

この方法は、画面定義用の文字列を単純に外部ファイルにして、テキストデータ内の変数を eval を使って置き換える手法です。この場合、変数部分以外も単純な文字列なので、正規表現による置換や単純な置換の対象となりますし、利用方法はいろいろな場面であらわれると思います。( SQL 文の定義にも有効です )

ただ、変数の記述部分のルールとして、連想配列部分の文字列はシングルクォートで書く必要があります
// 画面作成
print "<table>";
while ($row = $result->fetch_array(MYSQLI_BOTH)) {

	// 行の繰り返し
	$view_row = file_get_contents("view_row.txt");
	$view_row = str_replace('"', '\\"', $view_row );
	eval("\$view_row = \"$view_row\";");
	print $view_row;

}
print "</table>";

<tr>
	<td class="left">{$row['社員コード']}</td>
	<td class="right">{$row['氏名']}</td>
</tr>



require の中で、ヒアドキュメントを使う方法

この方法が一番簡単で単純で、本来のヒアドキュメントの目的をしっかり使ったものです。難しい問題は全く無く、自然に使える方法です。

ここでは、print を外に出して使っていますが、view_row.php 内で print してしまってもかまいません。
// 画面作成
print "<table>";
while ($row = $result->fetch_array(MYSQLI_BOTH)) {

	// 行の繰り返し
	require("view_row.php");
	print $view_row;

}
print "</table>";

<?php
$view_row = <<<VIEW_ROW
<tr>
	<td class="left">{$row["社員コード"]}</td>
	<td class="right">{$row["氏名"]}</td>
</tr>
VIEW_ROW;
?>

いずれも関数化する事は可能ですが、テキストを外部に定義して管理するという目的においては、file_get_contents を使う方法が最も優れています。( 画面作成の場合、文字列を取得するだけで後で使うという選択肢のほうが現実的です )

require は、その場で書いてしまう場合において、一般的なメンテナンス性が向上するはずです。

関数化する場合は、埋め込む変数にスーパーグローバルの $GLOBALS を使うといいです。



タグ:PHP
posted by lightbox at 2015-06-25 11:14 | PHP | このブログの読者になる | 更新情報をチェックする

2015年06月23日


PHP で pathinfo と mime 情報やその他を合体した、get_finfo 関数を使って、opendir からファイル一覧を出力

ファイルの一覧から、ファイル情報を配列でまとめたものを一括で取得できるようにしました。

※ Windows では、php.ini の extension=php_fileinfo.dll を有効にする必要があります
<?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" );

print "<pre>";

$target = ".";
print realpath($target) . "\n";

$dir_handle = @opendir($target);
if ( $dir_handle ) {
	// ディレクトリハンドルの取得成功

	while (false !== ($entry = readdir($dir_handle))) {
		// 対象外は読み飛ばし
		if ( $entry == '.' || $entry == '..' ) {
			print  "対象外=>{$entry}\n";
			continue;
		}

		print  "{$entry}\n";
		print_r( get_finfo($target.DIRECTORY_SEPARATOR.$entry) );


	}
}

print "</pre>";

function get_finfo($path) {

	$finfo = finfo_open(FILEINFO_MIME);
	$mime = finfo_file($finfo, $path);
	$mime2 = explode( "; ", $mime );
	$mime3 = explode( "=", $mime2[1] );
	$pathinfo = pathinfo(realpath($path));
	$path_parts = pathinfo($pathinfo["dirname"]);
	$pathinfo["parent"] = $path_parts["basename"];
	$pathinfo["mime"] = $mime2[0];
	$pathinfo["charset"] = $mime3[1];
	if ( $pathinfo["charset"] == "" ) {
		unset($pathinfo["charset"]);
	}
	$pathinfo["size"] = filesize($path);
	if ( $pathinfo["mime"] == "directory" ) {
		unset($pathinfo["size"]);
	}
	$pathinfo["full"] = realpath($path);

	return $pathinfo;

}

?>


▼ 以下は、Windows での実行サンプルです。
C:\user\web\basic
対象外=>.
対象外=>..
db_update
Array
(
    [dirname] => C:\user\web\basic
    [basename] => db_update
    [filename] => db_update
    [parent] => basic
    [mime] => directory
    [full] => C:\user\web\basic\db_update
)
dir_test.php
Array
(
    [dirname] => C:\user\web\basic
    [basename] => dir_test.php
    [extension] => php
    [filename] => dir_test
    [parent] => basic
    [mime] => text/x-php
    [charset] => utf-8
    [size] => 1457
    [full] => C:\user\web\basic\dir_test.php
)
log.zip
Array
(
    [dirname] => C:\user\web\basic
    [basename] => log.zip
    [extension] => zip
    [filename] => log
    [parent] => basic
    [mime] => application/zip
    [charset] => binary
    [size] => 1589
    [full] => C:\user\web\basic\log.zip
)
php.exe
Array
(
    [dirname] => C:\user\web\basic
    [basename] => php.exe
    [extension] => exe
    [filename] => php
    [parent] => basic
    [mime] => application/x-dosexec
    [charset] => binary
    [size] => 59392
    [full] => C:\user\web\basic\php.exe
)
php5.dll
Array
(
    [dirname] => C:\user\web\basic
    [basename] => php5.dll
    [extension] => dll
    [filename] => php5
    [parent] => basic
    [mime] => application/x-dosexec
    [charset] => binary
    [size] => 5949440
    [full] => C:\user\web\basic\php5.dll
)
tool_html_150517214638.htm
Array
(
    [dirname] => C:\user\web\basic
    [basename] => tool_html_150517214638.htm
    [extension] => htm
    [filename] => tool_html_150517214638
    [parent] => basic
    [mime] => text/html
    [charset] => utf-8
    [size] => 603
    [full] => C:\user\web\basic\tool_html_150517214638.htm
)
_img.jpg
Array
(
    [dirname] => C:\user\web\basic
    [basename] => _img.jpg
    [extension] => jpg
    [filename] => _img
    [parent] => basic
    [mime] => image/jpeg
    [charset] => binary
    [size] => 133801
    [full] => C:\user\web\basic\_img.jpg
)





タグ:PHP
posted by lightbox at 2015-06-23 23:12 | 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 終わり