トップページ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等)・フレームワークは各該当スレへ
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
になってしまいます
ここはやはりメールアドレスで置換したいと思っています
0674nobodyさん2009/04/21(火) 16:17:29ID:???
リロードしてないで作業しろw
0675nobodyさん2009/04/21(火) 16:18:14ID:???
その前に、「与えられた文字列の中」の定義をパターン化する必要があると思う

まさか掲示板に書き込まれた内容とかじゃないよな・・・?
06766432009/04/21(火) 16:19:39ID:???
>>675
そういったものです
携帯で自分のサイトを作って、
CMSに内容を変更できるような仕組みなのです
0677nobodyさん2009/04/21(火) 16:20:04ID:???
名簿業者しかやらない処理
06786432009/04/21(火) 16:21:15ID:???
>>677
ええええ・・・・
そうなの・・・?
0679nobodyさん2009/04/21(火) 16:22:22ID:???
変換なんて誰でもやるだろ。業者は逆にリンクなんか利用しない。逆に危険だから。
0680nobodyさん2009/04/21(火) 16:23:32ID:???
> CMSに内容を変更できるような仕組みなのです

これどういう意味?


自分で新着情報とかそういうのに番号載せて、それにリンクつけるってこと?
それだったら<tel:0120000000>のような形式で記述してそれを置換すればよくね?
一般ユーザーから投稿された電話番号の置換はやめとけ
あと、ただの数字の羅列か電話番号かの判断などさまざまなパターンを考えれ
0681nobodyさん2009/04/21(火) 16:26:10ID:???
>>679
本人乙wwwwwwww
06826802009/04/21(火) 16:29:37ID:???
ちなみに俺の考えた電話番号マッチ

@preg_match_allで数字の羅列を全て取得
Aループさせて色々なパターンをマッチ

0Xで始まる10桁の数字かどうか
090or080or070で始まる11桁の数字かどうか
0120で始まる10桁の数字かどうか
etc

B一致したものを、変換後の数字に持たせる
Cループさせてstr_replaceとかで置換

書き方アバウトですまん。
あと他にいい方法あれば俺にも教えてくれ
06836432009/04/21(火) 16:35:59ID:???
>>680,682
なるほど・・・

>CMSに内容〜
これは、一般ユーザーの投稿内容でサイトの内容を変更する感じのサイトっていう意味でした
06846802009/04/21(火) 16:37:52ID:???
>>683
一般ユーザーが電話番号とか編集してそこにリンク貼るってこと?

個人情報漏洩の助長すんの?
06856432009/04/21(火) 16:41:07ID:???
>>684
うーん、クライアントの要望なんですが、どうなんでしょうね?
会社の電話番号とかじゃないでしょうか?
06866802009/04/21(火) 16:43:12ID:???
>>685
ああ、社内ネットワークで使うのか
電話番号だけ[]で囲ってもらうようにするとかすればいいんじゃないかな?
それか文字の先頭にTel:またはрつけてもらうとか

具体的にどのようなものを作るかによって変わってくるからなぁ
0687nobodyさん2009/04/21(火) 16:44:00ID:???
本質とは違うところで叩きたいやつばっかだな。どういう条件で動かすかもわからないのに。
06886432009/04/21(火) 16:47:45ID:???
>>686
なるほど、何かしら条件を付けてもらうことにします
ありがとうございました
0689nobodyさん2009/04/21(火) 16:57:51ID:yGbAtJxQ
preg_replace("/([^\"])(hoge)([^\"])/","\\1foo\\3",$str)
タグの中がちゃんとクォートされてるならこれだけでいいんだけどね
0690nobodyさん2009/04/21(火) 16:59:23ID:???
>>689
ちゃんとログ読め
途中で仕様変わったぞwwwwwww
06916432009/04/21(火) 16:59:53ID:???
>>689
ごめんなさい
仕様を一部変更しました
0692nobodyさん2009/04/21(火) 19:35:57ID:???
$file = file("textdata.txt");
foreach ($file as $v) {
echo $v."
0693nobodyさん2009/04/21(火) 19:37:46ID:gWZ6QvqO
$file = file("textdata.txt");
foreach ($file as $v) {
echo $v."<br>";
}

textdata.txtがあります
このファイルはオフラインで更新した後に、サーバにアップロードします
この場合textdata.txtの内容を出力するときにhtmlspecialcharsは行うべきでしょうか?
0694nobodyさん2009/04/21(火) 19:41:39ID:???
textdata.txtは他人はいじるの?
06956932009/04/21(火) 19:49:32ID:gWZ6QvqO
いじりません
私が自宅のパソコンで編集してアップロードするだけで、他の人は一切編集することがありません
0696nobodyさん2009/04/21(火) 19:57:41ID:???
>>695
そしたらエスケープはしなくてよい。
自分でメモ帳で手打ちでHTMLを編集して
自分のホームページをアップロードしてるのと同じ。
0697nobodyさん2009/04/21(火) 19:59:20ID:W2YbvY8A
すまない/usr/bin/phpでhoge.phpをsystem()関数を利用して実行しようとしてるんだけど、
実行してもfalseが返ってくる。ほぼまる一日悩んでるんだけど、よくあるFAQがあったら教えてください
OSはCentOSでPHP5.1.6 Apache2.2.3
php.iniのsafe_modeはoffにしてあって、シェルから目的とするphpを実行するとしっかり動作するんだが、
system()から実行できない・・・
0698nobodyさん2009/04/21(火) 20:02:20ID:???
肝心のどう書いたかぐらい書けばいいのに
06996972009/04/21(火) 20:10:44ID:W2YbvY8A
>>698
ん、俺ですか?
0700nobodyさん2009/04/21(火) 20:39:39ID:???
>>697
以前、同じような書き込みを見たことがあるような記憶があるような。
bash -c php うんたら でもダメなの?
0701nobodyさん2009/04/21(火) 20:47:43ID:???
>>696
トロイの木馬に感染して自分のPCから悪意のあるコードがアップロードされたら?
0702nobodyさん2009/04/21(火) 21:00:07ID:???
悪意のあるHP管理者がファイルをアップロードしたらマズくない?
サニタイズされてたほうがいいんじゃないの?
0703nobodyさん2009/04/21(火) 21:23:43ID:???
>>702
おまえはなにをいってるんだ
0704nobodyさん2009/04/21(火) 22:04:48ID:uVsldpzX
classに配列をセットして読み込みたいと思っています。

// class内のメソッドとします。
function array_list($key,$val){
$this->list = array($key=>$val);
return $this->list;
}

として

$obj->array_list("title","てすと");
$obj->array_list("name","あああ");

を実行ファイルに記述して、class内に配列の値を蓄積したいのですが、
1つしか入りません。どこをどう変えたらいいのでしょうか?
0705nobodyさん2009/04/21(火) 22:12:04ID:???
$this->list[] = array(... あるいは array_push($this->list, array()); でどうか
詳しくはマニュアルを読め
0706nobodyさん2009/04/21(火) 22:23:58ID:???
>>702
>>695が多重人格の可能性もあるからってことか。セキュアだなおまえは
0707nobodyさん2009/04/21(火) 22:59:38ID:???
>>704
$this->list = array($key=>$val);

ここで上書きしてるからそうなるんだよ

$this->list[$key] = $val;

にすればよい
0708nobodyさん2009/04/21(火) 23:06:23ID:???
>>706
一般論として考えるならこの手の類の問題は
なるべくなら最悪の可能性を考えて設計すべきだけど、
絶対に他人が触らず自分も忘れないという前提なら構わないよな

ただ、ちょっとした汎用関数を通すぐらいでカバーできるのなら、
最低それはしておくべきのような気がする
設計思想や仕様以前の安全対策として
0709nobodyさん2009/04/21(火) 23:10:54ID:???
text/plainでもどう処理されるか分からないからな
0710nobodyさん2009/04/21(火) 23:20:21ID:???
>>706
他の誰かが不正侵入して書き変えてたらどうするの?
0711nobodyさん2009/04/21(火) 23:33:40ID:???
>>710
サイト乗っ取られたらどうするってのと、同じレベルの話に聞こえるけどな。
これアップローダの話じゃないんだろ。

っていうか、 textdata.txtに入ってるのがHTMLだったらhtmlspecialcharsしちゃアカンし、
テキストだったらしといた方がラクだろ。
0712nobodyさん2009/04/21(火) 23:37:59ID:???
>>693を見る限りhtmlを出力するみたいだけど
0713nobodyさん2009/04/21(火) 23:41:38ID:???
html「に」出力することはわかるけど、
<br>を行末に添付しているから、.txtがhtmlでないことはわかる
だからエスケープ処理しとくべきかもね
0714nobodyさん2009/04/21(火) 23:43:54ID:???
無知な野郎が多いなww
エスケープ刷る必要ねえだろw
0715nobodyさん2009/04/21(火) 23:45:41ID:???
>>714
<test>とかがテキストファイルにあったら、
ブラウザに表示されなくないか?
0716nobodyさん2009/04/21(火) 23:57:59ID:???
>>710
txtは書き換えるのにソース書き換えたりはしないなんてかわいい侵入者だな
0717nobodyさん2009/04/22(水) 03:30:58ID:JOPttRIE
>>697

/usr/bin/php ←これが間違ってるか
使えないコマンドを発行してる。
systemの中のコマンドをlsとか簡単なコマンドに変えてやってみ。
あとphpが/usr/bin/以外にないかfindしてみ
0718nobodyさん2009/04/22(水) 14:02:27ID:1Gt+zU8A
バージョン情報を表す正規表現を書きたいのですが、うまく実現できません。
条件としては数値部分[0-9]に関しては1文字以上の可変です。

以下の値は通過してほしい値です。
0.1
1.1
11.1
1.2.3.4
11.1.1.11111

以下の値は許可しない値です
1
.1.1
1.1.
1..1

始まり部分は以下のようになります。
/^\d{1,}\.\d{1,}〜$/
〜以降が思いつきません。

以上の形式です。どなたかお力添えをお願いします。
■ このスレッドは過去ログ倉庫に格納されています