トップページphp
1001コメント324KB

【PHP】下らねぇ質問はここに書き込みやがれpart16

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/02/05(日) 22:35:34ID:sf8bx52D
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

本スレ【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
前スレ【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/

過去スレは>>2
0320nobodyさん2006/02/13(月) 13:54:59ID:???
>>317
正規表現
0321nobodyさん2006/02/13(月) 14:19:56ID:???
>>317
trim($str,".");
0322nobodyさん2006/02/13(月) 14:21:49ID:???
だんだん答えが出てくるのでスレを見てるだけで勉強になる
0323nobodyさん2006/02/13(月) 14:22:23ID:???
>>321
横槍だけど途中に . がある場合は駄目だよね
0324nobodyさん2006/02/13(月) 14:25:53ID:???
>>323

trim -- 文字列の先頭および末尾にある〜

http://php.s3.to/man/function.trim.html
0325nobodyさん2006/02/13(月) 14:33:04ID:???
>>324
あっ、ほんとだ
ゴメソ

便利だな、毎回置換か正規表現使ってたかも・・
0326nobodyさん2006/02/13(月) 15:16:17ID:???
phpとoracleで、
long型のカラムに対して64Kバイト以上の文字列を
バインドしてinsertすると
 ORA-01480: STRバインド値に終了のNULLがありません
とでてしまいます。
php側では普通の変数を使用してstrlenで文字数を取得しても
正しく文字数は取得できています。
これはoracleとphp、どちらが悪いのでしょうか?
また、何が原因なのでしょうか。
ちなみに
 oracle関数【推奨されません】
の関数を使用しています。
0327nobodyさん2006/02/13(月) 15:22:16ID:???
>>318
recentが新着ということで他のimap関数にも敏感に反応してしまうのが原因だったみたいです
seenフラグで管理するようにしたら問題なく動作しました
0328nobodyさん2006/02/13(月) 15:31:00ID:???
test.php?%5B%5B
とすると、一つ目が%5Fになってしまうのですがこれはバグでしょうか?
OSはWinXP ProSP1、鯖はAnHTTPD、PHP5を使ってます。

こちらのサイトではきちんと認識しているようです。
ttp://openoffice.s16.xrea.com:8080/pukiwiki/pukiwiki.php?%5B%5BOOo2.0%A5%D0%A5%B0%BE%F0%CA%F3%5D%5D
0329nobodyさん2006/02/13(月) 15:55:18ID:???
>>328
test.php?%5B%5B
ってのを
test.php?ほげほげ
ってすればいいだけじゃなくて?
0330nobodyさん2006/02/13(月) 16:39:06ID:???
>>328
それ、本スレでも見た気がする。
http://pc8.2ch.net/test/read.cgi/php/1136276300/761-764
なんだろこれ。バグ?
0331nobodyさん2006/02/13(月) 16:42:29ID:???
環境変数一通り出してみて
0332nobodyさん2006/02/13(月) 18:17:35ID:???
どなたかPHP5.1.2でpdo_mysqlが使っておられる方ご教授下さい。
MySQLのバージョンは、4.1.16と5.0.16で試しました(PHPの再インストール)。

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
  $db = new PDO($dsn, $user, $password);
  $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
  var_dump($db->query('SELECT * FROM testtable'));
} catch (PDOException $e) {
  print $e->getMessage();
}

とした時、Connectではエラーが出ていないのに、queryの結果は
falseが返ってきます。どのような正しいSQLでも必ずfalseです。
Connectのエラーを拾えてないのかな?と思い、わざと間違った
hostにすると、エラーは正常にprintされました。
試しに、mysqli関数でConnectし、同様のSQL文を発行すると
期待値が返ってきます。
エラーが出ないのでどうして良いかわかりません・・・。
postgresの方は今の所問題ないのに・・・。
0333nobodyさん2006/02/13(月) 19:00:58ID:???
>>328-330
前スレによると仕様だそうです。
俺はバグだと思うけどな。

971 名前: nobodyさん 2006/02/05(日) 17:52:09 ID:???
既出か分からないけど、
トップーページと入力すると
本来ならば%83g%83b%83v%83y%81[%83WのはずなのにPHPは%83g%83b%83v%83y%81_%83Wと受け取ってしまう。

[となるべく部分が_になってしまう。
[[[とすると_[[と受け取るので最初の[のみ誤認してしまうようです。

これの対処はどのようにすればいいでしょうか?

973 名前: nobodyさん 2006/02/05(日) 18:03:33 ID:???
>>971ですが状況が分かりづらくてすみません
>トップーページと入力すると
というのはURLに入力という意味で
http://.../index.php?トップページ』
としたときです。
このように入力した後 echo key ($GET); とするとトップペ\ジとなります。

それと、環境はPHP5を使用しています。
OSはWindowsXP SP1でAN HTTPDとApacheの両方で同様の誤動作を確認しています。

情報足らずで失礼しました、
引き続き対処の程を教えていただけるようお願いします。

975 名前: nobodyさん 2006/02/05(日) 18:25:21 ID:???
>>973
それで理由が分かったよ。
それ、PHPの仕様。マニュアル嫁。
0334nobodyさん2006/02/13(月) 19:07:47ID:???
改行コードってどうやって使い分ければいいの?
unixで使うスクリプトを作ってるんだけどこの場合はLFにすべき?
0335nobodyさん2006/02/13(月) 19:12:28ID:???
>>326
エラー文どおりNULL文字が最後に入ってないんじゃない?
LONG型のカルマについては無知でスマンけど、
対象の文字を "1234567890\0" のように\0(NUL/NULL文字)で締めてみて。
0336nobodyさん2006/02/13(月) 19:14:03ID:???
>>332
パーミッションなんて事は無いよね?
0337nobodyさん2006/02/13(月) 19:17:43ID:???
>>334
LFでもCR+LFでも大丈夫じゃないかな。
大抵の"\n"は\n|\r|\r\nを自動で読んでくれるはずだろうから、unixで\r\nやっても平気じゃないかな。
PC-UNIXじゃなくてマジもんのunixならLFのがいいだろうけど。
0338nobodyさん2006/02/13(月) 19:30:15ID:???
>>334
CLIスクリプトならLFにすべき。
Webで呼び出すならほとんどの場合はどっちでもいい。
ただし
$string = "aaaa
bbbbb";
とか
$string = <<<TXT
aaaaa
bbbbbb
TXT;
みたいにソースの改行=データの改行みたいな真似してるなら
データの要求に準じるべき。
03393322006/02/13(月) 19:30:53ID:???
>>336
MySQLのユーザのパーミッションということでしょうか?
それなら、mysql関数、mysqli関数で試して期待値が返ってきた
ので問題無いと思っています。
phpinfo()の結果を見ても、POD_MYSQLの項目がきちんと出てきてはいるのですけど・・・。
現状仕方ないのでMDB2を使おうと思ってます。
が、今度はドキュメントがあまり見つからない&英語がわからないので、
浅い使い方しかわからず困ってしまいました(苦笑
0340nobodyさん2006/02/13(月) 19:50:29ID:5OEO9gPe
文字列の先頭から指定文字数だけ取り出す場合、どのようにすればいいでしょ?
やっぱり正規表現でpreg_splitでしょうか?
ばかなので正規表現書けませんでした。
レンサバがphp4なので、str_splitは無しの方向でお願いします。
0341nobodyさん2006/02/13(月) 19:54:34ID:???
substr
0342nobodyさん2006/02/13(月) 20:03:13ID:???
>>340
文字ってことはマルチバイトの考慮もいるの?
0343nobodyさん2006/02/13(月) 20:48:20ID:???
>>340
マルチバイト文字列関数
http://www.php.net/manual/ja/ref.mbstring.php
文字列関数
http://jp.php.net/manual/ja/ref.strings.php

マニュアルくらい見る癖をつけると、
後々役に立ちますよ
0344nobodyさん2006/02/13(月) 21:05:56ID:???
>>341-343
嗚呼、有難うございます。
0345nobodyさん2006/02/13(月) 21:43:36ID:???
>>339
期待値が返って来たって事は少なくともreadは許可になってるんだろうけどwriteは許可されてるのかな。
他のサーバーでは失敗(というかあんにょい感じ)するか試して見た?

ためしにDebianか、HDDに入れるの面倒ならKNOPPIX(CD-Linux)で自鯖立てて試して見るといいかも。
これらはapt-getで簡単にmysqlなどなど入れられるので便利。

調べてみたら、初めからMySQL/PHPが使えるように設定してあるKNOPPIXもあるようです。
http://pcweb.mycom.co.jp/column/yetanother/010/
0346nobodyさん2006/02/13(月) 21:46:03ID:???
>>340
正規表現なら"/.{10}/"だな、試してないけど。
0347nobodyさん2006/02/13(月) 21:49:37ID:???
>>346
"/^(.{10})/"かな。別に"/^(..........)/"でも構わんと思うけどね。
0348nobodyさん2006/02/13(月) 22:03:01ID:???
..........とかワラタw
10個から20個にする時とか画面を眺めながら.を打ち続ける様を想像して更にワラタ
0349nobodyさん2006/02/13(月) 22:17:53ID:???
0を0.00のように小数点第二位まで表示させたい場合は
どうすればいいでしょうか?
0350nobodyさん2006/02/13(月) 22:24:49ID:???
>>349
printf("%.2f", 0);
0351nobodyさん2006/02/13(月) 22:57:25ID:1JhTlLn3
勉強がてら、PHP4+MySQLでちょっとしたサイトを制作してみて、
データの書込み、表示などの一通りの動きは出来るようになりました。

次に、環境設定(1ページに何件表示等)もweb上で出来るようにと考えているのですが、
現段階ではPHPファイルに
 $bbs_Cnt = 10; //bbs1ページには10件表示
のように書いていて、
fopenなどでPHPファイル自体を読み込み上書きなどをしようと思ってますが、
通常はどんな風にするものなのでしょうか?
このような値もDBに格納するべきなのでしょうか?
0352nobodyさん2006/02/13(月) 23:14:44ID:???
>>351
DBに格納でもいいでしょうし、
iniファイルを使ってもいいでしょう。

個人的にすきなのはiniファイルですね。
PHPにはparse_ini_file関数が用意されてますし。

あくまで個人的な意見ですけど。
PHPファイル自体を直接読み書きよりは
融通が利くかと思います。
0353nobodyさん2006/02/13(月) 23:18:08ID:???
iniがお勧めだね。
DBもいいね。
PHPを書くのは少々面倒だね。
03543512006/02/13(月) 23:25:07ID:1JhTlLn3
>>352
実は、PHPファイルではなくてiniファイルなのでした|x・`)チラッ
と言っても、中身は<?php......?>て書いてあるので、
PHPファイルなのですが…。

parse_ini_file関数から、iniファイルの扱いについても
ちょっと調べてみまーす。
ありがとうございましたm(__)m
0355nobodyさん2006/02/13(月) 23:28:41ID:???
>>354
標準と全然違うファイル形式の拡張子をつけるのはどうかと…
PHPソース形式にするならせめて.inc辺りにしとけ
0356nobodyさん2006/02/13(月) 23:36:28ID:???
>>355
前々から気になってたんだけど、そのincってどういう意味?
includedってこと?
03573512006/02/13(月) 23:39:28ID:1JhTlLn3
>>355
そっか。
設定ファイルが.iniって言う知識しかなかったもんで(^-^;

そこら辺、初心者にもわかり易く書いてあるサイトとかって
何かありますかい??
0358nobodyさん2006/02/13(月) 23:47:22ID:???
>>357
iniはinitやinitializeの略。
windowsプログラミングしてみるといいかも。
0359nobodyさん2006/02/14(火) 00:41:28ID:???
解説書とかだとよくincにした例が多いけど、
あれはブラウザから中身が見えちゃうから、
見られたくないような場合phpにしたほうがいいよ。
パーミッションいじってもいいけどね。
まぁセキュリティ対策にはならないからどうでもいいっちゃいいんだけど。
0360nobodyさん2006/02/14(火) 00:54:50ID:???
>>356
だな。アセンブラ時代からの由緒正しき拡張子かw
>>359
iniファイルにしろincファイルにしろ設定ファイルをドキュメントルート以下に置く方が悪い。
0361nobodyさん2006/02/14(火) 01:23:29ID:???
.cf(または.cnf)派は、少数派ですか...
0362nobodyさん2006/02/14(火) 01:26:09ID:???
.cfg派も共闘を
0363nobodyさん2006/02/14(火) 01:48:24ID:???
というか、.inc.php使うだろ。
0364nobodyさん2006/02/14(火) 01:51:54ID:???
配列を指定の値で検索して、見つかったらそのキーを削除
って、array_searchしてunsetしかないの?
03653512006/02/14(火) 02:01:36ID:zk1lvDPH
一応、.inc.ini等は、.htaccessで見れないように制限してるけど、
無敵ではない?
0366nobodyさん2006/02/14(火) 02:09:05ID:???
ほんの些細なミスをしちゃうだけで巨大なセキュリティホールを作るような
トラップを自ら掘りまくるような行為は感心しないな。
0367nobodyさん2006/02/14(火) 02:12:11ID:???
>>366
どゆこと?
0368nobodyさん2006/02/14(火) 02:21:11ID:???
>>364
俺はarray_splice()使ってる
0369nobodyさん2006/02/14(火) 02:35:42ID:???
>>367
.htaccessやhttpd.confが間違って上書き、削除されてしまったり、
何ヶ月も経って元々の意図を忘れて別の目的のために設定を変えてしまったり、
Apacheのアップデート時に設定が効かなくなってしまってたりなど、
その程度の隠蔽設定がうっかり消失されてしまうようなケースは多々あり、
またそういうミスをしてる連中が世間にはごまんといるってことだ。
「自分はそんなアホなミスしないから」と思ってるならセキュリティとかは口に出さない方がいいぞ。
0370nobodyさん2006/02/14(火) 07:56:53ID:???
とはいえ実際そんな面倒臭いことをする人間ばかりではない。
以前Livedoorの.incが漏れたときもルートより上ではなかった。
なんというか、仕事を完璧にめざす者と、仕事を徹底的にさぼる者に別れている気がする。

そしてJavaサーブレットを使えばこの問題が簡単に解ける悲しさ。
0371nobodyさん2006/02/14(火) 09:20:26ID:???
完璧めざすっつーか、バグなんかもそうだけど
「ミスしやすいもの」と「しにくいもの」
「やってしまったときに気付きやすいもの」と「しにくいもの」
は確かにあって、その分別は必要だと思うのよね。
0372nobodyさん2006/02/14(火) 10:47:05ID:???
外部のライブラリーなんかを使わずに複数のPDFファイルを1つに結合する方法はないでしょうか?
0373nobodyさん2006/02/14(火) 10:55:43ID:???
>>372
自分でライブラリと同じようなスクリプトを書く
0374nobodyさん2006/02/14(火) 13:28:11ID:???
取得したIPアドレスの、例えば
212.112.227.217

212.112.227.xxx
みたいにするにはどうすればいいでしょうか?
0375nobodyさん2006/02/14(火) 13:39:01ID:???
>>374
正規表現で抽出置換
最後の.より後ろを削除し、xxxを追加
0376nobodyさん2006/02/14(火) 15:18:00ID:???
すんませんスレ違いを承知でちょっと教えてください
Mozilla/5.0 (Windows; U; Win 9x 4.90; ja-JP; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
これってOSなんですか?
0377nobodyさん2006/02/14(火) 15:26:30ID:???
ブラウザだろ
0378nobodyさん2006/02/14(火) 15:36:44ID:???
いあいあ「 (Windows; U; Win 9x 4.90; ja-JP; rv:1.7.10) 」この辺りでOS識別できませんか?
0379nobodyさん2006/02/14(火) 15:37:43ID:???
どうみたってWindows9xです。本当にありがとうございました。
0380nobodyさん2006/02/14(火) 15:38:32ID:???
おまえの質問の日本語が悪い。
「このUAから識別出来るOSって何ですか?」って感じで聞かないと。
「UAも知らないのかプギャー」な馬鹿に見えるぞ。


で、それぐぐれば答えはすぐ出るな。
0381nobodyさん2006/02/14(火) 15:39:20ID:???
本当にエスパーな質問多すぎだな。
Mozillaと先頭に出ててOSですか?
なんてきかれたら、誰でもブラウザと答える罠。
質問するならもっとわかりやすい質問しろ。
0382nobodyさん2006/02/14(火) 15:42:21ID:???
これってOSなにですか?
これってOSなのですか?
0383nobodyさん2006/02/14(火) 16:09:46ID:???
セッションってサーバーに保存するクッキーのような物と思っておけばいいんでしょうか?
0384nobodyさん2006/02/14(火) 16:23:57ID:???
わからないからって煽るのはよせよだからおまいら馬鹿にされるんだよ
0385nobodyさん2006/02/14(火) 16:27:59ID:???
クッキーは期限指定できるけどセッションは1回通信終えたらなくなるよ。
0386nobodyさん2006/02/14(火) 16:32:04ID:???
1回通信終えたら、っていう表現は微妙
0387nobodyさん2006/02/14(火) 16:34:37ID:???
微妙だな
0388nobodyさん2006/02/14(火) 16:58:21ID:???
>>385-387
大体の感じはつかめました
ありがとうございます
0389nobodyさん2006/02/14(火) 18:04:38ID:???
美乳だな
0390nobodyさん2006/02/14(火) 18:11:26ID:???
微乳だな
0391nobodyさん2006/02/14(火) 18:36:47ID:???
賓乳だな
0392nobodyさん2006/02/14(火) 18:44:56ID:???
牛乳だな
0393nobodyさん2006/02/14(火) 18:58:55ID:???
乳牛だな
0394nobodyさんNGNG
マニュアルに
マルチバイト文字列を扱うときは
mbstringモジュールをインストールしないとやばい
みたいなことが書いてあったんですが
いまいちなにがやばいのかわかりません。

具体的にどういうコードを入れると
問題が発生するのですか?
0395nobodyさん2006/02/14(火) 19:50:05ID:???
>>394
マルチバイト文字の入力を受け付けるプログラム
マルチバイト文字で検索を行うプログラム
マルチバイト文字の編集を行うプログラム
のいずれかで文字化けを起こす可能性が高いです。
0396nobodyさんNGNG
>>395
ありがとうございます。
split()とか試してみても問題なく処理されるから
なんでだろーなーと思って質問したんですが、

問題が起きなかった理由は、
どうも文字コードがISO-8859-*, EUC-JP, Shift_JIS
ならmbstringなしでも正常に動作するらしく、
私が試したのはEUC-JP, Shift_JISだけだったからっぽいです。
ということでISO-2022で試してみたら普通にエラーが出ました。
どうもすみませんでした。

EUC-JPで問題が起きないということは、
例えば掲示板などをを作るときに
内部コードとhttpヘッダとフォームタグの文字セットを
全部EUC-JPにすればmbstring無しでも
いけますかね?
0397nobodyさん2006/02/14(火) 21:27:40ID:???
>>396
Shift_JISだって問題になることは多い。
それはsplitで使った分割文字がたまたまShift_JISで問題の出ない文字だっただけだ。
0398nobodyさん2006/02/14(火) 21:28:43ID:???
EUCはその中では比較的問題の出にくいコードではある。
が、全く問題が出ないわけじゃない。
0399nobodyさんNGNG
あ、そうなんですか。
じゃあやっぱりmbstring入れなきゃやばいんですね。
どうもありがとうございました。
0400nobodyさん2006/02/14(火) 21:58:12ID:???
jcode.phpというのもある。
関係ないけど
0401nobodyさん2006/02/14(火) 22:08:05ID:???
自分で意識してマルチバイト対応の正規表現とか書いていけばmbstring無くても対応できるな。
関係ないけど
0402nobodyさん2006/02/14(火) 22:43:05ID:???
そういや%5Bの問題はどうなったんだ?
0403nobodyさん2006/02/14(火) 22:50:35ID:???
>>401
mbstring無しでマルチバイト対応の正規表現ってできるん?
0404nobodyさん2006/02/14(火) 22:59:12ID:???
>>403
使用する文字コードを特定すればできるよ。
mbstringみたいに設定でどれでも自動切換えみたいのはさすがにしんどい。
0405nobodyさん2006/02/14(火) 23:04:33ID:???
あー、もしかして地道に日本語文字をひたすら入力するの?
%x8Cとか
0406nobodyさん2006/02/14(火) 23:18:59ID:???
何をマッチングさせようとしてるんだ?そりゃ
0407nobodyさん2006/02/14(火) 23:20:50ID:???
例えば
/hoge/fuga/hunnu/2test
のような文章から
/hoge/fuga/hunnu(最後の/〜を抜いたもの)
hunnu(最後の/〜の直前の文字列)
2test(最後の/以降の文字列)
を一度に正規表現で抜き出したいのですが、どのようなコーディングをすればいいでしょうか?
"^(/?([a-zA-Z%])*)*([a-zA-Z%]*)"
として挫折しました。
直前に書いた"/^((\/[a-zA-Z]*))*$/"のが抽出率はいいようですが。
よろしくお願いします。
0408nobodyさん2006/02/14(火) 23:26:27ID:???
>>407
basename
dirname
pathinfo
関数じゃだめなの?
0409nobodyさん2006/02/14(火) 23:27:00ID:???
/hoge/fuga/hunnu/2testという文字列があるとして
・/2testを抜いたもの
・/2testの直前にある文字列
・2testのみ
を抽出したいという事です。

とても分かりづらく書いてすみません。
0410nobodyさん2006/02/14(火) 23:37:42ID:???
>>407
$str = "/hoge/fuga/hunnu/2test";
preg_match('<.*/([^/]+)/([^/]+)$>', $str, $match);
$str1 = $match[2];
$str2 = $match[1];
04114102006/02/14(火) 23:40:32ID:???
1つ目の抜き出しを忘れた
preg_match('<^(.*/([^/]+))/([^/]+)$>', $str, $match);
$str1 = $match[1];
$str2 = $match[2];
$str3 = $match[3];
0412nobodyさん2006/02/14(火) 23:49:28ID:???
>>408
ありがとうございます。
dirnameだとファイル名を含まないパスを返してくるので意図した内容にはならず、
ただこちらの存在を忘れていました。

>>411
神を見た。
いや、何度読んでも仕組みが分からない。
でも期待したものが返って来ます。
凄いです。なぞです。
いわゆるゴッドです。
0413nobodyさん2006/02/14(火) 23:55:57ID:???
書いてなかった私の責任ですが
/2testのみだと返って来ないみたいです。
0414nobodyさん2006/02/15(水) 00:01:49ID:???
preg_match('<^(.*/([^/]+))*/([^/]+)$>', $str, $match);
で/2testのようなものも回収できるようになりました。
<や>が全然分かりませんが、動くので>4100氏に感動してしまいます。
0415nobodyさん2006/02/15(水) 00:17:35ID:???
もういい加減ウザいかも知れませんが、改良できたので一応書いておきます。
/hoge/fuga/hunnu/
だと取得できなかったのですが、
'<^(.*/?([^/]+))*/([^/]+)?$>'
とする事で取得する事ができました。

>410氏ありがとうございました。
0416nobodyさん2006/02/15(水) 01:16:25ID:???
>>414
あー。<や>には大して意味ないよ。
普通、pregの正規表現は /〜/ って書くものだけど、
|〜| とか [〜] とかでも書けるってだけの話。
パス分解の正規表現を書くときは中身に / を多用するから
エスケープ面倒くさいんで別の記号で代用してるだけ。
0417nobodyさん2006/02/15(水) 02:51:07ID:NFe11LPg
PHP4で吐き出したデータをpdf化するにはどんな方法がありますか?
0418nobodyさん2006/02/15(水) 08:35:38ID:???
>>417
Excelで読み込んでAcrobat
0419nobodyさん2006/02/15(水) 08:37:21ID:???
>>417
wordに貼り付けてPDFメーカー
■ このスレッドは過去ログ倉庫に格納されています