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

【PHP】下らねぇ質問はID出して書き込みやがれ 83

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/04/06(月) 04:14:58ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 82
http://pc11.2ch.net/test/read.cgi/php/1236532468/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0574nobodyさん2009/04/18(土) 18:55:58ID:moRQGLP/
>>568
普及率が高いから。jspやaspは搭載してないレンタルホストがほとんどだしね。

>>569
カプセル化だけほしいんだよね。変数の扱いが楽だから。漢は手続きと言ってみたいけど、へっぽこなので変数汚染しまくり。
0575nobodyさん2009/04/18(土) 18:57:28ID:???
>>573
>>1
0576nobodyさん2009/04/18(土) 19:03:47ID:???
>>573
初心者のうちはPHPエディタ。
中級以上はPDT
0577nobodyさん2009/04/18(土) 19:36:21ID:???
フレームワークの提供するMVC構造は型志向プログラミングの考え方からはそれなりに遠い地点にあるプログラミング構造だぞ。
例えばCakeやRailsなどのフレームワークはTableModuleパターンを押し付けてくるが、ストラウストラップのOOPの考え方に一番近いのはドメイン駆動型の設計。
で、フレームワーク上でドメイン駆動設計を実現しようとすると、クラス階層を1枚上に丸ごと被せざるを得ない、というくらい両者は相性が悪い。
(基盤となるM-V-C間の繋ぎこみ自体はポリモーフィックに行なわれている事が多いので、無関係でもないが)

まあ、その「押し付け」のおかげでscaffoldingなどの高い開発効率を確保できるわけで、悪いとは言わないけどな。
少なくとも、MVC構造を理解する事と、OOPの考え方を理解する事は、別の問題と考えるべき。
実際、GoFをひとつも理解してなくともRailsやCakeで生産性は出るし、OOPを突きつめると必然的にRailsやCakeの設計に行き着く、というわけでもない。
0578nobodyさん2009/04/18(土) 20:16:51ID:???
>>573
E-TextEditor  ttp://www.e-texteditor.com/
EmEditor v9  ttp://jp.emeditor.com/
TextMate  ttp://macromates.com/
Redcar  ttp://redcareditor.com/
jEdit  ttp://www.jedit.org/
05795632009/04/18(土) 23:12:47ID:???
>>564
>>565
>>566
返事が遅くなりすいません。
単純にint型の最大値を超えてた訳ですね。
本当にありがとうございました!
0580nobodyさん2009/04/19(日) 00:13:57ID:KO8gMtKF
【OS名】Win32
【PHPのバージョン】5.2.9-2
【質問内容】
配列の任意の要素を削除する方法はありますか?
先頭や末尾の削除は簡単にできますが、任意の要素の削除ができません。

一応削除したい要素より後ろの要素を一つずつ前に詰めていく方法もありますが、一発でできるような方法があれば教えてください。
0581nobodyさん2009/04/19(日) 00:32:27ID:???
>>580
http://jp.php.net/manual/ja/function.unset.php

配列の添字も詰めたい場合は、これに
http://jp.php.net/manual/ja/function.array-values.php
0582nobodyさん2009/04/19(日) 01:12:04ID:KO8gMtKF
>>581
解決しました
ありがとうございます
0583nobodyさん2009/04/19(日) 11:36:28ID:???
>>577
日本語わかる?
0584nobodyさん2009/04/19(日) 12:09:11ID:???
プログラムは、「データ」と、データを扱う「処理」の2つの構成要素から成る。(チューリングマシン)
オブジェクトは、データに処理がくっついたもの。
言ってしまえばそれだけのことでしかない。
OOPを難しく考える必要はないよ。
0585nobodyさん2009/04/19(日) 12:21:06ID:???
OOPを勉強するためにJavaを勉強するのも良いけど、
ラムダ計算、関数型プログラミングに慣れておくために、LISPも勉強しておくと良いと思います。
0586nobodyさん2009/04/19(日) 12:47:14ID:???
>>584
オブジェクト指向設計が重要なんだろ
単なるギミックじゃないぞ
0587nobodyさん2009/04/19(日) 13:10:40ID:???
>>584 の言い方はどうかと思うが、OOPで出来ることを、単なるギミックとして使うのもアリだとは思う。
いわゆる Stateパターンとか OOD的にはかなりビミョーと言う認識。
0588nobodyさん2009/04/19(日) 13:15:49ID:TOquu1lD
会員(ログイン)ページの中の申し込みフォームを
入力画面→確認→投稿という形で作ってまして
作成手順は入力画面でポストされたものをセッションに代入、
値を保持しながら確認→投稿という形で作成しました。
申し込みフォーム自体は問題がないのですが、
例えば、入力画面から確認に行き、そこから投稿せず会社概要など
他のページに移動して再度入力画面にいくと以前入力された値が
表示されてしまいます。おそらくセッションが残ったままに
なってるのが原因だとは思います。
入力画面←→確認←→投稿は値を保持させ他のページに飛んだ場合は
値を消去するやり方を教えていただけませんか?
アドバイスよろしくお願いします。
0589nobodyさん2009/04/19(日) 13:33:28ID:???
>>588
unset($_SESSION['hoge'])すればいいんじゃ?
05905882009/04/19(日) 13:44:00ID:???
>>589
返信ありがとうございます!
入力画面、確認画面、投稿画面以外の全てのページに
unset($_SESSION['hoge'])を設定しとこうかなとも考えましたが、
もしかしたら違うスマートやり方もあるのかなと思い質問してみました。
0591nobodyさん2009/04/19(日) 13:46:19ID:???
hiddenでいいやん。
0592nobodyさん2009/04/19(日) 14:16:20ID:???
>>577

そうだよな。CakePHPの例で言っても、所謂OOP的な書き方って、Model, Controllerのextendsくらいだもんな。
基本、コンストラクタは省略されてるし、セッター、ゲッターなしにいきなりプロパティ変数に設定値を代入でOKとか。

あと、命名規則とか記述に縛りが多いのも独特。
05935882009/04/19(日) 15:05:06ID:???
>>591
返信ありがとうございます。
hiddenも検討したんですが今回は項目が多く
入力←確認、確認→投稿時に全ての値をセットしないと
いけなくなりますので出来ればセッションでいけたらと思います。
変な質問すいません・・
0594nobodyさん2009/04/19(日) 15:08:27ID:???
そのページにどこから来たかでわければ?
0595nobodyさん2009/04/19(日) 15:18:01ID:???
初々しいな
0596nobodyさん2009/04/19(日) 16:04:10ID:???
1. 入力フィールドが多数ある時は、そいつらを扱うクラスや関数を作っておくと楽。
複数の画面から同じフォームを生成する場合などは、使い回しが効くと非常にラクになる。

2. hiddenは別に面倒じゃない。確認画面は
foreach($_POST as $k => $v) echo "<input type=\"hidden\" name=\"$k\" value=\"$v\">";
でじゅうぶんだろ?(XSSを考え、実際はエスケープする事)。
0597nobodyさん2009/04/19(日) 17:04:22ID:???
>>547
まずCAKE使うだけならOOPの勉強しなくても、まぁ使える。
さらにCAKE使ってるとOOPに触れざる得ないから多少慣れるのもいい事かも。

で、クラスの書き方と使い方ぐらい入門系の情報でやっておくとある程度身に付いてくるよ。
0598nobodyさん2009/04/19(日) 18:56:04ID:???
>>593
まぁ好きにすれば良いんだけど、自分だったらそのセッションの内容をXMLに変換して、
これをhidden に持たせて、サーバ側ではsimplexml_load_stringでパースする。
0599nobodyさん2009/04/19(日) 19:09:23ID:???
どのみちCSRF防ぐためにワンタイムトークンとかHMAC仕込むときhidden使うしね
あんま意味ないけどhiddenはbase64_encode(serialize())とかすれば一個ですむよ

とこでいくつかのWebアプリでは、プレビューには投稿画面に入力データのリストを追加しただけのものを表示するね
確認画面というフェーズを新たに作るより省力化になっていいと思う。確認画面から投稿画面にもどって、、、という作業もいらないし
0600nobodyさん2009/04/19(日) 22:41:24ID:???
> あんま意味ないけどhiddenはbase64_encode(serialize())とかすれば一個ですむよ
ここだけケチをつけて済まないが
クライアントに渡すデータは他のフォーマットにしとけ
unserialize()時にコードインジェクションが起きる
06015992009/04/19(日) 23:09:38ID:???
>>600
こりゃ失敬w
改ざん検知してないと__wakeup()されたりしちゃうね
0602nobodyさん2009/04/19(日) 23:14:21ID:cHMoaxlc
C++でPHPってかけますか?
0603nobodyさん2009/04/19(日) 23:14:45ID:???
はぁ?
0604nobodyさん2009/04/19(日) 23:17:02ID:???
一部C++で書かれてるし、エクステも一応書けるはず。
0605nobodyさん2009/04/19(日) 23:24:48ID:???
エクステンションとして利用するならCでもC++でも.netでもdelなんちゃらでもいける
0606nobodyさん2009/04/20(月) 15:46:47ID:yRu17DN3
$ary[1]= "blue";
$ary[2]= "red";
$ary[3]= "yellow";
$ary[4]= "white";

上記のような配列があって、
一番大きい数字のキー(上記なら4)を取得したいのですが、
$aryをforeachで繰り返してキーを取得するより何かスマートな方法はありませんか?
0607nobodyさん2009/04/20(月) 15:54:14ID:???
count($ary)
0608nobodyさん2009/04/20(月) 15:54:32ID:???
>>606
その数値の定義のルールは?
1番目から1、2・・・5ってつけるなら
count($ary)でいけるんじゃね?
キーに文字列とか、飛ばし飛ばしの数値とかだったらループさせないといけないはず

キーソートあったと思うけど、個人的には何か使いたくないな
というか、使う機会がないな
0609nobodyさん2009/04/20(月) 15:56:10ID:???
arsort($ary,SORT_NUMERIC);
foreach($ary as $value){
$abc[] = $value;
}
$abc[0];

こうするのがいやってことね。
0610nobodyさん2009/04/20(月) 16:03:13ID:???
>>606
つ $ary[max(array_keys($ary))];
0611nobodyさん2009/04/20(月) 16:04:04ID:yRu17DN3
>>607
>>608
ほんとだ、こんな方法が・・・。
自分の頭の固さを痛感しました。

>>609
ですね。でもシンプルなのが書けそうです。

ありがとうございました!
0612nobodyさん2009/04/20(月) 16:15:13ID:yRu17DN3
>>610
結果は同じでも、命令としてはこっちのが命令の意図に近いですね。
どっち使うかちょっと考えてみます。
ありがとうございます!
0613nobodyさん2009/04/20(月) 16:20:28ID:???
単に最終要素を得たいなら
http://jp.php.net/manual/ja/function.end.php
で済むけど。
0614nobodyさん2009/04/20(月) 16:54:04ID:yRu17DN3
>>613
そんな便利なものが。
今回は取得したキー値を使い回すコード書いてるので、
endは使えませんが今後参考にさせてもらいます。
ありがとうございます!
0615nobodyさん2009/04/20(月) 18:29:43ID:???
>>614
意味を取り違えてるかも知れんが、キー値も必要ということなら、
http://jp.php.net/manual/ja/function.key.php で取得できる。
0616nobodyさん2009/04/20(月) 19:03:29ID:???
>>615
uzee
0617nobodyさん2009/04/20(月) 19:12:07ID:9zjWZumm
abc
cba
acb

上記の内容のテキストファイルの"cba"の行を削除する場合、どのようなコードを書けばよいのでしょうか?
0618nobodyさん2009/04/20(月) 19:18:18ID:???
$str = str_replace("cba\n", '', $str);
0619nobodyさん2009/04/20(月) 19:32:18ID:???
>>617
ループしてその文字列がcbaなら消せばいいんじゃね?
0620nobodyさん2009/04/20(月) 19:39:36ID:9zjWZumm
>>618,>>619
ありがとうございます。

それと、そもそもファイルの内容を行ごとに配列に格納するのはfreadでも可能でしょうか?
file関数だとロックができないようなんですが…
0621nobodyさん2009/04/20(月) 19:48:57ID:???
http://jp2.php.net/manual/ja/ref.strings.php
$buff = fread($fp, 4096);
$lines = explode("\n", $buff);

とか
0622nobodyさん2009/04/20(月) 20:11:16ID:???
>>621
通報しました
0623nobodyさん2009/04/20(月) 20:26:21ID:???
>>620
$rows = file('hoge.txt');
0624nobodyさん2009/04/20(月) 20:29:36ID:???
ごめん読んでなかった
明示的にロックしたいならやっぱflockで
freadはデフォルトでは行末まで読み込みでしょ
0625nobodyさん2009/04/20(月) 20:31:09ID:???
ありゃごめん、phpのfreadは違うのか
0626nobodyさん2009/04/20(月) 20:47:02ID:???
グダグダだなw
06276172009/04/20(月) 21:17:31ID:9zjWZumm
皆さんありがとうございます。

何度も申し訳ないのですが、書き込みを参考にして以下のようなコードを書き、
実行したところ、出来上がったファイルはなぜか最終行がかぶってしまいます。
どこかおかしなところがあれば指摘していただけないでしょうか?
ファイルの内容は>>617と同じ状態です。

$filename = "test.txt";
$delword = "cba";
$handle = fopen($filename,"r+");
flock($handle,LOCK_EX);
$contents = fread($handle,filesize($filename));
$lines = explode("\n",$contents);
$del = array_search($delword,$lines);
unset($lines[$del]);
$line = join("\n",$lines);
rewind($handle);
fwrite($handle,$line);
flock($handle,LOCK_UN);
fclose($handle);
0628nobodyさん2009/04/20(月) 21:19:29ID:???
かぶるって何?
0629nobodyさん2009/04/20(月) 21:20:03ID:???
>>628
俺もそれ書き込もうとしたけどめんどくさくなってやめたwwww
06306282009/04/20(月) 21:21:44ID:???
まぁそりゃ
abc
acb

abc
cba
acb
の先頭から書き込んでるんだから重複するだろう
0631nobodyさん2009/04/20(月) 21:22:19ID:9zjWZumm
>>628
>>629
分かりにくくてすいません。

abc
acb
acb
このようなファイルが出来てしまいました…
0632nobodyさん2009/04/20(月) 21:32:10ID:9zjWZumm
>>629
一度ロックを解除して新規に作成するしかないんでしょうか…
できればロック内ですべて行いたいのですが…
0633nobodyさん2009/04/20(月) 21:34:06ID:???
PDO_SQLITEでいいじゃないもう。
0634nobodyさん2009/04/20(月) 21:44:46ID:???
一時的に適当な名前にリネームしちゃえば?
0635nobodyさん2009/04/20(月) 22:34:03ID:???
>>627
fopenについてマニュアル呼んで来い
rとかwとかaとかbとか何を指定したらいいのか根本的にわかってなさ杉
06366172009/04/20(月) 23:01:16ID:9zjWZumm
もうあきらめてリネームすることにします。

>>635
私が>>632で書いたようにwで新規に作るしかないってことじゃないんですか…?
0637nobodyさん2009/04/21(火) 00:07:36ID:???
普通にやれよw
0638nobodyさん2009/04/21(火) 00:54:05ID:HHvQ3yZ0
終わった・・・
今まで、MySQL(サンの傘下)で開発していbスシステムが全bト水の泡だ・・=E

=y速報】オラクャ汲ェサンを買収
http://headlines.yahoo.co.jp/hl?a=20090420-00000004-zdn_ait-sci
0639nobodyさん2009/04/21(火) 01:05:36ID:???
いや別に何も終らんだろ。
エンタープライズ方面への昇格は絶望的になったが。
0640nobodyさん2009/04/21(火) 01:49:26ID:???
前のデータを残したまま上書きしてるのが問題
書き込む前にftruncate($fp, 0);とかしてファイルをクリアしてから書き込めばいい
書き出しが完了する前にプロセスが落ちるとファイルが壊れるので、renameの()方が安全とは思う
しかしちょっとしたテキストなら `sed -e '/cba/d' test.txt`; でいいような木がする
0641nobodyさん2009/04/21(火) 13:14:45ID:aCugoNL+
$a=1;$b=1;$c=1;$d=1と$ary=array(1,1,1,1)はどちらが鯖に負荷がかかりませんか?
変数の数と値についてはサンプルのため簡略化しましたがどちらも一定ではないと捉えてください
0642nobodyさん2009/04/21(火) 13:19:13ID:???
どっちでも変わらん
0643nobodyさん2009/04/21(火) 14:10:04ID:???
【OS名】WindowsVista
【PHPのバージョン】php5.26
【質問内容】
正規表現でhogeをfooに変換したいのですが、どう書けばよいでしょうか?
それだけだと簡単ですが、<a>タグで囲まれてる中は変換したくないのです
例:
hoge<a href="http://www.hoge.com/">hoge</a>hoge
という文字列があったとして、これを
foo<a href="http://www.hoge.com/">hoge</a>foo
に変換したいです
使用するのはpreg_replaceでお願いします
06446432009/04/21(火) 14:13:13ID:???
ttp://www.rider-n.sakura.ne.jp/regexp/regexp.php
ここで色々試してるのですが、どうにもうまく動きません
どうかご教授おねがいします
0645nobodyさん2009/04/21(火) 14:53:31ID:???
5.26というバージョンはないんだぜ
06466432009/04/21(火) 14:58:44ID:???
ミスでした
【PHPのバージョン】PHP Version 5.2.6
でお願いします
0647nobodyさん2009/04/21(火) 14:59:50ID:???
おk
今調べてやるからちょっと待ってろ
06486432009/04/21(火) 15:00:35ID:???
>>647
お願いします
0649nobodyさん2009/04/21(火) 15:06:10ID:???
>>644リンク先のようなサイトあるのか
おれもつくろかな^^
0650nobodyさん2009/04/21(火) 15:11:53ID:???
一番はじめに回答できた方は下スレ公式認定回答者に認定します
0651nobodyさん2009/04/21(火) 15:21:52ID:???
例で使うドメインはexample.comにしろってテンプレ書いてあるじゃんよく読めよ
0652nobodyさん2009/04/21(火) 15:23:55ID:???
答えられない野郎がいきがるんじゃねえぞ!!!!!!!
0653nobodyさん2009/04/21(火) 15:28:23ID:???
^hoge|(?!<[^>]*>)hoge(?!<[^>]*>)

パターンがよくわからん、こういう感じ?
06546432009/04/21(火) 15:31:19ID:???
>>651
いえ、hrefの中身にもhogeがあった場合、
そこも無視してほしいのです
0655nobodyさん2009/04/21(火) 15:34:57ID:???
>>651
回答も添えられないだけのただの煽り厨(笑)
06566432009/04/21(火) 15:37:10ID:???
>>653
入力例はただの例で、下記のような場合も考えられます

hogeAhogeAhoge<a href="hoge">hogeBhogeBhoge</a>hogeChogeChoge
<a href="hoge">hogeBhogeBhoge</a>hogeChogeChoge<a href="hoge">hogeBhogeBhoge</a>

↑の場合は↓のようになってほしい

fooAfooAfoo<a href="hoge">hogeBhogeBhoge</a>fooCfooCfoo
<a href="hoge">hogeBhogeBhoge</a>fooCfooCfoo<a href="hoge">hogeBhogeBhoge</a>

やりたいことはあくまで【aタグで囲まれてれいる以外のhogeをfooに変える】なのです
0657nobodyさん2009/04/21(火) 15:39:50ID:???
一度Aタグで囲まれている部分を別のものに置き換えてからやってみれば?
0658nobodyさん2009/04/21(火) 15:39:52ID:???
そこまで執念深くhogeを置換したい理由は?
なんかされたの?
0659nobodyさん2009/04/21(火) 15:41:48ID:???
自分の力では解決できなくなると理由を捻じ曲げようとする低レベルのおじさん乙wwww
0660nobodyさん2009/04/21(火) 15:42:52ID:???
658じゃないが、一応何のために置き換えるか聞いておくと
別のやり方が見つかるかもしれんのじゃないかな?

まぁ658の聞き方はちょっと良くないかもしれんが・・・
0661nobodyさん2009/04/21(火) 15:43:32ID:???
使用するのはpreg_replaceでお願いします
使用するのはpreg_replaceでお願いします
使用するのはpreg_replaceでお願いします
使用するのはpreg_replaceでお願いします
使用するのはpreg_replaceでお願いします
使用するのはpreg_replaceでお願いします
使用するのはpreg_replaceでお願いします
使用するのはpreg_replaceでお願いします
0662nobodyさん2009/04/21(火) 15:48:27ID:???
変換しない条件をすべて書き出してそれ以外のhogeを置換、だろ
0663nobodyさん2009/04/21(火) 15:49:15ID:???
まだできんのかよおまいら。。。
preg_replaceとstr_replace組み合わせるだけだろ
0664nobodyさん2009/04/21(火) 15:50:37ID:???
こんなの今時の小学生でも書けるのにおまいらときたら。。。
06656432009/04/21(火) 15:59:30ID:???
あれ、何故か書き込めない
06666432009/04/21(火) 15:59:48ID:???
>>658
>>660
本当にやりたいことは、
与えられた文字列の中のURLとメールアドレスと電話番号を
自動的にリンクに置換する関数を作るというものです
(それぞれ<a href="">と<a href="mailto:">と<a href="tel:">に)
0667nobodyさん2009/04/21(火) 16:00:20ID:???
名簿業者乙
06686432009/04/21(火) 16:01:03ID:???
URLとメールアドレスの置換はできたのですが、
電話番号の置換で意図しない動きをしたので、困ったのです
というのも
0909999999@xxxx.ne.jp
という文字列が与えられた場合

メールアドレス置換
<a href="mailto:0909999999@xxxx.ne.jp">0909999999@xxxx.ne.jp</a>

電話番号置換
<a href="mailto:<a href="tel:0909999999">0909999999</a>@xxxx.ne.jp"><a href="tel:0909999999">0909999999</a>@xxxx.ne.jp</a>

という惨事になってしまうからです
http://www.hoge.com/0909999999/
の場合も同様の現象が起こります

ですので、URLとメールアドレスの変換を行った部分については無視し、
電話番号のリンクだけを作りたいと、そう思って質問した次第です
06696432009/04/21(火) 16:02:38ID:???
>>657
それが私のスキルでは一番早そうですね
一度それで組んでみます
ありがとうございます

>>667
名簿業者じゃないです
携帯サイトを作っていて
ユーザーの書き込みを自動リンクさせたいだけなのです・・・
0670nobodyさん2009/04/21(火) 16:10:14ID:???
>>647はまだ答えられません(笑)
0671nobodyさん2009/04/21(火) 16:11:01ID:???
>>670
先ほど煽られたお方ですね、わかります
0672nobodyさん2009/04/21(火) 16:14:23ID:???
先に電話番号を置換すればいいんじゃね?
基本的に文字の並びがシンプルなのから置換するのがベスト
06736432009/04/21(火) 16:16:11ID:???
>>672
そうしてしまうと、
先ほどの例のような
0909999999@xxxx.ne.jp

<a href="tel:0909999999">0909999999</a>@xxxx.ne.jp
になってしまいます
ここはやはりメールアドレスで置換したいと思っています
■ このスレッドは過去ログ倉庫に格納されています