2008年6月アーカイブ

XServer(エックスサーバー)でデータベースを自動でバックアップするには、cronを使います。
cronの設定方法は以下をご参考に。
http://www.xserver.ne.jp/man_program_cron.php

PHPファイルの実行は、以下のように設定します。

CentOS5にXAMPPを入れてみた。インストール手順は以下より。

apache friends - xampp for linux
http://www.apachefriends.org/jp/xampp-linux.html

インストールディレクトリは、/opt/lampp になり、apacheやmysqlもこの配下になります。
サービスの起動は
/opt/lampp/lampp start
自動起動にするには、/etc/rc.d/rc.local に上記起動コマンドを記述します。

ディレクトリトラバーサルとは,「../」のような文字列を使ってWebサーバーのディレクトリをあがり、
非公開ディレクトリにアクセスする手法です。

単純にstr_replace関数で「../」を「''」に置換するのは、対策として不十分です。
対策としては、「../」が見つかったら不正な文字としてエラーにするか、PHPであればbasename()関数を
使用するのが最も簡単だと思います。


PHPの各種設定は、php.iniで行いますが.htaccessファイルでも変更できます。
ただし変更できるものとできない項目があります。
PHPのマニュアルを参照し変更の可否が、「PHP_INI_PERDIR」または「PHP_INI_ALL」と指定されている
もののみ変更することができます。

php.iniディレクティブ
http://www.phppro.jp/phpmanual/php/ini.html

設定の仕方は、「php_value」ディレクティブまたは「php_flag」ディレクティブを使います。
php_value max_execution_time 30

.htaccessを置いたとたんサイトにアクセスすると、Internal Server Errorが発生することがあります。
これは、.htaccessの記述の仕方が間違っている可能性が高いです。記述の仕方に間違いがないか
確認してみましょう。
FireFox3のダウンロードが開始されました。

FireFox3
http://mozilla.jp/

さっそくインストールしてみたところ、アドオンはマウスジェスチャーだけが3.0に対応されていなかったので
別のマウスジェスチャーを入れて無事完了!

FireGestures 1.1.2
https://addons.mozilla.org/ja/firefox/addon/6366

気づいたところでいいなと感じたのは、ブックマークのフォルダが管理画面に入らなくてもドラッグアンドドロップで
移動できるところ。
Gmailの表示が速いところでしょうか。


クロスサイトスクリプティングの(XSS)対策はサニタイジング(データの無害化)になります。
サニタイジングのタイミングはデータ入力時ではなくHTML生成時に行うのが良いです。

PHPでは、htmlspecialchars()を通せばほとんどのXSSは対応できるようです。

PHP: htmlspecialchars - Manual
http://jp.php.net/htmlspecialchars
<?php
htmlspecialchars($_POST["url"], ENT_QUOTES, 'UTF-8');
?>
第二引数には、ENT_QUOTESを入れておけばシングルクオートとダブルクオートが
共に変換されます。

ただし、上記ではまずいケースもあります。
Aタグの中ではJavaScriptが実行可能なので以下のような場合はXSSに対処できません。
<a href="<? echo htmlspecialchars( $_POST['url'] ) ?>">URLリンク</a>
このページに対してPOSTで'url'にjavascript:alert('NG') と入れて送信すると
URLリンクをクリックした際、アラートが表示されます。

実装する場合は、まずGETやPOSTに不正なデータが入っていないかを必ずチェックしてから
エスケープするということをやっておけば、問題ないでしょう。

Apacheを利用していると、URLにファイル名まで入力しないと(例:http://xxx/test/)
ファイルの一覧が表示されてしまうことがあります。
これはセキュリティ上良くないので非表示にしたほうがよいです。

方法は、httpd.confファイルの以下の部分を変更します。
Options Indexes FollowSymLinks
ここを
Options -Indexes FollowSymLinks
このように変更して、apacheを再起動すれば表示されなくなります。

XServer(エックスサーバ)でのMySQLの操作はphpMyAdminを利用することになります。
現在のバージョンは、2.10.0.2 です。

ここではテーブルに外部キーを設定してみます。SQLを流さなくても画面から行うことができます。

まず外部キーを設定するには、各テーブルがInnoDB 型である必要があります。
すでにMyISAM等で作成している場合でも以下の手順で変更できます。

1. 画面左のテーブル一覧から、変更したいテーブルを選択します
2. 画面上メニューの「操作」をクリック
3. テーブルオプションの「ストレージエンジン」を「InnoDB」に変更
4. 変更したら、外部キーを設定したいテーブルを選択します
5. 画面中央辺りにある「リレーションビュー」をクリックします

20081938.png








6. 設定したいテーブルとフィールドが表示されるので選択すれば設定完了です。
  ON DELETEとON UPDATEについては、親テーブルの削除・更新時に子テーブルを
  どのように動作させるかというものです。詳細は以下より。


MySQL 4.1 リファレンスマニュアル :: 7.5.5.2 FOREIGN KEY 制約
http://dev.mysql.com/doc/refman/4.1/ja/innodb-foreign-key-constraints.html



MySQLの基本ですが、すべての文字列比較は、デフォルト設定で大文字と小文字の区別はありません。
ユーザIDをチェックするのに、テーブルには、'AAA'と入っていても、'AAa'でも'aaa'でもマッチすることに
なります。
すべての文字列比較は、デフォルトでは大文字と小文字を区別せず、現在のキャラクタセット照合順序 で決められたソート順で行われます。このキャラクタセット照合順序は、デフォルトではlatin1(cp1252 West European)です。これを変更するには、BINARY属性を指定してカラムを宣言するか、BINARY  キャストを使用して、字句順序よりもキャラクタコード値を使用して比較が行われるようにする必要があります。

MySQL 5.1 リファレンスマニュアル :: 1.8.4 SQL標準に対するMySQL拡張機能
http://dev.mysql.com/doc/refman/5.1/ja/extensions-to-ansi.html

大文字小文字の区別をつけるためには、テーブルのフィールドの「属性」にbinaryを指定します。

Excel(エクセル)のVBAで、フォームのボタンをクリックして印刷プレビューを行うと
なぜかExcelが固まってしまう。(Xp, Excel2000)

回避策として、以下のようにしたらうまくいきました。
1.フォームを隠す
2.印刷プレビュー
3.プレビューの閉じるボタンでフォームを表示
Private Sub CommandButton1_Click()
    Dim ret As Boolean
    'フォームを閉じる
    UserForm1.Hide
    ret = Worksheets("Sheet2").PrintPreview
    '戻り値を判定することで閉じるが押されたかがわかる
    If ret = False Then
        'フォームを表示
        UserForm1.Show
    End If
End Sub

XAMPP1.6.6aをインストールすると、apacheのバージョンは2.2.8となっています。
使用ポートは80のためIISが入っている環境では、どちらかのポートを変更しておく必要があります。
IISのサービスを停止しておけば問題はありませんが。

[ポート変更方法(例:port8080に変更)]
httpd.confをエディタで開いて、Listenと記述されているところを8080に変更します。
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80
Listen 8080
Apacheを再起動します。XAMMPのコントロールパネル→Apacheの停止→開始。
ブラウザから、http://localhost:8080/ にアクセスしてXAMPPの画面が
表示されれば正常に動作しています。

XAMPPの導入

| | トラックバック(0)
PHPの開発環境を構築するため、Windows環境にXAMPPを導入する。
PHP、ApacheからMySQLまで簡単に導入でき、日本語化もされていますのでとても便利です。
XAMPPダウンロードは以下より。(WIndows版)インストーラつきのものが便利でしょう。
XAMPP for Windows
http://www.apachefriends.org/jp/xampp-windows.html

インストールは画面の指示通りに進んでいけば問題ありません。
サービスのインストールは後から変更できます。

インストール完了後、コントロールパネルを起動してここからApacheやMySQLを起動できます。

※Apacheが起動しない
なぜかApacheの開始ボタンをクリックしても起動しませんでした。
イベントログを見ると何やらポートがどうたら・・
管理ツールボタンをクリックすると、http://localhost/ を開きにいってIISのページが開いてました。
IISが起動しているために、Apacheが起動できなかったんですね。
IISのサービスを停止したら、無事Apacheが起動してXAMPPのページが開きました。



XServerのphpMyAdminのパスワードを忘れてしまった。
サーバパネルを見ると、[MySQL設定]→[MySQLユーザの一覧]からパスワードが変更できるではないか!
旧パスワードが不要なので、さくっと変更完了!
これでphpMyAdminも使えるようになりました。

が、よく考えたら(今ごろ・・・)MovableTypeはMySQLを使用している。
接続できないのでは?と思ったら、MTの管理者画面に入れません。。
アホすぎですね。

全く忘れてしまって、configファイルに書いたようなと思ったらありました。
MTのインストールフォルダの直下に、mt-config.cgi というファイルが。
この中のDBPasswordという項目を変更すればOK。
最初からこのファイルをみればよかったんですね。。


XServerのphpでメール送信を行うには、特に必要なものはありません。
以下のように関数コールのみで送信できます。
前回のように文字コードを設定しておくことで文字化けは発生しませんでした。

$to = "phptest@xxxx.com";
$subject = "メールタイトル-TEST MAIL";
$body = "メッセージ(Honbun)";
$header = "From: WebSystem <php_test@xxx.com>";
mb_send_mail($to, $subject, $body, $header);

http://jp.php.net/manual/ja/function.mb-send-mail.php
レンタルサーバのXserver(エックスサーバー)でphpをやってみることに。
初期設定は、HPにまとまっています。

XServerよくある質問
http://www.xserver.ne.jp/faq_service_php.php

とりあえずphp.iniを上記ページからそのままコピーしてトップディレクトリにおいてみる。
パーミッションは、711等に変更します。
テストページ(test.php)を作って、試すと特に問題なく表示されました。

■文字コードをUTF-8に変更してみる

php.iniの以下の箇所をUTF-8にする。
mbstring.http_output = UTF-8
mbstring.internal_encoding = UTF-8

test.phpのファイルをUTF-8形式で保存する。
これで問題なく表示されました。データベースは、デフォルトがEUC-JPのようなので変更しないと
文字化けすると思うのでまた後日やってみます。

MD5やSHA1のハッシュ値を取得するには、名前空間System.Security.Cryptographyの以下のクラスを利用します。
MD5: MD5CryptoServiceProvider クラス
SHA1:SHA1CryptoServiceProvider クラス

Dim str As String = "TEST"
Dim md5 As New MD5CryptoServiceProvider
Dim sha1 As New SHA1CryptoServiceProvider

Dim byteValue() As Byte = Encoding.UTF8.GetBytes(str)
Dim hashValue() As Byte = md5.ComputeHash(byteValue)
Dim result As StringBuilder = New StringBuilder()
Dim b As Byte

For Each b In hashValue
    result.Append(b.ToString("x2"))
Next
MessageBox.Show(result.ToString, "ハッシュ結果", MessageBoxButtons.OK)
MD5CryptoServiceProvider クラス
http://msdn.microsoft.com/ja-jp/library/system.security.cryptography.md5cryptoserviceprovider(VS.80).aspx

SHA1の場合は、
VB.NET(VB2005)アプリからのHttpアクセスを行うには、System.NET名前空間のWebClientクラスを用います。

Sub Main()
    Dim wc As System.Net.WebClient = New System.Net.WebClient()
    Dim st As System.IO.Stream = wc.OpenRead("http://xxxx/test/default.aspx")
    st.Close()
End Sub
WebClient クラス
http://msdn.microsoft.com/ja-jp/library/system.net.webclient(VS.80).aspx
WSH(JavaScript)でHttp送信を行う方法。

//test.js
httpRequest = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
url="http://xxx/aspnet/test.aspx";
httpRequest.Open("GET", url);
httpRequest.Send();
//WScript.Echo(httpRequest.status);

aspxファイルでバッチ処理を行う際にでも使えます。

このアーカイブについて

このページには、2008年6月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2008年5月です。

次のアーカイブは2008年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01