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

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

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

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

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

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

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
0652nobodyさん2007/04/08(日) 23:09:51ID:OS1trKFT
>>651
PHP Version 4.4.4
です。

php4用に書かれていないんでしょうか・・。
0653nobodyさん2007/04/08(日) 23:24:30ID:???
mysql_query()って成功するとTRUE返すんだっけ?
0654nobodyさん2007/04/09(月) 00:02:37ID:???
パスワードの暗号化って皆何使ってる?
md5でいいの?
0655nobodyさん2007/04/09(月) 00:02:43ID:???
globとopendirって使い分けで何か気をつけることある?
ファイル名を正規表現でいじるならはじめからreaddirのなかでpreg_matchする→opendir
簡単なパターンマッチ→glob
なのかなあと。こんなかんじ?
0656nobodyさん2007/04/09(月) 00:22:46ID:AitdzCc4
絵文字を?*****;形式に変換できませんか?
0657nobodyさん2007/04/09(月) 00:29:48ID:???
>>656
いきなり質問するより前に、まずは自分で試せ
0658nobodyさん2007/04/09(月) 00:41:33ID:???
>>655
つーか、PHPでWebサイト作るのに、正規表現使うほど複雑なファイル構造は登場しないし。
時々せいぜい出てきてもglob($dir.'/*')か、glob($dir.'/*.ext')くらいだな。
ごちゃごちゃしたデータは全部DBに入れた方が効率的。
0659nobodyさん2007/04/09(月) 00:41:52ID:???
&#*****;
の半角です、すみません
0660nobodyさん2007/04/09(月) 00:51:37ID:???
>>653
マニュアルぐらい読もうよ。

サンプルも載ってるんだし。
0661nobodyさん2007/04/09(月) 01:01:31ID:???
<html>
<head>
<title></title>
</head>
<body>
<?
echo $_SERVER['HTTP_USER_AGENT'];
?>
</body>
</html>

これにアクセスするとソースが
Array
(
)
<hr />
となります

正直わけわかりませんorz
どなたか助けてください・・・
06626612007/04/09(月) 01:03:13ID:???
あ、ごめんなさい。WEB制作板に書き込んだつもりでした。
専ブラの誤爆です。しつれいしました
06636612007/04/09(月) 01:03:55ID:AitdzCc4
>>662
これってPHP関係ないのですか?
0664nobodyさん2007/04/09(月) 01:05:42ID:???
ソースに問題ないから環境がおかしいな。
PHPをもう一度インストールしなおしてもなるなら質問してみろ。


※初回にIDをだして質問しましょう
0665nobodyさん2007/04/09(月) 01:11:29ID:AitdzCc4
>>664
すんません

Windowsなのでインストールではなく上書きしました。
しかし、直りません。

ブラウザも特に設定をいじっていません。
0666nobodyさん2007/04/09(月) 01:13:12ID:???
上書きはあんまり推奨しない。全部削除してからいれないせ。
あとブラウザはなにつかってんの?
0667nobodyさん2007/04/09(月) 01:14:09ID:AitdzCc4
>>666
全部削除して上書きしました。
ブラウザはIE6.0です。
0668nobodyさん2007/04/09(月) 01:18:49ID:AitdzCc4
すみませんでした・・・
<html>
<head>
<title></title>
</head>
<body>
<?
echo $_SERVER['HTTP_USER_AGENT'];
?>
</body>
</html>
にアクセスしてると思いきや、
Array
(
)
<hr />
が出力される別の.phpにアクセスしていましたorz
0669nobodyさん2007/04/09(月) 01:22:26ID:???
orz
0670nobodyさん2007/04/09(月) 01:22:26ID:???
       ヽ(・ω・)/   ズコー
      \(.\ ノ
0671nobodyさん2007/04/09(月) 01:40:10ID:xbEWIqwP
文字をprintすると、
ブラウザに?????と表示されてしまうのですが、
これはphp.intの設定に間違いがあるのでしょうか、
それとも、Apacheのほうでしょうか?
0672nobodyさん2007/04/09(月) 01:46:00ID:???
ブラウザでは?w
0673nobodyさん2007/04/09(月) 01:50:28ID:???
>>671
まさか貴様今年の新卒か!?

文字コードを勉強して来い!
0674nobodyさん2007/04/09(月) 02:04:28ID:xbEWIqwP
PHPの設定し直したら、正常に表示されました。
と思ったら次は、mysqlが使えなくなった・・・
0675nobodyさん2007/04/09(月) 02:14:40ID:???
>>674
OS再起動してMySQLが立ち上がってないとかじゃないだろうな

そうじゃないならphp.iniのMyS
0676nobodyさん2007/04/09(月) 02:30:23ID:xbEWIqwP
mysqlを有効にする場合は、
php.intの;extension=php_mysql.dllの「;」を外すだけでいいんですよね?
Apacheを再起動してphpinfoで確認しても、
mysqlの情報がでてきません。

おかしいな・・・php.intを設定し直すまでは、
mysqlの情報出てたんですけど。
0677sage2007/04/09(月) 02:42:16ID:ukAGIvQQ
・・・
0678nobodyさん2007/04/09(月) 02:56:36ID:xbEWIqwP
PC再起動したらmysqlの情報でてきました
おさがわせして申し訳ございませんでしたwww
0679nobodyさん2007/04/09(月) 03:01:20ID:???
.int
0680nobodyさん2007/04/09(月) 03:09:37ID:xbEWIqwP
>>679
O型・・・
0681nobodyさん2007/04/09(月) 03:11:39ID:Lr1gb1O7
ht★tp://77.xmbs.j★p/kid66666/←★は抜いてね!
◎マル秘!総合サイト! m(__)m《どろろ》m(__)m
超人気!完全決定版です!ホスト掲示板・風俗掲示板お水掲示板・総合掲示板
ブラックOK!必殺金融屋!超激安噂の車屋さん☆
このサイトを知らない者は必ず損します(--;)!!
0682nobodyさん2007/04/09(月) 03:40:07ID:???
一回きりのミスだったらタイポかも知れんと突っ込まれないだろうが、何回もintって書いてるから突っ込まれるんじゃね?
0683nobodyさん2007/04/09(月) 03:47:43ID:???
整数型ファイルなのか・・・
0684nobodyさん2007/04/09(月) 04:01:04ID:???
interface
0685nobodyさん2007/04/09(月) 04:20:52ID:vh2gxFaj
ソートに関して質問です。

$elemA[0]="りんご";
$elemA[1]=0.23;
$elemB[0]="みかん";
$elemB[1]=0.21;
$elemC[0]="ばなな";
$elemC[1]=0.11;
$array[0]=$elemA;
$array[1]=$elemB;
$array[2]=$elemC;

とされた$arrayを各要素の2つ目の要素の数字でソートしたいのです。
関数sort()はこういう使い方を想定して無いみたいなので困っています。
こういう場合どうすればいいのでしょうか?
0686nobodyさん2007/04/09(月) 04:26:35ID:???
usort
0687nobodyさん2007/04/09(月) 04:49:00ID:xbEWIqwP
.インポ
0688nobodyさん2007/04/09(月) 05:24:42ID:kaHzWtZF
ごめん、色々調べたんだけど全然わからんから質問いいかな?

PHPでSmartyが使いたくてダウンロードして特定のディレクトリにコピーした後、
php.iniのinclude_pathにそのディレクトリへのパスを設定。

んでrequire_once("Smarty.class.php");ってやるとSmarty.class.phpが見つからないって言われる。
見たところパスはちゃんと設定されてて、反映もされてるし、Smarty.class.phpもある。
Apacheはちゃんと再起動したし、なんでエラー?みたいな。

ちなみにSmartyだけじゃなくて他のファイルも同じような状況。
カレントディレクトリとかは普通に読み込めるんだけど、/usr/local/...とかになると無理。
前はApacheもPHPもソースをコンパイルして入れててその時はちゃんと動いてたんだけど、
パッケージに入れ替えてから動かなくなった・・・。

これって何が原因が原因なのかわかる人いる?
0689nobodyさん2007/04/09(月) 05:30:23ID:kaHzWtZF
ごめん、環境書き忘れたorz

環境はFedora6、Apache2.2、PHP5
0690nobodyさん2007/04/09(月) 06:32:22ID:???
permission deniedじゃなくて?
0691nobodyさん2007/04/09(月) 07:21:43ID:???
ソフトバンクのページってHTML対応表とかないんだな、糞だ
0692nobodyさん2007/04/09(月) 07:55:44ID:???
$array = array("ABX"=>"テスト");
のとき
foreach($array as $key=>$value){
   echo $key;
}
で、「ABX」を表示できるけど、
echo $array['ABX']がそのままテストと表示されるように
ABXを表示できないの?
0693nobodyさん2007/04/09(月) 08:14:03ID:???
array_search()で検索するとか、array_flip()で反転させるとか
0694nobodyさん2007/04/09(月) 08:18:52ID:???
>>693
「テスト」の部分が空白のとき
array_flipなら []=>ABXになるけど
直接echoにできないね
06956442007/04/09(月) 08:34:27ID:WcujzhhQ
>>644
自己解決しました。
なんとか複数のIPを連続的に国判別する方法が見つかりました。
お騒がせいたしました。
0696nobodyさん2007/04/09(月) 09:10:50ID:???
>>688
php.iniが本当に機能してるの?
0697nobodyさん2007/04/09(月) 10:37:50ID:iVxz/LH1
>>690
最初パーミッションかと思ったんだけど、エラーにはパーミッションのエラーは出ててなくて、
ただファイルが見つからないっていう表示がでるだけ。

>>696
phpinfo()見る限りでは/etc/php.iniを読みにいってるようになってる。
get_include_path()で設定されてるパスを調べてみたら設定が反映されてるみたいだからちゃんと機能はしてると思う。
ただなぜか読み込めない。

なんだこれ。orz
0698nobodyさん2007/04/09(月) 10:41:36ID:???
>>697
Smarty って現在バージョンは、インストール直後、スクリプトファイルは、Smarty/libs/*phpにあるので
そこはチェックした?
0699nobodyさん2007/04/09(月) 11:07:06ID:SC5xLpVK
半角の + をGETメソッドで取得する際にどのようにするべきでしょうか?

普通に hoge.php?value=+ とやっても取得できません。やはりエンコードすべきなのでしょうか?
0700nobodyさん2007/04/09(月) 11:15:57ID:???
>>699
そういう問題ではなくて、そもそも+を値として扱うというのが不正規
RFC2396の2.2.Reserved Charactersを見ましょう。
+は、あなたがやってるuriの?、=と同等の扱いです
0701nobodyさん2007/04/09(月) 11:18:43ID:SC5xLpVK
>>700
ありがとうございます。

具体的に+を値として認識させてGETで取得するにはどのような方法があるのでしょうか?
0702nobodyさん2007/04/09(月) 11:20:00ID:SC5xLpVK
>>700
ありがとうございます。

具体的に+を値として認識させてGETで取得するにはどのような方法があるのでしょうか?
0703nobodyさん2007/04/09(月) 11:22:39ID:???
わざわざreservedされてるものを、どうしてもっていうのがわからんけど、
・・・どうしてもしたいなら、encodeすればいい。

0704nobodyさん2007/04/09(月) 11:27:53ID:SC5xLpVK
>>700
ありがとうございます。
URIから抜く際、たとえばPathが /hoge/appl/itemの場合 スラッシュ(/)の3番目以降の値(item)を取り出すにはどうすればいいのでしょうか?

0705nobodyさん2007/04/09(月) 11:31:43ID:???
まだ春休みなのか?
0706虚弱PHP2007/04/09(月) 11:33:53ID:???
>>654
SHA1使ってたけど、SHA512+Saltに変更した。
0707nobodyさん2007/04/09(月) 12:11:27ID:???
shaは構造が欠陥だから、心配するならtigerにすればいい。
漏れてもいいような情報ならmd5でもいいんじゃないかね。
0708nobodyさん2007/04/09(月) 12:21:35ID:4ZyIPEha
>>698
チェック済みです。
yum install php-smartyでパッケージでいれると
/usr/share/Smatyにインスコされるみたいなんですが、そこにパスを通しても読めないorz

というかSmatyじゃなくてもPEARとかでもなんでもそんなかんじです。

これはもうOSごと最インスコかな、、、
0709nobodyさん2007/04/09(月) 12:21:42ID:???
おれは独自の暗号化アルゴリズムを作ってる
0710nobodyさん2007/04/09(月) 12:35:15ID:???
>>708
×Smaty
○Smarty
のタイポと思うが、それはそれとしてOSごと再インスコっていうのはヤケクソみたいだから
やめようぜw
とりあえず
ini_set ('include_path','パス名:パス名');
で明示的に指定しても駄目なの?
なんかすごくプリミティブなところで確認ミスしてる気がするぞなんか。
0711nobodyさん2007/04/09(月) 12:41:08ID:???
やっぱあれだよね。自鯖の開発環境の個別のアプリは、
ソースコンパイルする技能があるなら、とりあえずそれでやるべきだよね。
パッケージインストールは、カーネルとか、そういうのに限るべきだと思う。
問題の切り分けが出来なくなるわw
0712nobodyさん2007/04/09(月) 12:55:42ID:W+dKCXXH
ユーザーからの入力文字をhtmlspecialcharsを使わずに独自に無害化するコードを書いてます。
<
>
&
"
'
これらの文字以外に正規表現などで使われるメタ文字も無害化するべきでしょうか?
0713nobodyさん2007/04/09(月) 12:56:11ID:???
問題が100%発生しなくなるくらい安定すればいいんだけどね
0714nobodyさん2007/04/09(月) 12:56:42ID:???
>>712
なんのために自作でやってんの?
0715nobodyさん2007/04/09(月) 13:05:04ID:???
1つのページで
投稿→確認画面→投稿完了
をするときにうまいこと分ける方法ないかな・・・
皆どんな感じでやってる?

値無し=投稿
$_POSTのみ=確認画面で$_POSTをセッションに
$_POST+$_SESSION=投稿完了

これがベストかな?
0716nobodyさん2007/04/09(月) 13:10:28ID:W+dKCXXH
>>714
作法を学習するために独自で作りたいと思ってます。
他の言語にも作法を適用したいためなんですが無駄にやりすぎですかね?
0717nobodyさん2007/04/09(月) 13:11:59ID:???
>>715
multipart扱う場合は、それじゃ駄目だろうな。$_FILE処理も必要
0718nobodyさん2007/04/09(月) 13:16:01ID:???
>>715
だめじゃないかな。
ブラウザで投稿画面に戻ったときに既にセッションに値入ってるもん。
それだと、投稿画面に戻る→修正して投稿したときに確認が画面がスルーされて完了しちゃうよ。
formのhidden値で区分けるべき。あと、上に書かれてる$_FILEの扱いも気をつけてね。
0719nobodyさん2007/04/09(月) 13:23:34ID:VhSqsDLr
サーバの監視スクリプトみたいのを作りたいのですが、
IPアドレス:ポート番号で接続を試行して、応答が返ってきたらtrueを返す。
みたいな都合のいい関数ありませんでしょうか?
0720nobodyさん2007/04/09(月) 13:31:52ID:???
>>719
PHP5ならstream_socket_clientで一発
4ならphp socket ping あたりでググレ。ping系スクリプトが転がってる。
0721nobodyさん2007/04/09(月) 13:48:05ID:VhSqsDLr
>>720
pingが通らなかったので、pingを使わない方法を探していましたが、
これでいけるようです!どうもありがとうございました。
0722nobodyさん2007/04/09(月) 13:51:09ID:???
>>716
組み込み関数のほうが遙かに速い。
0723nobodyさん2007/04/09(月) 13:53:07ID:???
速度じゃなくて勉強のために作ってるんだろ。
>>712
RFCをよみながらエスケープすべき文字を見極めてやればよし。
0724nobodyさん2007/04/09(月) 14:10:56ID:???
勉強ならC言語とかでやらないと意味が無いだろう。
PHPなんかだと組み込みの高機能な関数が多すぎる。
0725nobodyさん2007/04/09(月) 14:11:29ID:???
PHPで車輪の再発明するぐらいならCの勉強した方がよさげ
0726nobodyさん2007/04/09(月) 14:24:21ID:kaHzWtZF
>>710
レスサンクスです。
試してみたけどやっぱりダメだた・・・。

状況としてはこれにかなり近い感じ。

[PHP-users 30825] Pear DBでのエラー
http://ml.php.gr.jp/pipermail/php-users/2006-November/031342.html
0727nobodyさん2007/04/09(月) 14:33:36ID:W+dKCXXH
アドバイスありがとうございます。
htmlに出力するときはhtmlspecialcharsで対象となる文字のみ対策しておけばXXS対策になるんでしょうか?
0728nobodyさん2007/04/09(月) 14:49:59ID:???
>>726
Smarty 以外のファイルはちゃんと読めるのか?
0729nobodyさん2007/04/09(月) 14:57:00ID:kaHzWtZF
>>728
Smarty以外も読めんですorz
ファイルの種類というよりもむしろ、ディレクトリの場所によって読めるか読めないかみたいな感じで、
カレントディレクトリとかドキュメントルート以下(/var/www/html/〜〜)の中にあるファイルなら普通に読めるんですけど、
/usr/〜〜とかそれ以外の場所になるとパスが通ってても読めない状況です。

0730nobodyさん2007/04/09(月) 14:58:33ID:???
>>729
セーフモードでアクセスが制限されている可能性は
確かめた?
0731nobodyさん2007/04/09(月) 15:05:50ID:???
>>727
クライアントからの入力データだと思うもの全てをhtmlspecialcharsに突っ込んでも安全とは限らない。

本質的にXSSはプログラマがクライアントからの入力全てに気を配らないと起こり得る。
環境変数もどれが任意でどれがそうでないかを全て把握してる人はそういない。
よって、HTML出力を必要としない部分全てをhtmlspecialcharsに突っ込むのが安全。
尤も、タグの属性値なんかに突っ込むならそれでも不十分。そんな設計は見直すべきだが。
0732nobodyさん2007/04/09(月) 15:09:03ID:kaHzWtZF
>>730

セーフモードっていうのがよくわかってないんですが、
php.iniを見てみたら

safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH

みたいになってます。
0733nobodyさん2007/04/09(月) 15:20:55ID:???
>>729
seLinuxが有効になっている可能性は?
0734nobodyさん2007/04/09(月) 15:28:35ID:kaHzWtZF
>>733
ああああああああああああああ!

# getenforce



Permissive





鬱すぎるorz
0735nobodyさん2007/04/09(月) 15:44:55ID:???
>>734
うん、で?
0736nobodyさん2007/04/09(月) 15:51:53ID:kaHzWtZF
>>735
seLinuxは無効になってたっぽいです。
もうほんとなにが悪いんだか・・・。
0737nobodyさん2007/04/09(月) 16:34:56ID:R/Jf3MPV
お知恵を貸してください。
最近よく私が管理しているWikiにスパムが飛んできて困っているのですが、
$_POST['msg']に入っている本文から英字だけ抜き出す場合どうすればいいのでしょうか。
それを使って英字の文字数によりスパム弾きをしたいと思っているのですが…
0738nobodyさん2007/04/09(月) 16:37:16ID:???
[a-z]
0739nobodyさん2007/04/09(月) 16:39:28ID:R/Jf3MPV
>>738
eregを使うという所までは思いついたものの、
ループ処理で文字を次々ヒットさせる際の処理が思い浮かばず…
0740nobodyさん2007/04/09(月) 16:41:23ID:???
while(){substr(************************************);
ふぬああああああああああああああああああ
[a-z]
}
うんこ。
0741nobodyさん2007/04/09(月) 16:48:59ID:???
情報は小出しじゃなく一度に出したほうがいいぞ
答える方も質問してる方も時間の節約になる
エスパーが登場すればこの限りではないが
0742nobodyさん2007/04/09(月) 16:54:25ID:???
preg_match_all
0743nobodyさん2007/04/09(月) 17:03:39ID:???
allなんてむだなものもひろうからpreg_matchがいいよ
0744nobodyさん2007/04/09(月) 17:13:48ID:???
>>736
で、あえて聞くけど

require_once(フルパス);
もエラーになるの?

あるいは
echo file_exsists(フルパス);
はtrue返るの?
0745nobodyさん2007/04/09(月) 17:15:02ID:???
上のフルパスはフルパス.file名の意味
0746nobodyさん2007/04/09(月) 17:16:23ID:R/Jf3MPV
>>740
有難う御座います。
参考にしながらこんなのを組んでみました…

$msg = $_POST['msg'];
$eng_num = 0;
$i = 0;
//コメントスパム対策
while($i<=strlen($msg)) {
$i++;
$num = substr($msg,$i,1);
if (ereg('[a-zA-Z0-9]',$num)) { $eng_num++; }
}
if (strlen($eng_num)>50) { die; }

…が正しく実行されないのは置いといて、
大体こんな感じでいいのでしょうか。
0747nobodyさん2007/04/09(月) 17:26:22ID:???
ord使いたいな

$msg = $_POST['msg'];
$eng_num = 0;
$i = 0;

while( $char = ord($msg[$i++])) !=0) {
  if (ereg('[a-zA-Z0-9]',$char)) { $eng_num++;}
if($eng_num > 50 ) {die('invalid post');}
}
0748nobodyさん2007/04/09(月) 17:33:34ID:???
>>747
それは動かんだろ
$msg配列じゃないし、eregがへん。
0749nobodyさん2007/04/09(月) 17:33:38ID:R/Jf3MPV
>>747
有り難う御座います!
バイト後にやってみます。
0750nobodyさん2007/04/09(月) 17:34:07ID:???
あ、そうだな。なかったことにしてください。
0751nobodyさん2007/04/09(月) 17:54:18ID:???
>>743
無駄なものってなんですか?

preg_match_all('/\w/',$_POST,$c);
if (count($c[0]) > 50) die();
で問題が出る?
0752nobodyさん2007/04/09(月) 20:35:33ID:???
セッションって、一度クッキーに置き換えてるのですか?
■ このスレッドは過去ログ倉庫に格納されています