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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001 忍法帖【Lv=40,xxxPT】 2011/06/05(日) 07:56:02.79ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 105
http://hibari.2ch.net/test/read.cgi/php/1304064660/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0908nobodyさん2011/06/30(木) 09:43:46.75ID:qcWaMuTT
preg_replaceの複数行置換について教えて下さい

【a.html】xxxxxxxxxxxxxxxxxxxxx
<html>
<body>
<div class="a">a</div>
</div>
</body>
</html>
xxxxxxxxxxxxxxxxxxxxxxxxx

というファイルを
a</div>
</div>
</body>
</html>
という風に出力したいと思い、下記のように書いたのですがうまくいきません
a.htmlに改行が含まれているせいだと思ったのですが
公式マニュアルのpreg_replaceの項には
"デフォルトで、PCRE は、検索対象文字列を(実際には複数行からなる 場合でも)単一の行からなるとして処理します。 "
とあり、よくわからなくなりました。
0909nobodyさん2011/06/30(木) 09:44:29.74ID:qcWaMuTT
>>908
function replace(){
  $str = file_get_contents("./a.html");
  $rep = preg_replace('/.*<div class=\"a\">/',"",$str);
  echo $rep;
}

↑これだと
<html>
<body>

</div>
</body>
</html>
とechoされます
0910nobodyさん2011/06/30(木) 10:07:40.12ID:???
>>900
メモリ積みまくってるPCで実験しても意味ねえだろ
0911◆oDupeixhZv52 2011/06/30(木) 10:18:10.07ID:???
>>909
'/.*<div class=\"a\">/s'
0912nobodyさん2011/06/30(木) 10:35:18.03ID:???
>>910
phpの設定でメモリ割り当て量が重要だと思うが…
0913nobodyさん2011/06/30(木) 11:14:21.45ID:???
>>912
いじってなければ標準の128MBだと思うけど
共有サーバだとその割り当てられたメモリを共有するからメモリミットを極限まで長寝て実験しないと意味ないんだよね
0914nobodyさん2011/06/30(木) 11:19:56.33ID:qcWaMuTT
>>911
ありがとうございます
preg_replaceですが、容量の大きなhtmlファイル(491KB)では動作しなかったのですが

replace.php
function replace(){
 }






これはPHPのメモリ割り当て量の設定が必要ということですか?
0915nobodyさん2011/06/30(木) 11:25:05.55ID:qcWaMuTT
>>914
すみません、途中で書きこんでしまいました

b.html ←491KBを、replace.phpで処理

【replace.php】xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
<?php
  function replace(){
    $str = file_get_contents("./b.html");
    $rep = preg_replace('/.*<div class=\"a\">/s',"",$str);
    echo $rep;
  }
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<title>replace</title>
</head>
<body>
<?php replace(); ?>
</body>
</html>
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
0916nobodyさん2011/06/30(木) 11:25:54.68ID:???
function replace(){
 }

関数に何も定義されてないじゃん・・・・
0917nobodyさん2011/06/30(木) 11:26:42.55ID:???
デミリタに / は使うなッ!!!!!!!!!!!!!!!!!!!
0918nobodyさん2011/06/30(木) 11:28:33.73ID:qcWaMuTT
>>915の出力ソースが下記のようになります。なんのエラーも出ずにスルーされるのはメモリが足りていないという事ですか?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<title>replace</title>
</head>
<body>
</body>
</html>
0919nobodyさん2011/06/30(木) 11:31:24.89ID:???
>>915
どこにdiv要素が出てくんの?張ってすぐためせるものを晒してね
0920nobodyさん2011/06/30(木) 11:46:23.32ID:qcWaMuTT
>>917
何を使うのがおすすめか教えてくださると助かります

>>919
【a.html】xxxxxxxxxxxxxxxxxxxxx
<html>
<body>
<div class="a">a</div>
</body>
</html>
xxxxxxxxxxxxxxxxxxxxxxxxx

↑のhtmlなら>>915のreplace.phpでちゃんとechoされるのですが、

【b.html】xxxxxxxxxxxxxxxxxxxxx
<html>
<body>
<div class="a">a</div>
中略
</body>
</html>
xxxxxxxxxxxxxxxxxxxxxxxxx

↑このhtmlではechoされません(このb.htmlは個人情報の含まれるファイルなので晒せません;すみません)
容量が491Kbもあるからメモリの問題なのかなと思ったのです
メモリの問題でエラーになった場合何もメッセージは出力されないのでしょうか?
0921nobodyさん2011/06/30(木) 11:48:35.24ID:???
すまんこ
ob_get_contentsしてもソースが取得できないんだ

<?php
ob_start();
include('./test.html');
$bufferHTML = ob_get_contents();
ob_end_clean();
var_dump($bufferHTML);
?>


色々試した結果わかったことは、
「test.html」に以下のようなxml宣言があると

<?xml version="1.0" encoding="Shift_JIS"?>

だめで、これを消すと正常に取得できる。
ちなみに「test.html」をUTF-8に変換して、
宣言の箇所をUTF-8にしてもだめだた
やはり宣言があるとだめみたいだ。
なんぞこれ?
0922nobodyさん2011/06/30(木) 11:51:08.02ID:???
>>1
0923nobodyさん2011/06/30(木) 12:00:00.82ID:???
失礼いたしました

【OS名】CentOS 5.3
【PHPのバージョン】5.16
【連携ソフトウェア】-
【質問内容】>>921
0924nobodyさん2011/06/30(木) 12:02:58.99ID:???
荒らしかな無視でいいや
0925nobodyさん2011/06/30(木) 14:20:36.94ID:???
質問内容も超FAQレベルだし
0926nobodyさん2011/06/30(木) 17:58:12.43ID:OdRUAQ84
コード中一度しか使わないクラスだからとインスタンス化せず「::」でのアクセスをメインにしようと思っています
class hoge{
private static $db;
public static function init($str){
 $this->db=$str;
 pirnt($this->db);
}
}
hoge::init("テスト");
以上のコードを実行しても、$thisがねーよとエラーが返ってきてしまいます
「::」を使ってアクセスする場合、最初にアクセスした時orコンパイル時に初期化関数が実行、プロパティを定義させるにはどうしたらよいのでしょうか

$hoge=new hoge();
とすればスマートなのですが、一度しか使わないhogeクラスのインスタンスをわざわざ定義するのもスマートではないと思って気が引けています
0927◆oDupeixhZv52 2011/06/30(木) 18:23:41.88ID:???
self::$db
0928nobodyさん2011/06/30(木) 18:37:41.74ID:OdRUAQ84
ありがとうございます
0929nobodyさん2011/06/30(木) 20:19:42.15ID:???
>>907
それサニタイズ言うなキャンペーン云々の話じゃないの
0930nobodyさん2011/06/30(木) 21:41:58.58ID:???
>>926
スマートであるかスマートでないかの基準って何?
0931nobodyさん2011/06/30(木) 23:19:24.77ID:???
$hoge=new hoge();をみて何がスマートなのか説明してくれ
0932nobodyさん2011/07/01(金) 00:52:39.22ID:???
>>930-931
わからないから質問しているんです
質問を質問で返すのはマナー違反ではないでしょうか
それと質問ならIDを出してください
0933nobodyさん2011/07/01(金) 00:54:21.42ID:???
Ajax厨の中の人も忙しいな
0934nobodyさん2011/07/01(金) 03:46:57.51ID:???
基準を示してくれないとアドバイスのしようがない
0935nobodyさん2011/07/01(金) 04:17:23.29ID:???
だからその基準を教えろっていってんの
腹立つな
0936nobodyさん2011/07/01(金) 04:37:03.65ID:???
926は質問中で定義してるだろ
それを聞いてるの
0937nobodyさん2011/07/01(金) 06:37:44.97ID:???
質問ならIDを出してください
0938nobodyさん2011/07/01(金) 07:31:49.27ID:???
回答だ
0939nobodyさん2011/07/01(金) 09:13:54.77ID:???
>>932=質問者君
素人が$hoge=new hoge();をスマートと思い込んでる理由を説明してもらわないと回答に困るから
0940nobodyさん2011/07/01(金) 11:26:45.35ID:???
>>932 != 質問者 && >>932- == Ajax厨
echo "ぼくをかまって"
0941nobodyさん2011/07/01(金) 11:47:02.75ID:???
もうスルーでいいよ。
次の方どうぞ
0942nobodyさん2011/07/01(金) 18:31:21.43ID:???
ユニコードを
& #876;みたいな形に変換する方法ってありますか?
0943nobodyさん2011/07/01(金) 18:31:34.87ID:LN8vUPfI
すみません、ID出し忘れました・・・。
0944nobodyさん2011/07/01(金) 18:45:36.01ID:f1cCs/uI
header('Expires: 過去の時間');
header('Cache-Control: no-cache');
header('Pragma: no-cache');

キャッシュを無効っていまいちどういうことかわからないのですが、
上記のヘッダーを入れたページにアクセス(ローカルのApacheサーバ)
ブラウザを閉じる(Apacheサーバを停止する)
ブラウザを開いて再度アクセスする(サーバが見つからないのでページ読み込みエラー)

とここまではいいのですが、
このエラーページのソースを表示すると、
最初のページのソースが出ます。(使用ブラウザはFirefoxです)

Firefoxの問題なのかもしれませんが、キャッシュを無効って、
こういうソースをクライアントにとっておかないための処理ではないのでしょうか?
0945nobodyさん2011/07/01(金) 21:33:31.89ID:???
>>944
結局キャッシュするかどうかはクライアントの勝手だから。
PHPスレで議論しても無駄です。
0946nobodyさん2011/07/01(金) 23:06:33.91ID:???
>>944
その認識で正しいからMozilla にバグ報告しませう
0947nobodyさん2011/07/01(金) 23:11:13.79ID:???
どうせabout:configで設定できるっておちじゃねーの
0948nobodyさん2011/07/02(土) 02:43:30.08ID:???
再度接続するときにキャッシュを画面に表示しないってだけで
サーバーが落ちてる時にエラーでてソース表示でキャッシュがでるのは仕様
0949nobodyさん2011/07/02(土) 03:35:54.12ID:U9fkTnQu

この場合やはり毎回count関数が実行されて多少遅くなりますか?
for ($i = 0; $i < count($x); $i++)


$n = count($x);
for ($i = 0; $i < $n; $i++)

0950nobodyさん2011/07/02(土) 03:52:33.56ID:???
>>949
繰り返して試せ
0951nobodyさん2011/07/02(土) 04:42:20.39ID:???
>>949
散々既出だが・・・

http://php.net/manual/ja/function.count.php#46542

> When running loops with count conditions, the code runs faster
> if you first assign the count() value to a variable and use that
> (instead of using count() directly in a loop condition.

> As you can see, the second method (which doesnt use count() directly
> in the loop) is faster than the first method (which uses count() directly
> in the loop).

つーことで結論は出てるよ。

PHPのコンパイラがどの程度最適化してくれるのか知らんけど
後者の方が早いのは想像に難くない。
0952nobodyさん2011/07/02(土) 04:58:26.18ID:U9fkTnQu
>>950
計測方法がわからなかったのですが
今後は試してみたいと思います。

>>951
大変助かりました。ありがとうこざいますm(__)m
0953nobodyさん2011/07/02(土) 12:49:14.67ID:???
forでcountは使うな
XAMPPは使うな
Terapadは使うな
FFFTPは使うな
printは使うな
eregは使うな
0954nobodyさん2011/07/02(土) 12:49:35.06ID:???
追記

dateは使うな
0955nobodyさん2011/07/02(土) 13:11:22.28ID:???
>>953
3行目kwsk
0956nobodyさん2011/07/02(土) 13:32:22.37ID:???
検索と置換機能が弱すぎるから
09579552011/07/02(土) 13:35:47.20ID:???
>>956
なるほど、サンクスコ
0958nobodyさん2011/07/02(土) 13:48:27.46ID:DPlLivZ1
printfとかのフォーマット形式と任意の文字列を引数にとって
それらを比較してフォーマットに合致しているかどうか調べたいのですが
そんな関数ないでしょうか?
0959nobodyさん2011/07/02(土) 14:39:20.52ID:???
合致って、フォーマットとして書いてるのかリテラルとして書いているのか判断付かないのでは?
0960nobodyさん2011/07/02(土) 15:11:12.85ID:???
error_reporting(E_ALL)にして
$_POSTで次の画面に進んでチェックを行う場合
issetを使わないとNOTICEが出る時がありますよね?
issetを使えばNOTICEが出ないからそれはそれでいいんですが
ラジオボックスを未チェックで進んできた場合
input name="hoge"のように指定しているにも関わらず送られてこないようで
hoge自体が送られてこないようで
issetをしてもNotice: Undefined indexというエラーが出てしまいます
何か回避策はありますか?
09619602011/07/02(土) 15:11:48.10ID:r89l/c1b
すみませんage忘れ
0962nobodyさん2011/07/02(土) 15:16:47.65ID:???
>>960
issetで出ないはず
もう一度確認して質問を簡潔にまとめてくれ
0963nobodyさん2011/07/02(土) 15:20:07.10ID:JEVGTjoI
セキュリティの質問です。
暗号化してないパスワードをa.phpからPOSTでb.phpに渡す時も暗号化したり何らかの処理をした方がいいのでしょうか?
0964nobodyさん2011/07/02(土) 15:23:50.22ID:???
>>963
SSL使え
09659602011/07/02(土) 15:28:11.57ID:r89l/c1b
>>962
ありがとうございます
原因がわかりました

a.html
<form method="post" action="a.php">
<input type="radio" name="hoge" value="a">a
<input type="radio" name="hoge" value="b">b<br>
<input type="submit">
</form>

a.php
<?php
error_reporting(E_ALL);
function piyo($post) {
if (isset($post)) {
return $post;
} else {
return null;
}
}
echo piyo($_POST['hoge']);

このように関数を通すとだめなようです
でも関数を通したいんですけどどうしたらいいでしょうか?
0966nobodyさん2011/07/02(土) 15:33:04.83ID:???
>>965
piyo('hoge');
0967nobodyさん2011/07/02(土) 15:36:23.80ID:JEVGTjoI
>>964
はい
SSLってyahooとかでっかい所が使ってるイメージがあるのですが
皆さんも必要があれば使ったりするものなんですか?
09689602011/07/02(土) 15:36:53.69ID:???
>>966
その発想はありませんでした
ありがとうございます
0969nobodyさん2011/07/02(土) 15:38:49.24ID:???
>>967
ちっさいなら使わなくてよし
09709602011/07/02(土) 16:01:54.55ID:r89l/c1b
もう1つ質問お願いします
入力の次に入力チェックすると思いますが
入力に問題があって前画面に戻すとき
URLに前画面の入力内容を入れて戻すんでしょうか?
hiddenフィールドに入れてPOSTで戻すとかは
クリックしてもらわないとできないですよね?
0971nobodyさん2011/07/02(土) 16:39:48.99ID:???
>>969
重要なデータあるんだったら小規模でも万が一の為に使うだろ
0972nobodyさん2011/07/02(土) 16:42:44.42ID:zLDecbT7
1)他のサーバにある画像のURLを取得
2)自サーバーに保存
3)保存した画像を整形(縮小)

という処理をしたいと思っています。
他のサーバというのは全く別のサーバ(twitter)で、何の権限もありません。
どうやったら良いでしょうか?
1はクリアできていて、3はgdだからわかるんですが2がわかりません

というかこれは不正アクセスになってしまうんですかね…
0973nobodyさん2011/07/02(土) 16:56:48.57ID:???
>>972
データ自体を持ってくる事ができてるんなら、file_put_contents()だかでできるよ。
とりあえずやってみることだ。。。ときどき、なんらかのフィルターが入ってたりして画像として認識されなかったりする事もあるが、その時はそのとき。

っつか、不正アクセスとか言う前に、勝手に画像を加工するのは著作権法の方からひっかかる気がする。
0974nobodyさん2011/07/02(土) 17:24:42.47ID:???
公開してるデータにアクセスしてるのにどうして不正アクセスになるんだよw
自サーバーに保存するのも画像を加工するのも問題ない。

ただし、その画像を再公開したら当然問題になる可能性はある。
そこら辺は公開元のポリシー次第。
0975nobodyさん2011/07/02(土) 17:44:38.09ID:???
>>958
sscanfを組み合わせればできそうだよ
0976nobodyさん2011/07/02(土) 17:47:18.89ID:???
>>963
POSTするときにMD5でもやっとけ
オンゲはたいていPOSTするときに暗号化して渡してるぞ
0977nobodyさん2011/07/02(土) 17:50:42.91ID:???
>>963
a.phpからb.phpへPOSTって、同じサーバー内?だったらSSLは不要だろ。
ネット上にパスワード送信されないのに暗号化に何の意味があるんだ。
0978nobodyさん2011/07/02(土) 17:51:26.13ID:???
えっ
0979nobodyさん2011/07/02(土) 17:53:45.13ID:???
>>970
「URLに前画面の入力内容を入れて戻す」だってクリックしてもらわなきゃ無理だろ。
普通はhiddenで「戻る」ボタンで送る。またはセッション変数で送る。
0980nobodyさん2011/07/02(土) 17:53:57.12ID:???
ええっ
0981nobodyさん2011/07/02(土) 17:55:28.65ID:???
>>978
あぁ、勘違い。ユーザーが表示してるa.phpからパスワードを送信するって意味か。
ユーザーがa.phpにアクセスすると自動でb.phpにPOSTされんのかと思ったが
そんな質問するわけないよなw
0982nobodyさん2011/07/02(土) 17:55:49.24ID:???
えええっ
0983nobodyさん2011/07/02(土) 17:58:14.38ID:???
ひょえっ?
0984nobodyさん2011/07/02(土) 17:59:47.22ID:???
次スレよろ>>980
0985nobodyさん2011/07/02(土) 18:03:11.64ID:???
>>990までに立たなかったら俺がテンプレ変えて立ててくんでよろしく!
0986nobodyさん2011/07/02(土) 18:05:00.48ID:???
>>985
好きに変更していいよ
ついでにスレタイも「【PHP】下らねぇ質問はここに書き込みやがれ nnn」
形式に戻していいよ
0987nobodyさん2011/07/02(土) 18:13:06.23ID:???
DBに登録しないでもPOSTで受け渡しする時点でサーバー経由するわけだから
MD5ぐらいは、ねぇ
0988nobodyさん2011/07/02(土) 18:14:45.71ID:???
a.php→b.php→サーバーのDBだったら
   ↑
  ココでハッシュ化する意味は無いかと
0989nobodyさん2011/07/02(土) 18:16:02.69ID:???
あるよ
09909802011/07/02(土) 18:40:18.73ID:???
おおすまねぇ踏んだの気づかなかった
テンプレはそのままでいいのかしらん?
http://hibari.2ch.net/test/read.cgi/php/1309599473/
0991nobodyさん2011/07/02(土) 18:43:33.68ID:???
テンプレはやくしろ
0992nobodyさん2011/07/02(土) 18:44:22.57ID:???
a.php→d.php→c.php→b.php→サーバーのDBだったら
   ↑
  ココでハッシュ化する意味は無いかと
0993nobodyさん2011/07/02(土) 18:53:49.60ID:???
ええええっ
0994nobodyさん2011/07/02(土) 19:00:35.56ID:???
えええええっ
0995nobodyさん2011/07/02(土) 19:05:53.49ID:JEVGTjoI
すみません・・・、なんだか自分の質問のせいで変になってしまって
a.php→b.php→サーバーのDBだったら
   ↑
  ココでハッシュ化する意味は無いかと

とありますが、a.phpでテキストエリアにパスワード入れてPOSTする感じに考えてたんですが
その場合このタイミングではMD5でハッシュ化できなくないですか?
b.phpで受け取ったパスワードをハッシュ化するぐらいしか思いつかないのですが
0996nobodyさん2011/07/02(土) 19:08:39.11ID:???
>>995
要するにクライアントが送信するパスワードを盗聴防止のために暗号化したいんだろ?
だったら普通にSSL使えばいい
0997nobodyさん2011/07/02(土) 19:25:16.00ID:???
a.php→a.php→サーバーのDBなら
        ↑
     ココでハッシュ化すれば十分かと
0998nobodyさん2011/07/02(土) 19:32:01.93ID:???
あのさ、POSTしたら同じファイルだろうが何だろうが
必ずクライアントからサーバーを経由しちゃうものなんですけど
SSL以外の暗号化じゃサーバーに送られてから暗号化されるわけであってSSLみたいな抜き取り防止としてはあんま役に立たないわけでだな
0999nobodyさん2011/07/02(土) 19:54:47.49ID:???
もういい、俺がこの無駄な論争に終止符を打つ(論争にすらなってないけど)

教えて!Watch 解決済みの質問
PHPについての質問です。
http://oshiete1.watch.impress.co.jp/qa4517024.html?order=DESC&by=datetime

元凶はえっ と ええっ とか言ってる奴
1000nobodyさん2011/07/02(土) 20:00:02.77ID:???
ええっ1000ゲット
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。