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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/04/27(金) 10:02:42ID:H9gF1SfB
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 44
http://pc11.2ch.net/test/read.cgi/php/1176364487/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0175nobodyさん2007/05/01(火) 01:23:50ID:???
>>174
http://jp.php.net/session
0176nobodyさん2007/05/01(火) 01:27:07ID:???
php5でメールフォームをつくってます。
mb_encode_mimeheader関数の使い方について質問させてください。
この関数で送信者名(ヘッダのFrom)に入力された日本語をMIMEエンコードしようとしています。

前に読んだ書籍では日本語部分にのみこの関数を使用すること、
という記載があったと記憶してるんですが現在確認できません。(マニュアルにも記載なし)
例えば入力された送信者名が「progra民具」さんだったら「
民具」のみ切り分けてMIMEエンコードすること、という説明だったと思います。
テストしている範囲ではそのまま
$fromName = mb_encode_mimeheader("progra民具");
で特に問題なくエンコードできてるんですが・・・
メール送信をすでに実用している方、どのようにされていますか?
0177nobodyさん2007/05/01(火) 01:32:05ID:???
>>176
する必要無し
01781762007/05/01(火) 01:42:45ID:???
>>177
ありがとうございます!
0179nobodyさん2007/05/01(火) 02:21:04ID:???
おぃおぃ。

メールヘッダーに生の日本語入れるつもりか・・・
0180nobodyさん2007/05/01(火) 02:37:50ID:???
$hogeが1000文字以上だった場合、1000文字から最も近い改行で区切って配列に入れたいのですがどのような方法があるでしょうか?
0181nobodyさん2007/05/01(火) 03:30:08ID:1OYzEHDw
すいません。質問です。
php+postgresqlを使っています。
grant 操作 on クラス to ユーザ;
ってapacheとDBをつなげるときに必要みたいですが、
publicで大丈夫でしょうか?
よろしくお願い致します。
0182nobodyさん2007/05/01(火) 03:34:06ID:???
>>180
まず1000文字あるかどうか確認して
もしあればケツから一番近い改行
までを取得すればいいだけでないの?
1000文字以上ある場合は一度最後まで
改行があるかどうか走査する必要はある。

>>181
それはPostgreSQLの権限の話だよな?
Apacheユーザ(言うなればPHPユーザ)
がDBにアクセスできるように、またアクセス
制御を行うためにDB側で設定する。
まったくPHP関係ないけどgrant分にpublic
なんかあったっけ?
0183nobodyさん2007/05/01(火) 03:49:20ID:3L8/2YzF
与えられた文字列が整数を表すか調べたいのですが
is_int()だと文字列なのでfalseになり、
is_numeric()だとtrueになる幅が広すぎます。
整数を表す文字列かをうまく調べるにはどうすればいいですか?
0184nobodyさん2007/05/01(火) 04:20:05ID:???
>>183
preg_match('/^[1-9]\d*$/', $string)
0185nobodyさん2007/05/01(火) 04:23:10ID:???
>>184
条件が整数だから
preg_match('/^-?[1-9]¥d*$/', $string)
の方がよくなくね?
0186nobodyさん2007/05/01(火) 04:25:09ID:???
あ、間違った…
'0'===$string || preg_match('/^[\-+]?[1-9]\d*$/', $string)
01871762007/05/01(火) 04:27:57ID:???
>>183
数値文字列を整数型に型キャストしてから調べては。
is_int((int)$num_str)

>>179
エンコードはする前提なので、>>177氏の助言は、
あくまで関数の使い方ことですね。
0188nobodyさん2007/05/01(火) 04:39:06ID:???
>>187
> is_int((int)$num_str)
だと '10 hogehoge' とかも通るんじゃなかたけ?
0189nobodyさん2007/05/01(火) 04:45:09ID:???
あ、たしかに・・・。ゴメリ
0190nobodyさん2007/05/01(火) 04:52:53ID:???
Perlで5MBぐらいのテキストデータのファイルを書き出し読み出ししているものを
PHP+MySQLにするとサーバーへの負荷はどのくらい変わりますか?

アクセスのたびに呼び出す仕様です。
0191nobodyさん2007/05/01(火) 05:34:28ID:???
>>190
データの構造、アプリケーションの振る舞い
作る奴の脳味噌の熟成具合に依存するので
それだけではわからん
0192181です。2007/05/01(火) 06:31:19ID:1OYzEHDw
ではこれはPHP+Postgresql+Apacheで表示させる上
ではgrantは関係ないってことですか?
0193nobodyさん2007/05/01(火) 07:47:04ID:???
全く関係ないしスレ違いです。
grant構文はレン鯖業者のためにあるようなものです。
publicは登録されている全ユーザに同じ権限を与えるものです。
自鯖などで1人で使う場合、自分用に1つ作ればいいんじゃないすか?
知り合いに貸して、その知り合いがDBを使いたいならば、
その知り合いに対してgrant文を実行する感じです。
01941932007/05/01(火) 07:50:16ID:???
肝心なこと書き忘れてました。
>apacheとDBをつなげるときに必要
必要なのはapacheのconfでモジュール組み込むことじゃないっすかね。
0195nobodyさん2007/05/01(火) 11:16:25ID:???
PHPの通常(?)とバイナリ(?)の違いがわからん
CGIとしての動作ってなんだよ
0196nobodyさん2007/05/01(火) 11:55:08ID:???
>>181
よくあるパターンだと
webアクセス専用にユーザ用意 + 権限設定するから
全く関係ないわけじゃない
とりあえずgrantで何ができるか確認してみたら?

>>195
こんなところか?
ttp://jp.php.net/manual/ja/install.general.php
01971802007/05/01(火) 12:28:23ID:???
>>182さん
ありがとうございます。
ただそれだと意図した動きになりません。

$hogeは普通の文ですので改行もたくさんあります。
そして1000文字以下の場合もあれば、2000文字以上の場合もあります。
なので見やすいように1000文字単位で区切ろうと思っています。

substr($hoge, $page*1000, 1000)  //$pageは数字

これで1000文字単位の文字は取れるのですが、変な切れ方になるので改行で区切りたいのです。
0198nobodyさん2007/05/01(火) 12:33:53ID:???
>>197
http://php.net/wordwrap
とか
http://php.net/strrpos
とか使ってみれば?日本語でうまくいくのか知らんけど。
それから>>1読んでね
0199虚弱PHP2007/05/01(火) 12:49:20ID:???
>>197
改行でってのは、結構面倒だと思うから、
mb_strwidthでも使えばいいんじゃないかな。

どうしても改行でやりたくて、
うまくいかないならソースplease。
0200虚弱PHP2007/05/01(火) 12:52:35ID:???
まちがった mb_strimwidth()
http://www.php.net/manual/ja/function.mb-strimwidth.php
0201虚弱PHP2007/05/01(火) 12:55:03ID:???
>>183
ctype_digit()じゃだめ?
0202nobodyさん2007/05/01(火) 14:55:53ID:???
>>199
というか、>>197(=>>180)の返事は、>>182の回答を正しく理解してないんじゃないの?
0203nobodyさん2007/05/01(火) 15:44:06ID:???
>>197
1. 文字列aの長さを測る
2. aが1000文字以内ならループブレイク
3. aを添え字0-998までとそれ以降に分ける
4. 前者の末尾に改行をくっつけて配列にぶちこむ
5. aに後者を代入 1に戻る

いや、冗談だけどさ
改行なんてどこに入っててもいいじゃん
0204nobodyさん2007/05/01(火) 15:50:18ID:???
>>201
そんなのがあったのか
マイナス値がヤバそうだが
0205nobodyさん2007/05/01(火) 16:40:02ID:???
プログラミングで出合った問題と、自分が「こうしたい」という問題を
をごっちゃにして、勝手に混乱するよね、この文字切り・改行厨ってのは。
この手の質問、何度見たか。
0206nobodyさん2007/05/01(火) 17:27:07ID:???
>>205
あー、それ俺が感じていた疑問というかモヤモヤを見事に指摘しているわ。

自分が「こうしたい」という問題を、プログラミング的にに落とし込んでから(または落とし込む方法を)質問するスレです。

とかに変えたほうがいいかも。
PHPに絡むならビジネスロジックだろうとスクリプトの設置・改造方法までOKだと勘違いしてる奴多いからな。
02072062007/05/01(火) 17:29:07ID:???
>>206
あー話の筋からすると、飛躍しすぎたかな。
とにかくそう思った
0208nobodyさん2007/05/01(火) 17:52:41ID:smYMDtq3
PHPとMYSQLでサイトを作ってるのですが、SQLで下記のようにしても
「つ」以降の先頭文字検索でつ以外の文字も抽出されるのですが
どうすればよいでしょうか?
あ〜ちまでの文字は普通に抽出されます。

$str="つ";
$SQL="SELECT * FROM tbl WHERE field1 LIKE '$str';";
0209nobodyさん2007/05/01(火) 18:01:12ID:???
%いらないの?
あと文字コードは何でつか?
0210nobodyさん2007/05/01(火) 18:10:07ID:smYMDtq3
間違いました、こうです。
$SQL="SELECT * FROM tbl WHERE field1 LIKE '$str%';";

文字コードはJISです。
0211nobodyさん2007/05/01(火) 19:15:14ID:EEwZpxpS
PHPは冗談抜きにVBScriptと同様。片や、いっぱしのプログラマとして
雇われ給料もしっかりと払われ、片や、事務職の給料の安い派遣のお姉ちゃんが
一生懸命マクロ・VBAを組んでいる。

これは非常に矛盾です。
0212nobodyさん2007/05/01(火) 19:21:54ID:???
>>211
えーと、それで質問は何?
0213nobodyさん2007/05/01(火) 19:44:59ID:EEwZpxpS
>>212
おねえちゃんがほしいんです!
0214nobodyさん2007/05/01(火) 19:54:56ID:???
>>208についておながいします
0215nobodyさん2007/05/01(火) 19:59:17ID:???
>>214
>>1
02162142007/05/01(火) 20:10:02ID:???
サーバーはwin2003です
0217nobodyさん2007/05/01(火) 20:12:05ID:???
>>216
>>1
0218nobodyさん2007/05/01(火) 20:12:24ID:???
>>216
>>1
0219nobodyさん2007/05/01(火) 20:12:48ID:???
>>216
>>1
02202142007/05/01(火) 20:17:58ID:???
mysqlのバックアップとったら空が20MBになった
エロコレクションを削除したら空が5GBになった

削除する時はverupなみの勇気がいる
0221nobodyさん2007/05/01(火) 20:39:13ID:???
>>208
DBの設定もDBの中身も
phpの設定も動かしてるスクリプトも
全部JISなの?

一応訊いておくけどShift_JISじゃないんだよね?
0222nobodyさん2007/05/01(火) 20:39:41ID:ghVsgOyN
Warning: htmlspecialchars() expects parameter 2 to be long, string given in C:\Program Files\xampp\htdocs\test\form.php on line 77
このエラーはどこを改善すればいいのでしょうか。
htmlspecialchars関数が期待する文字列より長い?という意味だと思うのですが。
何か制限があるのでしょうか。
マニュアルとGoogle先生にはお尋ねしたのですが、分かりませんでした。
0223nobodyさん2007/05/01(火) 20:44:21ID:???
>>222
訳せ
マニュアル読め
0224nobodyさん2007/05/01(火) 20:47:09ID:???
>>211
じゃー、どっちも出来るんならPHPやればいいじゃんw
アホか
02251802007/05/01(火) 20:59:51ID:???
>>205=206

日本語でお願いしますね^^
あと求めているのは答えですからオナニー論理はメモ帳にでもかいててくださいな

軟式さんが仰っているように簡単な問題ではないと思いますが
0226Lisa2007/05/01(火) 21:14:20ID:vsWpEyDK
Perlに関する試験を受けてみたいんですけど、何か良い資格試験
あったら教えて下さい☆ あと、CIWのウェブ言語 PERL基礎って
試験は、受験制約はあるのかなぁ
0227nobodyさん2007/05/01(火) 21:38:47ID:???
>>226
ス レ 違 い
0228nobodyさん2007/05/01(火) 21:50:11ID:???
>>225
別に>>206は>>180向けに書いてませんよw
0229nobodyさん2007/05/01(火) 22:16:27ID:???
>>228
いつものレス番偽造君に釣られる奴も奴だな
0230nobodyさん2007/05/01(火) 22:16:57ID:???
俺俺
0231nobodyさん2007/05/01(火) 22:25:19ID:???
まあある意味スレタイに合致してるよな。このスレの書き込み。
「書き込みやがれ」だから、答えるとは言ってないし。
0232nobodyさん2007/05/01(火) 23:00:06ID:???
>>226
Perlは新規案件減ってるし
どっかの誰かが書いた理解不能なコードの修正とかあるからオススメできない
つか、普通Perl案件で資格なんて考慮されない

今プログラマ案件で一番要望多いのはJava技術者
と、人事の人から聞いたが
デスマーチ案件も多いから気をつけろ
0233Lisa2007/05/01(火) 23:02:50ID:???
     ∧_∧
    ( ?д?)  受けたいんですが、なにか?   
    ハ∨/^ヽ
   ノ::[三ノ :.'、
   i)、_;|*く;  ノ
     |!: ::.".T~
     ハ、___|
0234nobodyさん2007/05/01(火) 23:24:19ID:???
PHPのスレッドにPerlの話を書く人はプログラミング自体やめた方がいいと思うよ
0235nobodyさん2007/05/01(火) 23:48:13ID:OxYFPqZQ
classについて質問です。

$obj = new hogeHoge("");

とするクラスの実行箇所が、1ファイル上にいくつもある場合、
それだけで負荷がかかかりますよね?class内部の関数を実行していなくても。

ポイントの仕組みなどを作っている時、
ポイント設定テーブルの読込→会員テーブルの読込→
会員ポイント状況の読込→ポイントの付与→ポイントの更新

など、それぞれに応じて異なるテーブル・classを実行する必要があるので、
newする回数がどうしても増えてしまいます。作り方にもよるでしょうが、
なんどもclassを実行する場合、処理の遅れなどは仕方ないのでしょうか?
0236nobodyさん2007/05/01(火) 23:51:06ID:???
>>235
全部functionでいいんじゃね?
0237nobodyさん2007/05/01(火) 23:51:39ID:???
>>235
「気にしない」が正解。

もうちょっと詳しく書くと、そういうことを気にして性能に影響あるかどうかわからないところで
わかりづらいコードを書くよりもまずは綺麗にわかりやすいコードを書くべし。

性能に問題が出てからはじめて性能測定をして最適化を行うなり、
機材の増強を図るなりすればいいのだ。
0238nobodyさん2007/05/01(火) 23:53:58ID:???
$obj = new hogehoge();
すると、$objん中に何はいるのよ
0239nobodyさん2007/05/02(水) 01:30:41ID:???
設計がおかしいんじゃねー?
ポイント云々ならポイント操作関連を一まとめにしてっていうか、
それを一つのデータ型っぽいものにするっていうのがclassの真骨頂なような
それでなければ普通の自作関数かstaticなclassの関数呼び出しにするとか
0240nobodyさん2007/05/02(水) 01:40:51ID:???
してっていうか
っぽいもの
0241nobodyさん2007/05/02(水) 02:08:52ID:???
>>235
それで負荷がかかってどうしようもないなら
オブジェクト設計に問題があるんじゃないか?
アクションメソッドやDAOで抽象化するのは普通。
どう考えてもインスタンス化じゃなくて中身の処理が悪くて実行時間がかかってると予測するが。
0242nobodyさん2007/05/02(水) 02:42:07ID:???
今、DWでPHP書いてるけど
何かおぬぬめのエディタない?
0243nobodyさん2007/05/02(水) 02:45:14ID:???
>>235
その例の場合インスタンスの生成なんかより
DBとの会話のほうがロスが大きそうなので
ストアドプロシージャ使ったほうがいんじゃね

あとなんとなくだが
リファクタリングの本を一通り読んでみることをオススメする
0244nobodyさん2007/05/02(水) 02:46:04ID:???
>>242
Em or Eclipce
0245nobodyさん2007/05/02(水) 02:55:47ID:???
<TAG>
TEST
</TAG>

タグの間の文字列(上の場合TEST)を抜き出したいのですが、
どういった関数を利用するのがベターでしょうか?
0246nobodyさん2007/05/02(水) 02:57:06ID:???
preg_match
0247nobodyさん2007/05/02(水) 03:03:38ID:???
>>242
DWのほうが使いやすいよ。htmlとも連携してるから補完機能も色分けもDWじゃないとだめな俺様
02482452007/05/02(水) 03:44:54ID:???
>>246
具体的に教えて栗
正規表現苦手ニダ
0249nobodyさん2007/05/02(水) 03:54:38ID:???
preg_match("!<TAG>(.+?)</TAG>!");
0250nobodyさん2007/05/02(水) 03:54:43ID:???
preg_match("/<TAG>((?:(?!<\/TAG>).)*?)<\/TAG>/", $html, $return);
0251nobodyさん2007/05/02(水) 03:56:48ID:???
>>248
preg_matchが正規表現って分かってるなら
大丈夫じゃないか
後は頑張って覚えるだけぽ
0252nobodyさん2007/05/02(水) 04:00:30ID:???
>>249-250
で、どっちが正しいの?
0253nobodyさん2007/05/02(水) 04:01:44ID:???
「!」って何だっけ
0254nobodyさん2007/05/02(水) 04:04:41ID:???
えくすくらめーしょんまーく
02552452007/05/02(水) 04:14:02ID:???
(.+?)
これで改行も認識されますか?
0256nobodyさん2007/05/02(水) 04:16:28ID:???
>>255
ヒント:s
02572452007/05/02(水) 04:18:39ID:???
どなたか250の内容を具体的に解説してくれないでしょうかニダ?
意味的には、
((?:(?!<\/TAG>).)*?)
が</TAG>以外、
という感じなのはなんとなくわかりますが、
(が2個続いていたり:や?の役目がよくわからんです。

>>251
正規表現の本5冊ほど持ってますが、
さっぱりです。初めて英語を勉強したとき以上のカルチャーショックです、
呪文です、あれは。
0258nobodyさん2007/05/02(水) 04:19:39ID:???
>>250
最短マッチしてるなら?!はいらないんじゃね?
0259nobodyさん2007/05/02(水) 04:20:34ID:???
マニュアル嫁
?:は後方参照しない
?!は否定
()はグループ化して後方参照
02602452007/05/02(水) 04:20:42ID:???
>>256
なるほど〜
s修飾子というやつですね、
そのヒントからかなり得るものができた気がします、
ありがとうございます。
0261nobodyさん2007/05/02(水) 04:27:00ID:???
>>257
オライリーの「詳説正規表現」以外は要らない。
1,2,3章の入門編を軽く流したら、4,5章を徹底的に理解すべし。
02622452007/05/02(水) 04:31:02ID:???
レスありがとうございます、
(?!<\/TAG>) はわかりました
((?:(?!<\/TAG>).)*?) の *?は最短マッチですよね。
?:と(?!<\/TAG>)の後ろのドットの役割が説明聞いてもいまいちわからんですね。。。。

preg_match("/<TAG>(.*)*?<\/TAG>/", $html, $return);
↑これではダメでしょうか?

0263nobodyさん2007/05/02(水) 04:35:15ID:???
質問者はID消すなよ、常識的に考えて
0264nobodyさん2007/05/02(水) 04:36:18ID:???
ドットが分からないとか正規表現のリファレンス1行も読んでないだろ、常識的に考えて
0265nobodyさん2007/05/02(水) 05:54:44ID:???
>>259
(?!hoge)は前方参照否定じゃなかたけ、否定とはちょい違う

>>262
(?!<\/TAG>)(.*?)
て書きたかったんじゃね

>>264
どうしてそこにドットが出るのかがわからない、と聞いているんだろ
常識的に考えて
0266nobodyさん2007/05/02(水) 06:23:43ID:???
文字通りの意味と役割だろ
そんなことも分からないってことは修飾子と構文を正しく理解してないってこと。
その2つは最低限理解してから実例に入るべき。
人に教えてもらってコピーするとか改良するとかはその後。
02672082007/05/02(水) 06:50:57ID:???
>>221
Webの方はJISですが、DBはEUC-JPです。
どのようにすればよいでしょうか?
お願いします。
02682082007/05/02(水) 07:44:06ID:e82GvhiD
すみません、DB側はUTF-8でした。
0269nobodyさん2007/05/02(水) 08:08:14ID:???
方法はあるけど分かるように説明するの面倒だから全部UTF-8にすれ
0270nobodyさん2007/05/02(水) 08:46:10ID:UK9OmFrQ
質問です
GETmethodで情報をphpに受け渡した時、受け側のphpでは以下の通りになりました
storeCart.php?num1=45&code1=1&num2=0&code2=2&num3=0&code3=3&num4=0&code4=4

で、このstoreCart.phpに
if($_get['code1']=""){
echo "karadayo";
}else{
echo "「".$_get['code1']."」";
}
と書いたんですが、何も表示されません なぜでしょう?
0271nobodyさん2007/05/02(水) 08:47:05ID:???
$_GET['code1']
0272nobodyさん2007/05/02(水) 08:51:03ID:UK9OmFrQ
>>271
すみません、書き間違いがありました
「」 と表示されました(270の時点で)
271さんの言うとおりにしても、「」のまま変わりません
なぜ??
0273nobodyさん2007/05/02(水) 08:55:03ID:jXkSXyAx
$_GET['code1']=""
だからじゃね
0274nobodyさん2007/05/02(水) 08:56:00ID:???
$hoge = "「"."
■ このスレッドは過去ログ倉庫に格納されています