【MENU】
【xrea.com+PHPでフォルダを自動的に作成したときの所有者問題(1)】
◆概要
※PHPでスクリプト上からフォルダやファイルを作成した場合--mkdir等---所有者がapasheになってしまい、それ以降、PHPによるそのフォルダ操作ができなくなる。
※PHPによるフォルダ所有者の変更 chown関数の使用はできない。
※レンタルサーバー[xrea.com]セキュリティによる独自の問題
(解決方法)
※PHPファイルをcgiとして実行すれば、ユーザー権限で実行され、作成したフォルダの所有者はユーザー名になる。
http://sb.xrea.com/showthread.php?t=10744
※しかし、話はそれほど単純ではないのである。
※以下、フォルダ・ファイル構成例によって考え方を記述する。
◆フォルダ構成例(以下[]はフォルダ名)
─┬index.php
│
├[folder_php]
│
└[folder_cgi]
├login.php(ログイン用)
├mkfol.php(フォルダ作成用)
└.htaccess(問題解決のため追加するファイル)
※login.phpでパスワードを入力してmkfol.phpにアクセスする。
※login.phpでsession_start()し、そのセッションデータをmkfol.phpで使用。もし直接mlfol.phpにアクセスしても強制的にlogin.phpに遷移されるようにしている。
◆問題発生(1)
※[folder_cgi]に(解決方法)の記述により.htaccessを置き、mkfol.phpがcgiとして実行されるようにした。
※login.phpからmkfol.phpにアクセスすると、session_start()のラインでエラーが発生し実行不能となる。
[PHP Error!!]
Warning: session_start() [function.session-start]: open(/tmp/〜〜) failed: Permission denied (13)
※これはlogin.phpとmkfol.phpでsessionが異なることによる「権限」のエラーかと思われる(専門的な用語はよく判らないのでご勘弁)。
※そのため、login.phpも同様にcgiとして実行する必要がある。
◆.htaccessの設置
※[folder_cgi]に以下のような.htaccessを置く。
[.htaccess]
<Files login.php>
AddHandler application/x-httpd-phpcgi .php
</Files>
<Files mkfol.php.php>
AddHandler application/x-httpd-phpcgi .php
</Files>
◆問題解決
※これによって、mkfol.phpでmkdir()により作成したフォルダの所有者はユーザー名となり、その後、そのフォルダへのアクセス制限はない。問題解決。
◆新たな問題発生
※まだ、これで問題はすべて解決せず。新たな問題が発生した。
※その2に続く
(DataID:000068)
【xrea.com+PHPでフォルダを自動的に作成したときの所有者問題(1)】
◆概要
※PHPでスクリプト上からフォルダやファイルを作成した場合--mkdir等---所有者がapasheになってしまい、それ以降、PHPによるそのフォルダ操作ができなくなる。
※PHPによるフォルダ所有者の変更 chown関数の使用はできない。
※レンタルサーバー[xrea.com]セキュリティによる独自の問題
※その1の解説のようにmkfol.phpでmkdir()により作成したフォルダの所有者はユーザー名となり、その後、そのフォルダへのアクセス制限はない。問題解決。
◆フォルダ構成例(以下[]はフォルダ名)
─┬index.php---
│
├[folder_php]---ファイル省略(一部でsession使用)
│
└[folder_cgi]
├login.php(ログイン用)
├mkfol.php(フォルダ作成用)
└.htaccess(問題解決のため追加するファイル)
◆新たな問題発生
※[folder_php]でsessionを使用した後、index.phpに戻り、login.phpにアクスすると、sessionの権限のエラーが発生して実行不能に。逆に、login.php でログアウトした後、index.phpに戻り、[folder_php]のsession使用ファイルにアクセスすると、同じエラーとなる。
◆問題への対処【重要】
※複数のファイルでsession管理し、そこからsessionを抜けるときに、必ずセッションの廃棄・セッション破壊しておかなければならない。セキュリティ上からも当たり前の話なのだが。
※sessionを抜けるときに、javascript等で別のファイルに遷移したらsessionを抜けたことにならない。一度、submitしてサーバーにアクセスし、以下を実行した上で、別のファイルに遷移すること。
[PHP--submit]の例
session_start();
$Sousa= $_POST['txtSousa'];
//submit前にフォームtxtSousaに「他ページに遷移」を記述
if($Sousa=="他ページに遷移"){
//セッション破壊
$_SESSION=array(); //セッション変数破棄
session_destroy(); //セッション破棄
//他ページに遷移
$strPage="
http://www.〜〜〜";
header("HTTP/1.1 401 Moved Permanently");
header("Location:$strPage");
}
◆すべてのsessionのページで上記をチェックしました。
(DataID:000069)
[xrea]でmySQLを用いてサイト運営していたが、今回、[coreserver]に引っ越すことにした。htmlやphp等のファイルは簡単にお引っ越しができたが(phpは一部修正が必要なものがあったが、これば別題)、問題はSQL。[xrea]ではmySql4だが[coreserver]はmySql5。バージョンが上がっている。mySql4では文字コードをEUCにしていたが、なにやらmySQLではninicode(UTF-8)とshift-JISしかない(^^;;)。これが原因なのか、普通にお引っ越しをすると、字化けしてなんともならない。悪戦苦闘の末、たどりついたのが下記。問題がすべて解決したわけでなく、理由も全く理解できないのだが、とにかく字化けだけは修正された。
■[xrea](mySQL4)側でデータベースのエクスポート
(1)データベースのトップページからPhpMyAdminのお引っ越しするDBにログイン
(2)「エクスポート」タブを選択
(3)左側のエクスポートするファイルを全選択。
(4)エクスポートの形式は「SQL」
(5)「構造」の「DROP TABLEを追加」にチェック
(6)「ファイルを保存する」をチェック(圧縮なし)
(7)その下の「エンコーディングに変換する」は「non」にチェック
(8)「実行する」ボタンをクリック
(9)「データベース名.sql」というファイルをローカルPCに保存
■[coreserver](mySQL5)側でデータベースを作成
(1)データベーストップページで、新たにDBを作成。
(2)ユーザー名とログインパスワードを入力。文字コードを「unicode」に設定して「作成」ボタンをクリック。
■[coreserver](mySQL5)側で作成したデータベースにデータをインポート
(1)データベースのトップページからPhpMyAdminの新たに作成したDBにログイン。DBを選択すると「このデータベースにはテーブルがありません」と表示される。
(2)「操作」タブを選択し「照合順序」を「latin_general_ci」に設定して「実行する」ボタンをクリック。
(3)「インポート」タブを選択。
(4)「インポートするファイル」で[xrea]側でエクスポートしたファイルのパスを指定。
(5)「ファイルの文字セット」を「latin1」に設定。
(6)「インポートするファイル形式」を「MYSQL4.0」に設定。
(7)「エンコーディングに変換する」は「non」。
(8)「実行する」ボタンをクリック。
(9)「インポートは正常終了しました。」と表示されて左側にテーブルの一覧が表示されれはお引っ越しは終了。
■大問題!!
(1)ホームページ側でデータを表示するは正常だが、PhpMyAdminでテーブルのデータを表示すると、完全に字化けしている。データベースへのデータの入出力はすべてウェブページから実行しているし、これを解決するのはなかなか大変そうなので、いまのところはそのままにしておく。
(2)引っ越した先で新たにデータベースを作成する場合は、全く違うDBを新規に作ることにしよう。
(DataID:000098)
【お知らせ】
◆SEO対策を考慮して、マイスクリプトのトップページを全面的に改訂し、すべての記事の表題を一覧表示するようにしました。カテゴリーでの絞り込み・検索機能の活用等で、必要な記事を探して下さい。(2008/05)
◆yahoo/googleから検索語句によってサーチしてアクセスされた場合、その検索語句に該当するテキストに背景色をつける機能を付加しました。サーチエンジンの検索語句の構造によってはうまく機能しないこともあります。(2008/05)
【お詫び】
現在、よく使うスクリプトを優先的に記載しているので、ASP/vbscriptやExcel/VBA等の記事が少なくなっています。今後、少しづつ充実します。
【お願い】
本サイトに記述しているスクリプト等は、必ずご自分で理解した上でご使用下さい。パソコン環境等によっては機能しないとこもあります。
間違い・勘違い等があった場合は、ご一報頂ければ幸いです。
【リンクについて】
リンクフリーですが、リンクして頂くページは
http://www.dblpar.com/myscript/myscript_index.php
のみに限定させて頂きます。
(DataID:000094)
※これは「【MyScript】専用閲覧ウィンドウ」(ファイル名:myscript.php)についての説明書きです。
※トップページの閲覧方法ではありませんのでご注意下さい。
【初期状態】
最初は、左側のメニューには、記事のメニュー(アイウエオ順)が先頭から50ケ、右側にはメニュー表示された記事の一覧が表示されます。
【カテゴリ検索】
画面上部に、allから始まるチェックボックスが並んでいます。これらのカテゴリーを選択してメニューを絞り込むことが可能です。同じ記事でも複数のカテゴリーで表示されることがあります。
【メニュー選択】
(1)メニュー はメニューは記事がカテゴリ毎にグループ化され(カテゴリallの場合)、表題アイウエオ順に並んでいます。[前選択ボタン][後選択ボタン]が使用可能な場合は、それぞれ前と後ろのデータを50ケづつメニューに表示します。
(2)閲覧したい記事のメニューをクリックすると、右側の枠内に記事が表示されます。
(3)メニューをドラッグして複数選択が可能です。 但し30ケ以内。
【複数メニュー選択】
(1)[複数選択チェックボックス]にチェックを入れると、複数のメニュー選択が可能になります(3ケ以内)。
(2)インターネットエクスプローラでは[Ctrl]ボタンを押しながらクリックします。選択後[選択終了ボタン](りんごマーク)をクリックして下さい。
【キャンセルボタン】
(1)表示している記事を消去するには[キャンセルボタン](チューリップマーク)をクリックして下さい。
【記事を別ウィンドウに表示する】
(1)枠内に表示している記事を別のウィンドウに表示する場合は[別ウィンドウに表示ボタン](いちごマーク)をクリックして下さい。記事を印刷する場合等に便利です。
【キーワード検索】
(1)キーワード検索の枠内にキーワードを入力して「キーワード検索ボタン」(もみじマーク)をクリックして下さい。該当する記事をすべて表示します。
AND検索---aaa bbb ccc (キーワードを半角空白でつなぐ)
OR検索 ---aaa,bbb,ccc (キーワードを半角カンマでつなぐ)
(2)キーワードは空白も含めて5文字以上100文字以内です。
(3)キーワードには半角の<>”&'(←全角で表示)は入力できません。
(4)ひとつのキーワードの長さは30文字以内です。
(5)キーワードには記事No(6桁の数値)検索が可能です。
(6)リンク文字を構成するアルファベットをキーワードとした場合、リンクは無効になります。
(7)検索した記事数が30を超えると、再度の絞り込みが要求されます。
(DataID:000010)
※これは【MyScript】トップページ(ファイル名:myscript_index.php)についての説明書きです。
【初期状態】
(1)マイスクリプト・お勧め・サンプルの3つのエリアから構成されています。
(2)マイスクリプトのエリアには、登録されているすべての記事のメニュー(カテゴリー順・アイウエオ順)が一覧表示されています。
【カテゴリ検索とカテゴリ別ファイル】
(1) 画面上部に、allから始まるチェックボックスが並んでいます。これらのカテゴリーを選択してメニューを絞り込むことが可能です。同じ記事でも複数のカテゴリーで表示されることがあります。
(2)カテゴリ指定がall以外のとき、枠内の一番上にカテゴリ名が表示されますが、カテゴリ名をクリックすると、カテゴリ別のhtmlファイルが別ウィンウドウに表示されます。
(3)カテゴリ別htmlファイルには、そのカテゴリの記事が20ケづつ記載されています。
【メニュー選択】
(1)トップページ「スクリプト一覧」の枠内の各記事のリンク文字をクリックすると、別ウィンドウに記事の内容が表示されます。
(2)ひとつのウィンドウを開いたまま、別の記事を開くことができます。
【キーワード検索】
(1)キーワード検索の枠内にキーワードを入力して「キーワード検索ボタン」(もみじマーク)をクリックして下さい。表題・内容で該当する記事をすべて別ウィンドウに表示します。
AND検索---aaa bbb ccc (キーワードを半角空白でつなぐ)
OR検索 ---aaa,bbb,ccc (キーワードを半角カンマでつなぐ)
(2)キーワードは空白も含めて5文字以上100文字以内です。
(3)キーワードには半角の<>”&'(←全角で表示)は入力できません。
(4)ひとつのキーワードの長さは30文字以内です。
(5)キーワードには記事No(6桁の数値)検索が可能です。
(6)リンク文字を構成するアルファベットをキーワードとした場合、リンクは無効になります。
(7)検索した記事数が30を超えると、再度の絞り込みが要求されます。
【指定語句に背景色をつける】 (◆注意を参照)
(1)キーワード検索の枠内にキーワードを入力して「キーワード選択ボタン」(リンゴマーク)をクリックして下さい。トップページの指定した語句に背景色を付けます。
(2)複数の語句を指定するときは、半角空白でつなげて下さい。
(3)背景色指定をキャンセルするときは、キーワード検索の枠内を空白のままリンゴマークをクリックして下さい。
【検索エンジンからのアクセスについて】(◆注意を参照)
(1)検索エンジンからアクセスしたとき、検索に使用した語句がページ内にあるった場合、その語句の背景色が表示されます。
(2)yahoo及びgoogle限定。場合によっては、うまく機能しないことがありますのでご了承下さい。
(3)もし、枠内にエラーが表示されているときは、clrボタンをクリックして表示をキャンセルして下さい。
◆注意!!!
※本文では、文章内にHTMLのタグを含んでいますので、指定語句がHTMLタグ内に使用されているときは、メニューが正常に表示されない等の可能性があります。
javascript,a,/a,href,a href,li,/li,
onmouseover,onmouseout,this
その他タグ内に使用されている文字
※メニューが正常に表示されない場合は、clrボタンをクリックして表示をキャンセルし、語句を指定し直して下さい。
(DataID:000093)
【検索エンジンからアクセスしてきたとき検索語句を取得する(SEO対策技)】
◆概要
※特定の検察エンジン(yahoo/google)から複数の検索語句によってページにアクセスしてきたとき、その検索語句を取得する。
※検索語句に該当するテキトスの背景を変える等に応用すれば、アクセスしたひとが判りやすくなる。
※検索エンジンの$_SERVER['HTTP_REFERER']の構造がまだよく判らないので、本記事はあくまで参考に留めて下さい。
◆$_SERVER['HTTP_REFERER']の構造例(http:を全角文字で記述)
※yahooの場合
http://search.yahoo.co.jp/search?p=PHP MYSQL バインド&search_x...
※googleの場合
http://www.google.com/search?client=safari&rls=ja-jp&q=テキストフィールド 文字位置...
◆PHP tips
//URLエンコード・HTML特殊文字エスケープ・SJISエンコード
$HtPef=htmlspecialchars(urldecode($_SERVER['HTTP_REFERER']));
$HtPef=mb_convert_encoding($HttpPeferer,"SJIS",auto);
$SeoName="";
$SearchWord="";
if(strpos($HtPef,"yahoo")>=1){
$SeoName="yahoo";
//最初のp=以降を取得
$SWord3=strstr($HtPef,"p=");
//3文字目から最初の&の前まで)
$SWord2=substr($SWord3,2,strpos($SWord3,"&")-2);
}else if(strpos($HtPef,"google")>=1){
$SeoName="google";
//最初のq=以降を取得
$SWord3=strstr($HtPef,"q=");
//3文字目から最初の&の前まで)
$SWord2=substr($SWord3,2,strpos($SWord3,"&")-2);
}
//全角空白→半角空白に変換
$SWord2=str_replace(" "," ",$SWord2);
//前後の半角空白削除
$SWord2=trim(" ",$SWord2);
//配列変換
$SearchWord=explode(" ",$SWord2);
◆メモ(1)
※SJISエンコードはページをSJISで作成している場合に実行。
※全角空白→半角空白に変換する必要があるのはyahooの場合。
※trim()→配列変換前の文字列の前後に半角空白があるとあとの処理でエラーになることがある
※配列変換→語句の配列の区切り文字は「半角空白」としている。
◆メモ(2)
※【MyScript】のトップページに適用している。
※「文字列に含まれる特定の語句の背景色を変える」と組み合わせている。
(DataID:000092)