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

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

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

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 45 (※実質48)
http://pc11.2ch.net/test/read.cgi/php/1180181033/

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

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

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0632nobodyさん2007/07/05(木) 00:19:48ID:???
>>631

   NG

0633nobodyさん2007/07/05(木) 00:28:48ID:zUNo1syV
>>631
*.class.phpはどこかでみたことあるな
ウチの会社は何故か *.inc で統一されとる

>>632
いや、まあウチのボスと同じ思考だろうが
富豪プログラミングしようぜ
0634nobodyさん2007/07/05(木) 00:30:24ID:???
>>630
Javaっぽく書くよ
1. 内部クラス見たいな感じはたまにあるかも
2. Test.class.php とか
0635nobodyさん2007/07/05(木) 00:40:51ID:???
>>630
1.yes
2.当然.php。セキュリティ対策上も当然
0636nobodyさん2007/07/05(木) 00:50:49ID:6puUMu+N?2BP(0)
連想配列の文字コードを変換したいとき、
mb_convert_variables() を使うと思うのですが、キーまで変換してくれません。
ttp://cl.pocari.org/2006-11-04-1.html
キーが変わってしまうとかは置いといて、キーも一括で変換してくれる方法はないものでしょうか。
0637nobodyさん2007/07/05(木) 00:52:01ID:zUNo1syV
>>634
> 1. 内部クラス見たいな感じはたまにあるかも
あるある

>>635
> 2.当然.php。セキュリティ対策上も当然
ってことは、外部ファイル(?)もWebドキュメントルート以下に置いてるのかな
ウチの場合、直接は触れないとこに置いちゃうのよね

いろいろ回答サンクスコ
0638nobodyさん2007/07/05(木) 00:56:51ID:???
>>636
配列の値がユニークであれば
ttp://www.php.net/manual/ja/function.array-flip.php
と組み合わせでいけんじゃね

個人的な感想としては
ハッシュキーがマルチバイト文字列なのは気持ち悪い
06396352007/07/05(木) 01:01:22ID:???
>>637
>Webドキュメントルート以下に置いてるのかな
仕様上、そんなバカなことはするわけない。
しかし万一、サーバ設定の変更のミスなどで、includeされる可能性すらありえるのを回避することが
大切。その程度のことも考えてない会社は先が知れてる。
0640nobodyさん2007/07/05(木) 01:05:45ID:zUNo1syV
>>639
おう?
んじゃなぜ拡張子を.phpにするのが「セキュリティ上当然」なんでう?
0641nobodyさん2007/07/05(木) 01:47:55ID:okrNhbcx
>>460
>tableなら、table で対象範囲を切り取り、 <tr>で改行(explode) した後<td>でexplodeして配列形式にする
>あとはゴミを取っ払って、foreachループでCSV形式に書き出し

どうやって ごみを取り払うのでしょうか?
0642nobodyさん2007/07/05(木) 01:57:03ID:???
php5のPDOってクオート(サニタイズ?)の必要なしですか?
0643nobodyさん2007/07/05(木) 02:40:38ID:???
>>639
知ったか乙。
何が危険かはっきり理解してない奴は
おっかなびっくり慎重になっても理解してないから危険。

「何となく危なそうなのでこうしておきましょう」って奴らと同じ。
こういう奴のコードで安全だったものを見たことがない。
0644nobodyさん2007/07/05(木) 02:52:09ID:Ymm57H9J
こんな時間に申し訳ありません。
http://www.phppro.jp/school/phpschool/vol2/3
上のサイトの通りにTeraPadの文字コードを設定したのですが
TeraPadでソース書いたやつをブラウザで確認するとどうしても文字化けしてしまいます。
メモ帳で同じようにソース書いてブラウザで表示すると文字化けは直ります。
でもTeraPadでソース書きたいです。
何か間違っているのでしょうか。
誰か助けてください。よろしくお願いします。
0645nobodyさん2007/07/05(木) 03:05:39ID:???
EUCで保存はされてるとして

ブラウザの文字コードが何になってるか確認しる
IEだと表示->エンコード
IEの場合だと最近ではHTMLのメタタグで文字コード設定しておくと
大抵は化けないぞ
0646nobodyさん2007/07/05(木) 03:26:42ID:???
>>644
TeraPadは俺も文字コードでこけた経験あるけど
どういう条件で発生するのか忘れたw

まあ、慣れるとシンプルで使いやすいけど補完機能もないし
手っ取り早いく他のエディタを使うことをオヌヌメする
0647nobodyさん2007/07/05(木) 03:35:06ID:???
>>642
PDOはどうだか知らんがpearのDBだと
プリペアドステートメントを使う場合
値が勝手にエスケープされるようになってた

SQLを直書きする場合は
あたりまえだけど自分でやらなあかんよ

とりあえず参考まで
ttp://memo.blogdns.net/phpsecurity.html
0648nobodyさん2007/07/05(木) 03:35:40ID:zJ6CpJHf
>>643
危険な例を2,3あげて
0649nobodyさん2007/07/05(木) 03:40:32ID:???
>>642
プレースホルダを使うなら必要ない。
0650nobodyさん2007/07/05(木) 04:00:40ID:???
>>648
1.直接アクセスされたときに、思わぬ脆弱性が生まれることがある
2.おまえみたいな奴がコードをイジってる
0651nobodyさん2007/07/05(木) 04:06:00ID:zJ6CpJHf
>>650
期待してたのに。。。
0652nobodyさん2007/07/05(木) 04:34:41ID:???
>>644
俺がPHPを伝授するスレ参照
0653nobodyさん2007/07/05(木) 05:18:54ID:???
インクルードするファイルは拡張子無くても動くんだけどな
ドキュメントルート配下以外なら、incでもphpでも好きに汁
0654nobodyさん2007/07/05(木) 05:49:05ID:KW++BsLp
>>608
「PHP」 はスクリプティング言語の名前でもありますし、 その処理系の名前でもあります。
「PHPをインストールする」 と言った場合、 その 「PHP」 はスクリプティング言語の処理系を指します。
06556362007/07/05(木) 07:35:24ID:????2BP(0)
>>638
うーん。値がユニークじゃないんだよな。これ…。
他人が書いたコードなので、私的にも気持ち悪いと思ってた。やっぱむりぽい?
0656nobodyさん2007/07/05(木) 07:48:31ID:9+81epYj
if ($condition == 1 || $condition == 2 || $condition == 3 || $condition == 4)
という条件文なんですが、
もっと綺麗な書き方はありませんか?
0657nobodyさん2007/07/05(木) 07:56:31ID:???
if (ereg_i("[1-4]", $condition) == TRUE)
06586552007/07/05(木) 08:20:49ID:???
>>657
どうもありがとうございます。
正規表現でチェックとは思い浮かびませんでした。
早速つかわせていただきます。
0659nobodyさん2007/07/05(木) 08:21:07ID:???
PHPはどこに置いても動いてしまうから
チーム内の新人とかがドキュメントルート下に置いてしまうなどの可能性がある。
そうなったときに.phpにしておかないと
直接アクセスされてソースが流出するってことでしょ。
0660nobodyさん2007/07/05(木) 08:29:06ID:???
apacheならファイル名の前に.htをつければ完璧。
0661nobodyさん2007/07/05(木) 09:04:12ID:???
普通はWEBサーバー構築の際から
.phpと.html系と画像系以外は直アクセス禁止にして
他はシステムにあわせて拡張子開放は方向にするもんじゃないの?
もしくはhtaccessに書く
でないと後任がファビョって何するかわからんじゃないか・・・
0662nobodyさん2007/07/05(木) 09:13:21ID:???
>>658
正規表現よりは
if(in_array($condition,range(1,4)))
とかのほうが…。
0663nobodyさん2007/07/05(木) 10:18:13ID:???
>>661
ファイルの直アクセス禁止なんかできんの?
リファラーは偽装されるよ
0664nobodyさん2007/07/05(木) 10:21:13ID:???
ん言っている意味がわからn
0665nobodyさん2007/07/05(木) 10:23:14ID:???
>>655
ループ自作するほうがいいよ。マルチバイト変換失敗するのも回避できるし。
0666nobodyさん2007/07/05(木) 10:26:41ID:???
>>640
サーバ設定およびphp.ini設定に依存しなくてすむ対処範囲が広がるからだよ。
基本だろ。
0667nobodyさん2007/07/05(木) 10:36:55ID:???
>>663
なにをいっとるんだ?
それとも何か君のところのWEBサーバーはリファラー偽装したら
.htaccessなんかに直接アクセスして読み込めるのか?
0668nobodyさん2007/07/05(木) 11:07:01ID:???
>>643
またお前か。いい加減消えろクズ
0669nobodyさん2007/07/05(木) 11:25:15ID:???
>>666
具体的には?
0670nobodyさん2007/07/05(木) 11:51:54ID:???
yourfilehostのエロいやつ探すスクリプト書いたんだが
すぐにタイムアウトになる。
<?php
set_time_limit(100);
for($i=1;$i<=12;$i++){
 f(strlen($i)==1){
   $month = "0".$i;
  }else{
   $month = $i;
  }
  for($j=1;$j<=31;$j++){
   if(strlen($j)==1){
    $day = "0".$j;
   }else{
    $day = $j;
   }
   for($k=1;$k<=12;$k++){
    $num = $k;
    $url = "http://www.yourfilehost.com/media.php?cat=video&file=";.$month.$day."sbs_".$num.".wmv";
    $file = file($url);
    if(count($file)==1){  //ファイルがない場合
     break;
    }else{
     echo $url."<br>";
    }
  }
 }
}
?>
0671nobodyさん2007/07/05(木) 11:55:18ID:???
>>668
かなりIQ低いなお前。

生きてる価値あんのかよw

0672nobodyさん2007/07/05(木) 12:10:47ID:???
必死〜必死〜必死〜オーレ♪
0673nobodyさん2007/07/05(木) 12:17:15ID:???
>>670
f(strlen($i)==1){ → if(strlen($i)==1){
はおいておいて、

直リン禁止だったら、Referer をみてたり、UserAgentみてたりする可能性有り

とりあえず wget url名 で取得出来るんかどうか確認してみたら。


>>.671
やっぱライトウエイトな言語だから、民度が相当低い >>.671 みたいなのも混じるんだな。
IQとか学歴とか持ち出すやつに限って相当低かったりする罠
0674nobodyさん2007/07/05(木) 12:47:14ID:???
>>673
wgetってPHPの関数かと思ったらそうじゃないんだ。
使い方わからない\(^o^)/

とりあえず、これで何とかした
set_time_limit(0);
0675nobodyさん2007/07/05(木) 12:54:20ID:???
>>673
おまえ「民度」って意味知ってるのか?w

小学校から国語の勉強しなおしてこいや クズ

0676nobodyさん2007/07/05(木) 13:00:42ID:???
>>669
質問したいならID出してね
0677nobodyさん2007/07/05(木) 13:07:34ID:???
基地外が暴走中だな。
あぁ、基地外だから平常時でこれなのか。笑
0678nobodyさん2007/07/05(木) 13:21:32ID:???
>>674
コマンドラインのダウンローダー、画像とか一気にブッコ抜きたいときにつかう。

リンクが乗ってる一覧ページまでは、先にphpで取得しておいて、

そのリンクから取得したいリンクを1行ごとにファイルに書き出して

wget -i (書き出したファイルのパス)

みたいにする。ちなみにwindows用もある
0679nobodyさん2007/07/05(木) 13:29:28ID:???
(・c_・`) .。oO(クズなのにうるさい人がいるわけだぁ…
0680nobodyさん2007/07/05(木) 13:36:58ID:???
>>667
"直接"アクセス禁止って書いてるから
リファラーで判断するのかなって思っただけ。
<Files>で完全に見えなくするのとはまったく別の話。
0681nobodyさん2007/07/05(木) 14:39:50ID:???
アクセス禁止にリファラーで判断することが謎なんだがだ・・・
0682nobodyさん2007/07/05(木) 14:43:23ID:???
また厄介な粘着が増えそうだからもう突っ込まないであげたほうが・・
0683nobodyさん2007/07/05(木) 15:09:41ID:???
セキュリティの話でリファラで判断はないよな・・・
0684nobodyさん2007/07/05(木) 15:19:52ID:???
すいませんが、教えてください。

CSVからデータを取り出すのにせいこうしたのですが、
HTMLコードである<br>を取り除きたいのですが、いい方法がありますか?

お願いします。
0685nobodyさん2007/07/05(木) 15:21:14ID:???
>>684
strip_tags
0686nobodyさん2007/07/05(木) 15:27:13ID:???
>>685
ありがとうございます

strip_tags($text, '<br>');

ただ、これだと逆に<br>だけのこってしまいますが、削除するほうほうがないでしょうか?
0687nobodyさん2007/07/05(木) 15:33:51ID:???
str_replace("<br>", "", $text)
0688nobodyさん2007/07/05(木) 15:47:49ID:???
>>687
感謝です!
0689nobodyさん2007/07/05(木) 17:09:38ID:???
俺だったらstrtrに配列を渡す。
0690nobodyさん2007/07/05(木) 17:12:04ID:???
>>689
独り言ですか?
0691nobodyさん2007/07/05(木) 18:01:12ID:???
改行コードを<br>に書き換えたいのですが
str_replace("\n", "<br>", $text)
これだと改行された上に<br>が追加されてしまいます。
完全に置換するにはどうすればよいでしょうか?
0692nobodyさん2007/07/05(木) 18:08:04ID:???
>>691
str_replace(array("\r\n", "\r", "\n"), "<br>", $text)
0693nobodyさん2007/07/05(木) 18:09:18ID:???
>>692
\rも考慮しないといけなかったのですね。ありがとうございました。
0694nobodyさん2007/07/05(木) 18:13:11ID:5ImFLVVz
以前、添付メールもしくはアップロードについて質問したものですが

Q、確認画面にまでテキストフォームだけでなくアップロードフォーム結果を持っていき、
  投稿ボタンを押して初めてアップロードさせたい。

A、無理。確認の時点で一時的にアップさせて、後で消すしかない。

mixiは テキスト+画像選択フォーム→確認画面(ローカルファイルのアドレス表示)→実質投降
となっていますが、やっぱり一時的にアップしてますよね?

>>691
\nじゃ足りない とりあえず nl2br()
0695nobodyさん2007/07/05(木) 18:21:12ID:???
>>694
mixi内部が実際どうなのかは知らんが、
フォーム→post→一時workディレクトリにmove_uploaded_file

→確認OKなら本当の保管場所に移動、
→途中中止ならworkディレクトリ内の該当ファイル除去、途中でブラウザブチ切りされたファイルはcronで定期的に除去

みたいにやるのが普通かと。途中で画像加工(crop,resize等)を挟む時もwork内で持ち回し出来るし。
0696nobodyさん2007/07/05(木) 18:46:20ID:???
>>694
js使えば一時的にアップしなくても、できるんじゃない?

ただmixiの場合は恐らく一時フォルダにアップしてる
0697nobodyさん2007/07/05(木) 19:00:17ID:???
>>696
<input type="file">にvalueを入力できるならできるだろうけど
無理だと思うのであきらめたほうがいいと思う
0698nobodyさん2007/07/05(木) 19:06:40ID:5ImFLVVz
>>696
>js
具体的に何をさせるのでしょうか?
0699nobodyさん2007/07/05(木) 19:31:32ID:???
javascript ローカルファイルでぐぐれ
0700nobodyさん2007/07/05(木) 19:43:38ID:5ImFLVVz
>>699
了解しました。
0701nobodyさん2007/07/05(木) 19:45:06ID:5ImFLVVz
>>699
>JavaScript が訪問者のローカルファイルにアクセスできるのは、クッキーだけです。
引き返してきました。
07026952007/07/05(木) 21:55:11ID:???
>>701
input type='file'については hidden使ったり、javascriptで持ち回しは出来ないよ。
(かなり昔試したことある)
あきらめて一時的にワークに上げるように汁



一応下記も参照
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1854&forum=7
0703nobodyさん2007/07/05(木) 22:12:22ID:???
>>694
かなり無理やり技ならできんこともない
1. ユーザが入力フォームポチ
2a. upってきたファイルの内容をセッション変数にブチコム
2b. upってきたファイルの内容をbase64変換してhiddenタグにブチコミ=>確認画面に送り返す
3. ユーザが確認フォームポチ
4a. セッション変数から内容とりだしてファイル作成
4b. POSTで渡ってきたやつをデコードしてファイル作成

これなら2の時点でworkファイルを作成する必要はないが
本末転倒な気がするのは気のせいではない
0704nobodyさん2007/07/05(木) 22:24:32ID:???
>>703
2b.みて
alt.binariesとかで必死にエロ写真集めてたのを思い出してしまった
0705nobodyさん2007/07/05(木) 22:36:16ID:???
おいおい、POSTで持ち回すって事は、結局
一回サーバー側にデータが一時的に記憶されるだろ。

解答してる奴は質問自体がおかしい事に気づけよ。

tempフォルダに保存しないで持ち回したところで
無駄なメモリを大量に消費するだけ。
メモリ足らなくてswapしてれば実際HDDに
データが一時的に保存される。
0706nobodyさん2007/07/05(木) 22:39:15ID:???
>>705
本末転倒って書いてるみたいだが。
0707nobodyさん2007/07/05(木) 22:48:40ID:???
swap発生するほど永続的に持ちまわすとは書いてないだろw
0708nobodyさん2007/07/05(木) 22:54:57ID:RGCqp4CW
phpで画像掲示板うpしたんですがエラーログに
File does not exist: /var/www/home/*****/public_html/favicon.ico
と出ています。(*****は伏せ字にしました)
自分でテストした限りではエラーは確認できなかったのですが
ほかの人の環境でエラーが出ているのでしょうか?

0709nobodyさん2007/07/05(木) 23:16:31ID:SLYFGG6J
あ、ちょうどアップローダーのお話しの際にメモリのお話しにもなったので質問を。

共有サーバーでスクリプトを動かす際、
「どれだけCPUに負荷がかかった」とか「どれだけメモリをつかった」
みたいなのはPHPではわからないものですかね?

>File does not exist: /var/www/home/*****/public_html/favicon.ico
適当な答えですが、たしかIEが自動でアイコン(favicon.ico)をとりにいくから
アイコンがないとエラーログとして残るのでは?
0710nobodyさん2007/07/05(木) 23:38:30ID:???
>>709
*nix系ならば

php直なら、getrusage()とか

system経由なら、pid(getmypid()でとれる)指定でsar とか ps auxfとか (+ watchの組み合わせも)


詳しくは man で調べてみ
0711nobodyさん2007/07/06(金) 00:02:10ID:???
>>709
サンクス
解決しました
0712nobodyさん2007/07/06(金) 00:44:44ID:???
絶対パスでインクルードしたいのですが

include("/home/xxx/www/test.php");

という風に長いので"/home/xxx/www/"の部分を省略して
include("/test.php");
のようにするには、どうすればいいですか?

ini_set("include_path", ".:/home/xxx/www");
とやってみても変化なしでした
根本的に使い方間違ってます?
0713nobodyさん2007/07/06(金) 00:46:12ID:???
>>712
相対パスでググれ
0714nobodyさん2007/07/06(金) 00:53:10ID:???
ini_setはそのままで

include("/test.php");

include("test.php");
0715nobodyさん2007/07/06(金) 00:57:39ID:???
>>712
1行目の記述通り相対じゃなくて絶対パスなら

define("HOGE", "/home/xxx/www");を共通のconfigファイルとかに宣言しておいて
include(HOGE."/test.php");

相対パス指定なら / イラネ

0716nobodyさん2007/07/06(金) 01:43:51ID:???
ini_set("include_path", ini_get("include_path") . ":/home/xxx/www");
のほうが環境にやさしくね
0717nobodyさん2007/07/06(金) 02:10:14ID:???
不特定のサーバですぐ使えるよう相対パスのほうがいい
0718nobodyさん2007/07/06(金) 02:20:16ID:???
どうでもいいよ
0719nobodyさん2007/07/06(金) 02:30:25ID:???
どうでもいいのはおまえだけでいいよ
0720nobodyさん2007/07/06(金) 02:35:51ID:???
レス感謝です

設定ファイルがいじれるかどうか不明なので
define〜を記述したphpを置いてrequireなどで呼び出してみたらうまくいきました

include_pathの事をえらい勘違いしてたようなのですが、include_pathで設定した
下の階層を指定する場合は、絶対パスはNGで相対パスはOKって事になるんですか?
基点の設定ができたとおもって絶対パスでやるものだと思っていました
0721nobodyさん2007/07/06(金) 03:07:15ID:???
まず貴様は絶対パスと相対パスの書き方を覚えるところからスタートしろ
話はそれからだ
0722nobodyさん2007/07/06(金) 03:49:08ID:???
どうでもいいよ
0723nobodyさん2007/07/06(金) 04:55:35ID:i/Ome2c4
パーミッションについて質問です。
phpをアップロードするとき755とか705とかファイルによって設定すると思うのですが、
どういうファイルにどう権限をつけていいのかわかりません。
よくphpスクリプトは755、データファイルは644というのを聞きましたがどういう意味なんでしょうか?
0724nobodyさん2007/07/06(金) 05:15:44ID:???
いくらなんでもそれくらい本やweb探せばいくらでもあるじゃんかよー
0725nobodyさん2007/07/06(金) 05:19:03ID:???
>>723
まずは、
ttp://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3

みてみ。

基本的には644 、 他者に読まれてはまずい設定ファイル系は 600
バッチ系は755(そもそもDocumentRoot配下に置くべきでない)
0726nobodyさん2007/07/06(金) 09:58:12ID:???
サーバユーザとアップロードユーザがどういう関係になっているかが
わからないとら一概に言えない。
0727nobodyさん2007/07/06(金) 11:46:53ID:???
思うんだけど、perlの本にはパーミッションのことが沢山かかれているけど、
phpとかjavaの本にファイルのパーミションの説明がほとんど出てこないように思うんだけど、どうよ?
0728nobodyさん2007/07/06(金) 11:53:17ID:???
そうよ!
0729nobodyさん2007/07/06(金) 12:18:56ID:OGNgzj8J
valueに引数入れるのってどうしたらいいの?
0730nobodyさん2007/07/06(金) 12:58:01ID:X/pls0rO
暗証入力できるメールフォームってどこかに有りませんか?
ご存知でしたら教えてください
0731nobodyさん2007/07/06(金) 13:12:08ID:???
>>729
'value = "' . $arg . '"'

>>730
暗証入力ってなに
■ このスレッドは過去ログ倉庫に格納されています