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

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

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

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

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0059nobodyさん2010/09/19(日) 22:50:52ID:???
>>58
やってみた。自分でやってみるほうが早いと思うけどね。

Warning: preg_match() [function.preg-match]: No ending delimiter '.' found in ......

で false を返したよ。@5.2.13
0060nobodyさん2010/09/19(日) 23:09:42ID:???
/がうざいなら##で囲むとかデリミタ変えるといいよ
0061nobodyさん2010/09/20(月) 00:01:59ID:???
省略記述について教えてください。

mysql_query("rollback") and $this->db['autocommit']= 1;

mysql_query("begin") or $this->dberr("トランザクション開始エラー");
はどういった意味になるのでしょうか。

ifも書かれていないため、条件分岐でもなさそう
ですので、悩んでます。

よろしくお願いいたします。
0062nobodyさん2010/09/20(月) 00:25:33ID:???
>>61
スレタイ
0063nobodyさん2010/09/20(月) 00:29:55ID:???
andの場合は前の結果が真の場合実行
orの場合はその逆で偽なら実行
if文とかでもそうでandとか&&は
先の結果が真の時以外その後は実行されない
0064nobodyさん2010/09/20(月) 00:30:41ID:???
>>61
http://jp.php.net/manual/ja/language.operators.logical.php
0065nobodyさん2010/09/20(月) 00:33:59ID:???
>>59-60
本当だ・・・
warning返された・・・

なんてスラッシュなんて要求するんだろう?
ない方が手間も省けるのに
0066nobodyさん2010/09/20(月) 00:40:14ID:???
>>65
正規表現リテラル
0067nobodyさん2010/09/20(月) 00:44:25ID:zsEPGaUe
>>62
すみません。
ID出してませんでした。

>>63 >>64
ありがとうございます。

つまり、
if (!$this->db['autocommit']){
  mysql_query("commit") and $this->db['autocommit']= 1;
}
は、書き換えると
if (!$this->db['autocommit']){
  if(mysql_query("commit")){
    $this->db['autocommit']= 1;
  }
}
になり、
if (!$this->db['autocommit']){
  mysql_query("commit") or $this->db['autocommit']= 1;
}

if (!$this->db['autocommit']){
  if(!mysql_query("commit")){
    $this->db['autocommit']= 1;
  }
}
になるという解釈で宜しいでしょうか。
度重なる質問ですみません。
0068nobodyさん2010/09/20(月) 00:47:16ID:???
それであってる
0069nobodyさん2010/09/20(月) 01:39:01ID:zsEPGaUe
>>68
ありがとうございます。
大変助かりました。
0070nobodyさん2010/09/20(月) 03:41:18ID:???
realpath()で絶対パスを取得することができるわけだけど
一方htmlの画像表示タグ
<img src="(パス)/(ファイル名)">
では(パス)の部分にrealpath()で取得した絶対パスを指定しても正しく画像を表示できないのはなぜ?
これができるようになったら便利なんだけどね・・・
0071nobodyさん2010/09/20(月) 05:05:25ID:???
>>70
スレタイ
0072nobodyさん2010/09/20(月) 05:29:32ID:???
realpath()で絶対パスを取得することができるわけだけど
一方htmlの画像表示タグ
<img src="(パス)/(ファイル名)">
では(パス)の部分にrealpath()で取得した絶対パスを指定しても正しく画像を表示できないのはなぜ?
これができるようになったら便利なんだけどね・・・
0073nobodyさん2010/09/20(月) 08:52:50ID:ZY/coBt6
【OS名】CentOS
【PHPのバージョン】5.2.13 (cli)
【質問内容】

CLI版のPHPは自動でメモリの開放はしてくれないのでしょうか?
ループしているだけで、メモリ使用量がどんどん増えていって、最終的に
メモリが足りなくなって落ちてしまいます。
原因や、回避策をご存知でしたら、教えてください。

例)

<?php
require_once('./simplehtmldom/simple_html_dom.php');

for ($i = 0; $i < 100; $i++) {
  $url = "http://www.yahoo.co.jp";
  $obj = file_get_html($url);
  unset($obj);
  var_dump(memory_get_usage(1));
  sleep(3);
}

int(5505024)
int(9961472)
int(14942208)
int(19660800)
int(24117248)
int(29360128)
int(33816576)
int(38535168)
0074nobodyさん2010/09/20(月) 10:02:34ID:???
$obj = file_get_html($url);

ここをfile_get_contentsにしてやってみ
ちゃんと開放されてるから
原因はfile_get_html
require_once('./simplehtmldom/simple_html_dom.php');
こいつの中身にあるんじゃないかと
なんかメモリにキャッシュするようにしてるのかもしれん
0075nobodyさん2010/09/20(月) 10:29:28ID:???
>>70
imgタグのsrcはwebサーバではドキュメントルートからのパスになるし
realpathから$_SERVER["DOCUMENT_ROOT"]を引けばOK
0076nobodyさん2010/09/20(月) 10:36:00ID:???
>>75
そこらへんHTML5では改善されるといいね
些細なことだけどプログラム上の余計な手間なんだよね>imgタグのsrc指定
0077nobodyさん2010/09/20(月) 10:53:27ID:???
それは改善なのか?
0078nobodyさん2010/09/20(月) 10:58:12ID:???
サーバのパスをimgタグのsrcに指定して表示されるわけなかろう
<img src="/home/takashi/public_html/img/hoge.jpg">とか書くつもりか
0079nobodyさん2010/09/20(月) 11:01:18ID:???
             |
〜〜〜〜〜〜〜〜|〜〜〜〜〜〜〜〜〜〜
   >( c´_ゝ`)  |
            |
>( c´_ゝ`)     J
     >( c´_ゝ`)



             |
〜〜〜〜〜〜〜〜|〜〜〜〜〜〜〜〜〜〜
             |     >( c´,_ゝ`)
             |
             J   >( c´,_ゝ`)
                    >( c´,_ゝ`)
0080nobodyさん2010/09/20(月) 11:09:18ID:ZY/coBt6
>> 74

「メモリにキャッシュする」というのが、
具体的にどういう処理かがよくわからないのですが。

とりあえず、関数の中で static な変数を保持しているとかはありませんでした。

file_get_html の中では、object を new して返してます。
file_get_html が返した object を unset しても、どんどんメモリが増えていきます。。

file_get_contents なら、増えないことは確認できました。
0081nobodyさん2010/09/20(月) 11:24:32ID:???
>>78
その方式でもちゃんとURL変換した上で表示してほしくね?
0082nobodyさん2010/09/20(月) 11:34:46ID:???
>> 80
マニュアルに書いてありますねぇ
file_get_contents()はファイルの内容を文字列に読み込む 方法として好ましいものです。もしOSがサポートしていれば パフォーマンス向上のためにメモリマッピング技術が使用されます。
0083nobodyさん2010/09/20(月) 12:14:06ID:???
>>81
そういうヘルパーを作ればいいんじゃね?
0084nobodyさん2010/09/20(月) 13:22:28ID:Z65z5cwS
>>52です

jcode.phpで文字コードを調べてみると ASCIIコードになっていたようです
0085nobodyさん2010/09/20(月) 13:25:07ID:???
だから文字コードをちゃんと変換できてないからだろバカ
0086nobodyさん2010/09/20(月) 13:28:19ID:???
73と52は同一人物なような気がしてきた
0087nobodyさん2010/09/20(月) 14:21:44ID:???
ちなみに85と86は同一人物
0088nobodyさん2010/09/20(月) 14:28:16ID:M5nqlNJA
すんません。

@を禁止ワードとしてしたいのですが、
strpos($_POST['aho'],"@");
とすると、何故かフォームahoに全角スペースとか入っていると、
falseが返ってきません。

文字コードがshift-jisだからかなとは思うのですが、
何か対策ありますでしょうか。
ちなみに禁止ワードは@以外にも可能性があり、@だけ削ればいいわけではなく、
しっかり禁止ワードを検出して、入力したユーザーはアクセス規制をかけるという処理です。
0089nobodyさん2010/09/20(月) 14:35:47ID:???
>>88
つ mb_strpos()
0090nobodyさん2010/09/20(月) 14:39:08ID:???
@を入力しただけで規制とかシステムの怠惰
0091882010/09/20(月) 14:48:41ID:???
>>90
余計なお世話です。

無職のあなたほど怠惰ではありません。
0092nobodyさん2010/09/20(月) 14:54:36ID:???
postて連想配列じゃないの
0093882010/09/20(月) 15:01:12ID:???
>>92
無知は黙ってろ消えろ
0094nobodyさん2010/09/20(月) 15:05:27ID:???
postて連想配列だけどなにか?
0095882010/09/20(月) 15:06:41ID:???
>>94
無知乙
print_r($_POST['aho'])で試してみろ
0096nobodyさん2010/09/20(月) 15:07:43ID:???
フィーーーーーーーーーッシュ
0097nobodyさん2010/09/20(月) 15:10:46ID:???
>>95
説明

HTTP POST メソッドで現在のスクリプトに渡された変数の連想配列です。
0098882010/09/20(月) 15:14:07ID:???
>>92はpostは連想配列だからstrposの第一引数に指定できないって言いたかったんでしょ?
だからしっかり教えてあげただけです
0099nobodyさん2010/09/20(月) 15:28:42ID:???
>>98

>>92のレスを勝手に深読みして一人でさわぐのはやめましょうw
0100nobodyさん2010/09/20(月) 15:30:42ID:???
>>98
暇乙。誰も教えてくれと頼んでないのにご苦労様です
0101882010/09/20(月) 15:32:39ID:???
じゃあ>>92は何の為にレスしたのか説明よろしくたのんます
0102nobodyさん2010/09/20(月) 15:38:37ID:???
>>82
マッピングとガベージコレクションは別物やで
0103922010/09/20(月) 15:40:03ID:???
バカを釣るためです
0104nobodyさん2010/09/20(月) 15:42:50ID:???
>>103
www
0105nobodyさん2010/09/20(月) 15:43:28ID:???
>>103
なん・・・だと・・・
0106nobodyさん2010/09/20(月) 15:44:01ID:???
postて連想配列じゃないの

バカを釣るためです

さすが
0107nobodyさん2010/09/20(月) 15:58:27ID:???
PHP初心者ですがご質問致します。

PHPを使ったパスワード認証をお教えください。
HPにyahooのリンクがあったとします。
そのリンクをクリックした際に(ポップアップ等で)パスワード認証を
かける方法を探しております。
0108nobodyさん2010/09/20(月) 15:59:30ID:???
よくわからんが、パスワード認証を教えてくださいと言われても困ってしまうな
0109nobodyさん2010/09/20(月) 16:05:26ID:???
>>108
できれば教えてください
0110nobodyさん2010/09/20(月) 16:20:17ID:???
>>109
できないので教えません
0111nobodyさん2010/09/20(月) 16:21:01ID:???
>>107=109
スレタイと>>1を読んで、やりたい事をもっと具体的に書いて。

「yahooのリンク」のリンク先(yahoo)は自分のサイト(PHPを動作させているサーバ)なのかい?
それとも自分のサイトでPHPで認証させて、外部(yahoo)に飛ばすという意味なのかい?

0112nobodyさん2010/09/20(月) 16:21:43ID:???
>>111

つ detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1346334528
0113nobodyさん2010/09/20(月) 16:22:52ID:???
>>111
コピペにやさしいんですねwww
0114nobodyさん2010/09/20(月) 16:23:27ID:???
>>109
色々ありすぎるんだよ。
どの程度のレベルのものを必要としているのかわからないけど、
要するにファイルなりデータベースなりに暗号化したパスワードを保存しておいて、入力してもらったパスワードが正しいか確かめるだけ。
簡単なものなら、少し勉強すればすぐ書けるけれど、この手のものはセキュリティ云々も当然あるだろうから、とてもじゃないが全部は説明しきれない。
それだけで本が書けてしまうよ。

ちなみにポップアップさせるのはPHPではなくてJavascript等の守備範囲。
0115nobodyさん2010/09/20(月) 16:23:47ID:???
>>111
お前さっきからどんだけ釣られてんだよ。。。
0116nobodyさん2010/09/20(月) 16:24:35ID:???
ああ、釣りなのね…バカス
0117nobodyさん2010/09/20(月) 16:25:03ID:???
>>114
コピペに偉そうにレスするなんて>>111より痛いぞ
0118nobodyさん2010/09/20(月) 16:26:50ID:???
>>114
ちょwwおまwwww

釣り師相手に長文とかw 必死すぎだろw
01191112010/09/20(月) 16:27:22ID:???
釣りだったのかスマン。

>>115
今日初めての書き込みだよ・・・
0120nobodyさん2010/09/20(月) 16:28:19ID:???
釣れすぎ。少しは餅つけ
0121nobodyさん2010/09/20(月) 16:31:38ID:???
何この釣堀スレ
0122nobodyさん2010/09/20(月) 16:31:56ID:???
お前らちょっと落ち着けって

釣りとかしてたら回答してくれる人がいなくなるぞ

それと回答者もテンプレ守らない質問はスルーしろ
0123nobodyさん2010/09/20(月) 16:32:16ID:???
こんなんばっかりだからスレが3桁近くまで続くのか
0124nobodyさん2010/09/20(月) 16:33:55ID:???
>>122
>それと回答者もテンプレ守らない質問はスルーしろ

>>92>>107も律儀にsageてるな
0125nobodyさん2010/09/20(月) 16:34:49ID:???
荒しはパーラー


Perlの勉強会後の懇親会でPHPスレ荒らしてると公言!
0126nobodyさん2010/09/20(月) 16:37:16ID:???
荒らされてるというよりは勝手に釣られてるだけなんだけどね
0127nobodyさん2010/09/20(月) 16:39:26ID:???
俺は荒しているつもりなんだけどな
PHPがどれだけ嫌われてるかはここにいる連中ならわかってるだろ?
0128nobodyさん2010/09/20(月) 16:39:29ID:???
釣り堀嵐コワス
0129nobodyさん2010/09/20(月) 16:43:33ID:???
まあ全部俺の自作自演ってやつなんだけどな。        ∧_∧
           ∧_∧                   (´<_` ;) ・・さ、流石だな、兄者
           ( ´_ゝ`)                  /   ⌒i
          /   \                 / ィ   | |
     / ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄/
__ _/  Prius  //  FMV  //  VAIO // Mebius // LaVie  /____
   \/_/ ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄/
   _ /ThinkPad //WinBook//DynaBook//Libretto // Presario/
   \/_/ ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄/
   _ / Inspiron //Endeavor//InterLink //  Evo  //Let'sNote/
   \/____//____//____//____//____/
0130nobodyさん2010/09/20(月) 16:48:12ID:???
正直釣られたとしても
それで何なのか聞きたい
全くもって悔しくないから困る

あ、これで悔しいんですねm9みたいなレスはいらんよ
0131nobodyさん2010/09/20(月) 16:55:21ID:???
だーかーらー
なんでID出さないスレを無くしたのか考えろよ
0132nobodyさん2010/09/20(月) 17:03:22ID:???
田所のソースをただここに張ったぐらいで釣りと言えるのか
0133nobodyさん2010/09/20(月) 17:14:14ID:???
無駄にレス消費するだけだからこれ以上やるなカス共
0134nobodyさん2010/09/20(月) 17:48:40ID:???
abc\ndef

↑この一行が書かれたテキストファイルをfgetsで文字列に読み込んだ場合、読み込んだ文字列はどうなっていますか?
0135nobodyさん2010/09/20(月) 17:53:13ID:???
それくらいやってみろよ
0136nobodyさん2010/09/20(月) 18:01:49ID:???
fgetsで$stringに読み込んでechoコマンドでブラウザに出力してみたところ

abc\ndef

と表示されました。そこでHTMLで改行されて表示されるよう

nl2br($string)

としてみました。これで\nが<br>\nに置換されるはずなんですがなぜかechoコマンドで
ブラウザに表示したところ

abc\ndef

のままだったんです。

fgetsでテキストファイルから読み込んだ際になにか特殊処理を施されちゃったのかなとおもって
その解除方法に思案しているところです(´・ω・`)
0137nobodyさん2010/09/20(月) 18:03:24ID:???
だって\nって改行じゃないし
0138nobodyさん2010/09/20(月) 18:15:44ID:???
さっそくテンプレ無視ですか
0139nobodyさん2010/09/20(月) 18:23:19ID:25juxIoU
ああ、すいません^^:)

> だって\nって改行じゃないし

preg_replaceを使って "\\n" を "<br>" に置換することを試みましたがダメでした。
どういう文字列として読み込まれているんでしょうか・・・
少なくとも

abc\ndef

の表記通りでは無い気がします
0140nobodyさん2010/09/20(月) 18:26:12ID:???
preg_replaceの部分も書いたらどうだい
0141nobodyさん2010/09/20(月) 18:33:22ID:???
単純な置換にpreg_replaceを使うな!!!!!!!!!!!!!
str_replaceを使え!!!!!!!!!!!!!!!!!!!!
0142nobodyさん2010/09/20(月) 19:05:30ID:25juxIoU
>>140
preg_replace("\\n", "\<br\>\\n", $string);
preg_replace("\n", "\<br\>\n", $string);

↑どちらもダメでした(´・ω・`)

>>141
(;^ω^)・・・
0143nobodyさん2010/09/20(月) 19:10:11ID:???
大体なぁ、

http://php.net/manual/ja/function.fgets.php
>ファイルポインタから 1 行取得します。

だぞ?
一回の呼び出しで abc\ndef が得られてるってのが変だと思わんか?
これを踏まえてもう一度137が言ってること考えてごらんよ。
0144nobodyさん2010/09/20(月) 19:13:39ID:???
>>142
http://php.net/manual/ja/function.preg-replace.php
ここの例をよーく見ろ
よーーーーーく見ろよ?
後、エラーメッセージを出さない設定にしてるのか?
俺の環境ではエラーになったぜ
0145nobodyさん2010/09/20(月) 19:18:41ID:25juxIoU
>>143
\nは改行ではないということですね・・・
だとしたら

preg_replace("/\n/", "\<br\>\n", $string);

で \n は <br>\n に置換されてもいいはずなんですが・・・

>>144
すいません、/を忘れてました^^;)
0146nobodyさん2010/09/20(月) 19:18:46ID:???
>>58じゃね?
0147nobodyさん2010/09/20(月) 19:19:16ID:???
>>142
(;^ω^)・・・じゃええよ素人の分際が!!!!!!!!!
\nを<br>にする程度の置換ならstr_replaceでいいだろ!!!!!!!!!!
0148nobodyさん2010/09/20(月) 19:21:44ID:???
>>142
お前は素人なんだから話を聞いたらどうなんだ素人さん
100回マニュアルを読んで書き直して来い
http://php.net/manual/ja/function.str-replace.php
0149nobodyさん2010/09/20(月) 19:21:57ID:???
まあ、\n『という文字列』が出てきたら、それを置換したいということだったら、

str_replace('\n', '<br>\n', $string);

じゃね? 試してないけど。
どーしてもpreg_replace 使いたいなら(この程度では馬鹿げてるけど)

preg_replace('/\\n/', '<br>\n', $string);

か? 試してないけど。
0150nobodyさん2010/09/20(月) 19:25:30ID:???
去年何でも正規表現で書く奴がいたな
久しぶりに見たわ
http://www.unkar.org/read/pc11.2ch.net/php/1233590976
0151nobodyさん2010/09/20(月) 19:26:24ID:???
>(;^ω^)・・・
これは流石にヒドいわ・・・人間として
0152nobodyさん2010/09/20(月) 19:28:34ID:???
>>142
正規表現クン乙
0153nobodyさん2010/09/20(月) 19:44:17ID:25juxIoU
ありがとうございます
ちょっと試してみます(;^ω^)
0154nobodyさん2010/09/20(月) 19:51:44ID:???
厨房お断りってテンプレに書いてね
0155nobodyさん2010/09/20(月) 20:24:42ID:???
結果が同じなのとれれば好きにすればいいじゃん
パフォーマンス考えるのは二の次
まずは動くもの作ればいい
0156nobodyさん2010/09/20(月) 20:40:12ID:???
2009-04-01 08:40:00
↑の時間の30分後を取得する方法。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

$date= '2009-04-01 08:40:00';
preg_match("/(\d{4})\D(\d\d?)\D(\d\d?)\s+(\d\d?):(\d\d?):(\d\d?)/s", $date, $d);
$d= localtime(60*30+mktime($d[4], $d[5], $d[6], $d[2], $d[3], $d[1]));
printf("%d-%02d-%02d %02d:%02d:%02d", $d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]);
0157nobodyさん2010/09/20(月) 20:44:03ID:???
わざわざ過去ログ引っ張って嵐にきたんですね?ご苦労様です。
0158nobodyさん2010/09/20(月) 20:55:16ID:???
なにその馬鹿な方法びっくりだわ
■ このスレッドは過去ログ倉庫に格納されています