【PHP】質問スレッドpart27【php】

このエントリーをはてなブックマークに追加
677nobodyさん:2005/04/11(月) 16:47:47 ID:???
$db = pg_connect(dbname);
if (pg_connection_status($db) == PGSQL_CONNECTION_OK) {
echo "DB Connetcion status is OK!";
}
else {
echo "DB Connection status ERROR";
}

$sql = 'select * from tablename';
$result = pg_query($db, $sql);

で、結果が

Connection status is OK!
Warning: pg_query(): supplied argument is not a valid PostgreSQL link resource in filename.php on line 10

となってしまうのは、何が原因なんでしょう??
postmaster は動いていますし、一瞬検索ができた時もありました・・・・・
PHPは事象の再現性がヘンな時が多々ありますが、「そういうもの」なんでしょうか?
678nobodyさん:2005/04/11(月) 21:57:46 ID:???
数値が入った二つの変数を、足すのではなく繋げる方法はありませんか?
例えば
$int1 = 5; バイナリデータで101
$int2 = 10; バイナリデータで1010
この$int1と$int2をくっつけて、1011010というデータを持った変数を作りたいのです。
679nobodyさん:2005/04/11(月) 22:21:08 ID:d8tTZrxp
一番後ろの字が「1」でなければ「←合格」を付け足すような流れにするつもりで
以下の文を書いたのですがうまくいきません。

$text = preg_replace("^(1$)", "←合格", $text);

鈴木1
佐藤
田中
山本1

↓スクリプト実行

鈴木
佐藤←合格
田中←合格
山本

このような結果を出すためにはどのように書き換えたらよいでしょうか?
680nobodyさん:2005/04/11(月) 22:45:48 ID:???
>>678
そういう値が欲しいのなら素直にシフトさせてandを取る。
二進数表現の文字列が欲しいのならsprintf("%b%b",,)

>>679
ハット記号はその場合否定じゃなくって行頭になる
多分こんな感じかな
preg_replace('/([^1])$/', '¥1<-合格', $text)
681nobodyさん:2005/04/11(月) 23:45:32 ID:???
PHP4.3.11の内蔵GDってbundled (2.0.28 compatible) になってるけど、

GD Graphics Library "gdImageCreateFromPngCtx()" Integer Overflow
Software: GD Graphics Library 2.x
Update to version 2.0.32 or later.
http://secunia.com/advisories/12996/


これに対応してるのかな?
682668:2005/04/12(火) 00:12:58 ID:???
>>672
返信ありがとうございます。
Xreaのサポート掲示板に問い合わせたところ、
GIDチェックモードは無理でしたが、PerlのCGIで
何とか解決しました。
683nobodyさん:2005/04/12(火) 01:25:26 ID:???
$str = aaaaaaa;

preg_match("/[\x20-\x7E\xA1-\xA5\xDE-\xDF]{50,}?/", $str)
└OK
mb_regex_encoding("SJIS");
mb_ereg("[\x20-\x7E\xA1-\xA5\xDE-\xDF]{50,}", $str)
└OK(?つけてもOK)
mb_ereg("[\x20-\x7E\xA1-\xA5\xDE-\xDF]{50,}", $str)
└mb_ereg(): mbregex compile err: premature end of regular expression
mb_ereg("^[0-9a-zA-Z_\.\-]+@[0-9a-zA-Z\.\-]+\.[0-9a-zA-Z]+$",$str)
└OK
ereg("[\x20-\x7E\xA1-\xA5\xDE-\xDF]{50,}?", $str)
└ereg(): REG_BADRPT
ereg("[\x20-\x7E\xA1-\xA5\xDE-\xDF]{50,}", $str)
└OK
お聞きしたいことがあります、
・eregの最短指定"?"の有無
・mb_eregのエンコーディング指定によってエラーが起こらないもの
そもそもエラーが起こらないものの違い
684nobodyさん:2005/04/12(火) 02:16:01 ID:???
HTML_QuickFormで
$name[] = &HTML_QuickForm::createElement('text', '姓', null, '姓');
$name[] = &HTML_QuickForm::createElement('text', '名', null, '名');
$form->addGroup($name, 'name', '名前', ' ');
こんな感じでテキストフィールドの前にラベル付けたいんだけど、
できなかった毛?
685nobodyさん:2005/04/12(火) 06:51:49 ID:???
>>684
$renderer = & $form->defaultRenderer();
$renderer->setGroupElementTemplate('{label} {element}', 'name');
てな感じで可能かと。
group.phpのtoHTML()の中で、上と同様の処理があって そこで{element}だけにしているので
elementのラベルが消えてるんじゃないかなぁ。あんまり自信ないけど。
686nobodyさん:2005/04/12(火) 09:55:50 ID:???
アンケートを作ってみました
<FORM ACTION="http://www.example.com/example.php" METHOD=POST>
氏名:<INPUT TYPE=TEXT NAME="name"><BR>
メールアドレス:<INPUT TYPE=TEXT NAME="email" ISTYLE=3> <BR>
<BR>
選択<BR>
<SELECT NAME="test">
<OPTION VALUE="a">A
 
<OPTION VALUE="b">B
 
<OPTION VALUE="c">C
 
</SELECT><BR>
<BR>
テスト<BR>
<TEXTAREA NAME="impression"  rows=" COLS=10 5"></TEXTAREA><BR>
<BR>
テスト<BR>
<INPUT TYPE=RADIO NAME="test1" VALUE="a">A<BR>
<INPUT TYPE=RADIO NAME="test1" VALUE="b>B<BR>
<INPUT TYPE=RADIO NAME="test1" VALUE="c">C<BR>
<INPUT TYPE=RADIO NAME="test1" VALUE="d">D<BR>
<BR>
<INPUT TYPE=SUBMIT NAME="submit" VALUE="送信" id="submit"> <INPUT TYPE=RESET VALUE="やり直し"><BR>
<BR>
<BR>
</FORM>
内容を一度確認して送信するようにするには、どうすればよろしいですか?
687nobodyさん:2005/04/12(火) 10:24:19 ID:???
688nobodyさん:2005/04/12(火) 11:42:38 ID:???
Ruby 界隈で Ruby on Rails が話題になっているけど、
PHP でも欲しくね?もうある?
689nobodyさん:2005/04/12(火) 11:51:03 ID:???
必要と感じないので自分で作ろうとは思わない。
使いたくなったらRubyを使えばいいだけだし。
690nobodyさん:2005/04/12(火) 17:41:03 ID:???
携帯の各機種ごとに分かれて位置情報を習得したいのですが
どうすればよいでしょうか?
思いつきません・・・
691nobodyさん:2005/04/12(火) 18:13:56 ID:???
>>690
習得するなら、一生懸命勉強せよ。

取得したいなら、各キャリアごとに情報を収集せよ。

692nobodyさん:2005/04/12(火) 20:28:41 ID:???
>>685さんどうも。
もれHTML_QuickForm_Renderer_Object使ってるから、
そのソメッド使えんみたいだわ。
QuickFormやめて、Flexyおんりーにするぽ。
693nobodyさん:2005/04/12(火) 20:44:35 ID:???
すいません、
perlの正規表現ではカッコで括ったところがマッチすると、
$1,$2という変数に格納してくれるという便利な機能がありますけど、
phpで似たようなことは出来ますでしょうか。

具体的には

2005/04/09(金),01時12分00秒,ほげほげ

という形のデータを

[01:12:00],ほげほげ

という、時刻とテキストだけの形に直したいんですが…。
自分ではカンマでsplitして、substrで何回かに分けて時、分、秒の変数を作って
後でそれをくっつけるという処理しか思いつきません。

どなたか簡潔な方法を知っていらしたらよろしくお願いします。
694nobodyさん:2005/04/12(火) 20:52:21 ID:???
preg_match
695nobodyさん:2005/04/12(火) 21:22:42 ID:???
\\1 〜 \\9
696nobodyさん:2005/04/12(火) 21:23:32 ID:???
あ、eregの話ね。
697nobodyさん:2005/04/12(火) 23:22:24 ID:???
>>695
$hoge=ereg_replace("([0-9]{2})時([0-9]{2})分([0-9]{2})秒", "[(\\1):(\\2):(\\3)]", $hoge);

みたいにしたんですが無理でした。
なんでだろ…。
698697:2005/04/12(火) 23:24:47 ID:???
あ、できました、ありがとうございます。
699nobodyさん:2005/04/12(火) 23:46:47 ID:???
pg_insertで、複数行同時追加ってできますか?
700697:2005/04/12(火) 23:47:03 ID:???
ああ、この\\1とかってperlの$1とかみたいに変数じゃないから次の行まで値を保持したりできないんですね…。
701nobodyさん:2005/04/13(水) 00:31:58 ID:???
つ print_r($hoge);
702nobodyさん:2005/04/13(水) 01:11:49 ID:???
おいおまいら!
漏れはセッション使用するときに
session_cache_limiter('none');
こうやって設定しているんだが、これはセキュリティーホールになりますか。
703nobodyさん:2005/04/13(水) 01:42:35 ID:???
例えば掲示板のプログラムで記事投稿フォームを作る時、
フォームから投稿内容を受け取り記事追加処理をするphpファイルを新たに作るか、
それとも外部ファイルに記事追加処理関数を書いてその関数を呼び出す形を取るか、
どちらがいいと思いますか?あるいは他にもっといい方法がありますか?
704nobodyさん:2005/04/13(水) 02:02:01 ID:???
自分が書きやすい方で。
705nobodyさん:2005/04/13(水) 02:11:31 ID:???
関数には引数に応じて処理を分ける物があるけど、ああいうのって中で普通にswitchとか使ってるの?
もしそうだと、どの処理をする時にもswitch処理が必要になって
それなら最初から関数を分けてしまった方が処理が速そうな気がするんだけど。
706nobodyさん:2005/04/13(水) 02:23:22 ID:???
>>704
レスありがとう。

ファイルにするとユーザーとの通信の手間が入ってくるわけでその点が余計な負荷になる。
外部ファイルの関数にすると、もしかしてその関数を使わない場合でもメモリに外部ファイルがロードされてしまうのかと思うと
フォームを開いただけで投稿処理をしなかった場合に無駄になる。

単純に書きやすい方で選ぶというだけでは無い選択肢だと思うんだが。
707nobodyさん:2005/04/13(水) 03:28:56 ID:???
>>705
関数が増えると関数を特定する処理に選択肢が増え(ry
ていうかそれくらいのこと、処理速度にはほとんど影響ないだろ
気にするな

>>706
おまえもその程度の負荷は気にするな
708nobodyさん:2005/04/13(水) 07:42:50 ID:???
>>703

関数を呼び出す手前で require_once() する。

ユーザーとの通信の手間って何のこと?
709nobodyさん:2005/04/13(水) 07:54:01 ID:???
>>706
いいぞ ベイべー!
負荷をかけるやつは普通のプログラムだ!!
負荷をかけないやつは何もしないプログラムだ!!
ホント 戦場は地獄だぜ! フゥハハハーハァー
710nobodyさん:2005/04/13(水) 09:06:20 ID:???
>>705
処理の多くが他のユーザー定義関数と「かぶる」場合、「かぶらない」部分だけ
switch〜caseなんかで分岐させれば、コードを短くできる。また「かぶる」部分
に何らかの修正が必要となった場合、関数1つなら1つ修正すればいいだけだが、
関数を分けていれば全部を修正しないといけない。

>>706もだけど、処理スピードなんて気にする暇あったら、もっと他に考えなけ
ればいけない事があるんではないの?と俺は思った。

>>706
そこまで気にするなら、投稿処理の時だけ該当ファイルをrequireすればいい。
CPUやメモリの負荷率見れるなら見てみ。
全く気にする必要のないレベルに間違いない。
711nobodyさん:2005/04/13(水) 13:42:08 ID:y+S//+Zc
初心者でスマソ。
phpでブラウザのjavascriptがonになっているかどうかは、確認できるの?
712nobodyさん:2005/04/13(水) 14:01:22 ID:???
>>711
JavaScript(の適当な命令)がphpを呼び出せればJavaScriptを使える
(少なくとも呼び出しに使ったJavaScriptの命令が使える)、つー方針でなら可能かと。
オイラはそんな面倒なことをしたくないので、ブラウザ側でJavaScript利用可・不可のチェックをさせるけど。
713nobodyさん:2005/04/13(水) 15:50:16 ID:???
それっぽいスレは別に有るみたいですが、そこまで専門的な内容では無さそうな故、
こちらのスレで質問させて頂きたく思います。どうか宣しくお願い致します。

自分は今現在、趣味の範囲と見様見真似で「見た目が 2ch 型」のソレらしい掲示板を
自力で作り、一通りの動作確認を終えて、ソースコードの整理をしているところなのですが、
自分の思い付きで書いたコードが今一つしっくり来ないと言うか、もっとスマートな書き方が
出来ないものかと少し悩んでいます。

実際に真似をし始めて初めて知った 2ch 型掲示板特有?の妙なレス番指定方法
(/l50 とか /-50 とか) の文字列に対応させる為、

preg_match("/^(\d+)$|^l(\d+)(n)?.*$|^(\d+)(n)?-$|^-(\d+)(n)?$|^(\d+)(n)?-(\d+)(n)?$/",$string,$result);

という様な正規表現を指定し、$string 中に有るレス番指定文字を $result に取り込んだ
後、配列 $result の個数とその中身によって処理を分岐させる様な事をしています。

これらをもっとスマートに書こうとしたら、一体どの様にすれば宣しいのでしょうか?
714nobodyさん:2005/04/13(水) 16:55:06 ID:???
>>713
スマートって言うのがどういうのかわからない
1行で済ませるのがスマートだったら全然駄目だけど
昔のクエリ方式と互換性も足せるために
$st = $to = 0;
$nofirst = '';
$ls = 0;
if ($_SERVER['PATH_INFO']) {
$pairs = explode('/',$_SERVER['PATH_INFO']);
$bbs = $pairs[1];
$key = $pairs[2];
if ($pairs[3]) {
if (strstr($pairs[3], 'n')) {
$nofirst = 'true';
$pairs[3] = str_replace("n","",$pairs[3]);
}
if (substr($pairs[3], 0, 1) == 'l') {
$ls = substr($pairs[3],1);
}
elseif (strstr($pairs[3], '-')) {
list($st, $to) = explode('-',$pairs[3]);
if (!$st) $st = 1;
}
else {
$st = $pairs[3];
$to = $pairs[3];
$nofirst = 'true';
}
}
}
715nobodyさん:2005/04/14(木) 00:11:49 ID:???
すいません、あるutf-8のcsvファイルを開いて同形式のデータの置換作業をしてるんですが、
頭から置換の「^」を使って行頭から置換していると、
なぜかファイルの先頭の最初の一行だけマッチしません。

何かファイルの先端を示す不可視文字のようなものがくっついてるんでしょうか。
出来ましたら対処方法など教えて頂けたらうれしいです。
よろしくお願いします。
716nobodyさん:2005/04/14(木) 00:21:43 ID:???
BOMが付いているんだろう。
http://www.atmarkit.co.jp/aig/01xml/bom.html
http://e-words.jp/w/BOM.html
http://www.wdic.org/?word=BOM+:WDIC
http://www.birdport.jp/Others/unicode/
先頭3バイトを無視すればいい。
でも、UTF-8はBOMが付いていないことが多いから
単に3バイト無視すると悲劇が起こる予感。
717nobodyさん:2005/04/14(木) 00:40:13 ID:???
>>716
ああ、ややこしそうですね。
とりあえずデータの形は全部一緒なので、
あまり意味のない保険かけずに
「^」の先頭マッチは外しておきます。

ありがとうございます
718nobodyさん:2005/04/14(木) 01:02:17 ID:???
session_cache_limiter('none'); にすると
レスポンスヘッダー
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
がなくなります。このときに、コンテンツはプロキシ、クライアントに
キャッシュされるのでしょうか。
719713:2005/04/14(木) 01:31:56 ID:???
>>714
自分としては、その辺の処理を正規表現で実現しているのかと思い込んでいたの
ですが、実際にはそんなに難しくない文字列操作関数だけでも十分なのですね。。
具体的な例を示して頂けた事も有って、その仕組みが良く理解出来ました。後は、
自分で組んでいるコードに合う形に直した上で拝借させて頂きたいと思います。

素早い返答を頂きながらも、こんな時間になるまでレス出来ず、申し訳有りません
でした。そして、ありがとうございました。
720nobodyさん:2005/04/14(木) 07:53:17 ID:???
>>718
see RFC 2616.
post-check pre-checkはIE専用の拡張でMSDNに説明があったかと。
721711:2005/04/14(木) 11:23:50 ID:???
>>712
ありがとうございます
722nobodyさん:2005/04/14(木) 12:49:56 ID:ai8mxHPm
質問させてください。

最近になりApache2.0.52 + PHP5.0.2 + MySQL4.0

と言う構成にアップグレードしたのですが、CMS関係のPHPアプリケーションがインストールできなくなりました

特にphpMyAdminでは下記のようなエラーが表示されます

  [1.20] 「cannot load MySQL extension, please check PHP Configuration(MySQL エクステンションをロードできません。PHP の設定をチェックしてください)」というエラーが出ます。
      PHP が MySQL サーバに接続する際には「MySQL エクステンション」という MySQL の関数セットを必要とします。
      このエクステンションは PHP の配布ファイルに含まれている(コンパイルで組み込まれている)こともありますが、そうでない場合、動的にロードする必要があります。
      エクステンション名はたぶん mysql.so か php_mysql.dll のはずですが、phpMyAdmin はこのエクステンションをロードしようとして失敗しているわけです。
      ふつう、この問題は「PHP-MySQL」とかなんとかという名前のソフトウェアパッケージをインストールすれば解決します。

php_mysql.dll は C:/WINNT/php.ini ファイルにて確かに指定しているため原因が掴めません。

   extension_dir = "C:\php\ext"
   extension=php_mysql.dll 

Apache の再起動時にこのようなエラーが表示されます。

   PHP Startup: Unable to load dynamic library 'C:\php\ext\php_mysql.dll' - 指定されたモジュールが見つかりません。


どうかご助力お願いします。
723nobodyさん:2005/04/14(木) 13:06:16 ID:???
>>722
「指定されたモジュールが見つかりません。」
声を出して読んでみて!。

php_mysql.dllを検索してディレクトリを探し、そのディレクトリを
extension_dirにセットする。

窓ではディレクトリではなくフォルダか。

それにそんな事で悩んでいるようではtsファイルの移動も怪しいな。

Windowsで悩む奴の気がしれん・・・。
724nobodyさん:2005/04/14(木) 13:40:26 ID:???
>>722
libmysql.dllをWindowsのシステムフォルダにコピーせよ
725722:2005/04/14(木) 13:42:31 ID:ai8mxHPm
>>723

レスありがとうございます。

php_mysql.dll はc:/php/ext/php_mysql.dll にあります。

   extension_dir = "C:\php\ext"
   extension=php_mysql.dll 

それで上記のように指定し C:/WINNT/php.ini に設定しました。
しかし動作してくれません、/と\を変えても効果なしでした。
tsファイルは C:/WINNT/system32/php5ts.dll にあります。

httpdやその他の設定などは、手元の教本と下のウェブを参考にしました。

http://okweb.jp/kotaeru.php3?q=945621&rev=1
726722
>>722

libmysql.dll 移動で動きました、ありがとうございました。