【wordpress】特定のカテゴリのみ404エラーになる

まず結論。
カテゴリ名と同じ名前のファイルがルートディレクトリにあると、404エラーの原因になる。なので、そういう構成は避ける。

wordpressで作ったブログのサーバーを引越しした際、「PHP」というカテゴリのページだけ404エラーが起きるようになった。他のカテゴリ、「mysql」「JQUERY」「network」なんかは問題ないのに・・・。

原因は独自ドメインのルートディレクトリ(wordpressのindex.phpと同じフォルダ)に「php.cgi」が存在していたため。

パーマリンク設定をカスタムの「/%category%/%post_id%/」としていたが、これが「php.cgi」のファイル名とかぶるため誤作動?しているらしい。

「php.cgi」ファイルをフォルダから削除することで解決。

【UWSC】同じタイトルで同じクラス名のウインドウを区別する

UWSCでIEを自動操作していたら下記のような場面に遭遇。

名前を付けて保存ダイアログ

手前の「名前を付けて保存」ダイアログの「はい」を押したい。

これまでなら、

CLKITEM(GETID("名前を付けて保存","#32770"),"はい", CLK_LEFTCLK)

などと記述すればよかったのだが今回はうまくいかない。
理由は「名前を付けて保存」というタイトルで2つのダイアログが出ているため。

そこで区別するコードを作った。

//サンプルコード
/////////////////////////////////////////////////////////////

// 全てのウインドウIDをゲット(ALL_WIN_ID[]変数に入る)
for i = 0 to GETALLWIN()-1

//「名前を付けて保存」のダイアログであるなら、
ifb (STATUS(ALL_WIN_ID[i], ST_CLASS) = "#32770") AND (STATUS(ALL_WIN_ID[i], ST_title) = "名前を付けて保存")

//ウインドウ内のテキストを取得。取得ができたらなら、
ifb 0 < GETITEM(ALL_WIN_ID[i],ITM_ACCTXT)

//取得したテキストに「上書きしますか」の文言があるか。あればクリック。GETITEMで取得した情報は配列変数 ALL_ITEM_LIST[] に格納される。
/////////////
ifb 0 < POS("上書きしますか",ALL_ITEM_LIST[0]) //目当ての文字列はALL_ITEM_LIST[0]にある
CLKITEM(GETID("名前を付けて保存","#32770"),"はい", CLK_LEFTCLK)
endif
/////////////

endif

endif
next
/////////////////////////////////////////////////////////////

UWSCでダイアログのボタンを押す

スクリプトでIEを操作中、次のようなエラーダイアログが出た

error_dialog

「OK」ボタンを押すだけのサンプルコード

CLKITEM(GETID("Windows Internet Explorer","#32770"),"OK", CLK_ACC or CLK_MUSMOVE)

ちなみに、#32770はダイアログのクラス名

UWSCで配列を全て展開して出力する

DIM array[] = "すいか","いちご","れもん" //配列

//LENGTHで配列の数を確認し、その分だけ展開させる。
//要素数は「0」から始まるので、LENGTHの結果から-1する。
FOR i = 0 TO (LENGTH(array) - 1)
PRINT array[i]
NEXT

UWSCで改行コードをすべて削除や置換する方法

//改行を全て削除する
moji = REPLACE(moji, "<#CR>", "")

これで改行ができない場合は、CR(キャリッジリターン)とLF(ラインフィード)を指定して削除する。次のコードを追加。

moji = REPLACE(moji, chr(13), "" ) //CRを削除
moji = REPLACE(moji, chr(10), "" ) //LFを削除

PHPでファイルをダウンロードする方法

PHPでファイルをダウンロードするサンプルコードです。
例として、mp3ファイルをダウンロードします

ケース1 サーバーにダウンロードする

------------------------------------------

<?php

// ダウンロード元のファイルパス(絶対パス、ファイル名まで含む)を指定する
$url = 'http://example.com/voice/voice.mp3';

$data = file_get_contents($url);

file_put_contents('./download/hozon.mp3',$data); //ファイルの保存先

?>

------------------------------------------

ケース2 PCにダウンロードする

------------------------------------------

<?php

// ダウンロード元のファイルパス(絶対パス、ファイル名まで含む)を指定する
$fullpath = 'http://example.com/voice/voice.mp3';

// 保存時のファイル名を設定
$filename = 'hozon.mp3';

// HTTPヘッダ送信。ローカルPCに保存するためのダイアログが出る。
header("Content-type: audio/mpeg"); //mp3の場合。ファイルの種類によって適宜変更
header("Content-Disposition: attachment; filename=$filename");
// ファイルを読み込んで出力します。
readfile($fullpath);
?>

------------------------------------------

wordpressの再インストールで表示されなくなったときにしたこと

wordpressで運用しているブログがスパムメールの踏み台にされていると発覚。さくらインターネットからもどうにかしろとメールをいただき、wordpressの再構築を行った。

その際につまずいたポイントを覚え書き。

別サーバーにwordpressをインストールして、エクスポートしておいたmysqlデータを新wordpressのデータベースにインポートした。「これで元通りになるだろう」ってところまで進みいざ、URLにアクセスするが表示されず。「500 Internal Server Error」や真っ白画面になった。

--------原因1--------
テーブル接頭辞「wp_」が一致していなかった。

wordpressインストール時に決めた、テーブル接頭辞が元のwordpressと違っていた。一致させるために、インポートしたmysqlデータをいじって新しいwordpressのテーブル接頭辞に合わせる。

変更箇所1
「wp_options」テーブルの「○○_user_roles」の○○の部分。

変更箇所2
「wp_usermeta」テーブルの「wp○○_~」の部分。4、5箇所。「meta_key」カラムをテーブル接頭辞で検索するといい。

--------原因2--------
URLの不一致。

最終的に元のURLに戻すのだが、一時的に新旧のwordpressを両立させることにした。その際、新wordpressのURLは仮の物であるが、設定は旧ブログのまま表示がうまくいかなかった。

解決方法は「wp_options」の「url」と「home」の値をデータベースにアクセスして直接変更。
念のため「wp_options」テーブルの「option_value」カラムに検索をかけて旧アドレスで残っているものはないかも確認する。

また、トップページは表示されるが、それ以外のページが表示されない現象が起こった。パーマリンクの設定が問題のようで、設定をデフォルトにしてから、再度設定したら解消した。

【UWSC】エクセルのワークシートの追加と名前の変更

エクセルのワークシートの追加とワークシート名を変更する記述のメモ

-------------------------------------------------
//対象のエクセル
EXCEL = GetActiveOleObj("Excel.Application", "ファイル名.xls")

//ワークシートの追加
EXCEL.activeworkbook.worksheets.add()

//追加したワークシートの名前の変更。
Excel.ActiveSheet.name = ワークシート名

もしくは、

//(1)は左から一番目のワークシート。
EXCEL.activeworkbook.worksheets(1).name = ワークシート名

※既存のワークシート名を指定すると、重複させられないのでCOMエラーになる
-------------------------------------------------

【mysql】正規表現でひらがなだけの文字列を取り出す

全部ひらがなで構成された文字列だけを抜き出そうと、下記のSQLを実行した。

SELECT field1 FROM table1 WHERE field1 REGEXP '^[ぁ-ん]+$'

しかし文字列の中にひらがなの「む」がはいってない文字列だけマッチしなかった。
文字コードの設定によって起こる現象らしい。

そこで次のように変更↓↓↓

SELECT field1 FROM table1 WHERE field1 REGEXP '^[ぁ-んむ]+$'

「む」を付け足して解決。

【UWSC】正規表現、マッチしているかどうかテスト

UWSCで正規表現を使ったマッチしているかどうかのテスト

-------------------------------------------------
re=CreateOleObj("VBScript.RegExp")
re.pattern = ";$" //正規表現のパターン。行末に「;」があればマッチ。
re.Global = True //文字列全体を検索。trueでする(規定)、falseでしない(マッチする文字列が見つかったらそこで終了)。
re.IgnoreCase = True //大文字・小文字を区別。trueでしない(規定)、falseでする。

str = "aaaaa;" //対象の文字列

IFB True = re.Test(str) THEN
PRINT "マッチしている"
ELSE
PRINT "マッチしてない"
ENDIF
-------------------------------------------------