トップページ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等)・フレームワークは各該当スレへ
0011nobodyさん2010/09/19(日) 11:07:50ID:eIEN7Yyo
【OS名】Land.to
【PHPのバージョン】5.3
【連携ソフトウェア】なし
【質問内容】>>9
0012nobodyさん2010/09/19(日) 11:11:59ID:???
何の話
0013nobodyさん2010/09/19(日) 11:13:12ID:???
>未だにフォームの値が取得できません…
>何度もやり直してはいますが まったくできませんでした

質問内容を省略しすぎてて意味がわかりません
0014nobodyさん2010/09/19(日) 11:39:28ID:???
>>11
そのくらい推察しろよカスどもめが…とか思ってるかもしれんが、
面倒なのは仕方ないと割り切った上で落ち着いて丁寧に質問してくれ。

もしこれ以上の情報が必要ないと考えているようだと、
それはそれで大問題だ。いろんな意味で。
0015nobodyさん2010/09/19(日) 12:17:14ID:???
>>1
0016nobodyさん2010/09/19(日) 12:39:44ID:NWy7q6Wm
前スレの>>968です

index.html (文字コード UTF-8)
<html>
<head><title>New Document</title></head>
<body>
<div>
<form action="" method="post" id="test">
<input type="hidden" name="a" value="あ">
<input type="hidden" name="b" value="い">
<input type="hidden" name="c" value="う">
<input type="hidden" name="d" value="え">
<input type="hidden" name="e" value="おあ">
<input type="submit" value="send">
</form>
</div>
</body>
</html>
0017nobodyさん2010/09/19(日) 12:40:32ID:e0G02OVN
初歩的な質問で申し訳ありません。

同じURL上で、カテゴリをプルダウンメニューで選択すると表示が変わる、
動的なページを作成しています。

POSTでデータを受け渡した時は、選んだカテゴリが次のページにも反映されるのですが、
GETで受け渡した時は、初期カテゴリに自動的に戻ってしまいます。

選んだカテゴリをURLに反映させたいのでGETを使いたいのですが、
なにかヒントをもらえないでしょうか?
0018nobodyさん2010/09/19(日) 12:41:17ID:???
<?php
$url = "index.html";
$file = file_get_contents($url);
$doc = new DOMDocument();
$doc->encoding = "UTF-8";
$res = $doc->loadHTML($file);
$items = $doc->getElementsByTagName('input');
$cnt = $items->length;
$str = $items->item(0)->getAttribute('value')."\n";
$str = mb_convert_encoding($str, "UTF-8", "auto");
echo $str;
?>

サーバ側もindex.htmlもencodingもUTF-8にしたのに文字化けしてしまいます

0019nobodyさん2010/09/19(日) 12:43:22ID:???
$str = mb_convert_encoding($str, "UTF-8", "auto");
これいらんのじゃ
0020nobodyさん2010/09/19(日) 12:44:02ID:???
$doc->encoding = "UTF-8";
これも
0021nobodyさん2010/09/19(日) 12:54:39ID:???
>>16
postで送信した値を取得したいんだったら$_POST使え
0022nobodyさん2010/09/19(日) 12:57:14ID:???
>>18
phpinfoの内容をうpローダにうpすれば
0023nobodyさん2010/09/19(日) 13:03:41ID:???
>>18
ひょっとしてコマンドラインから実行してるのかね?
0024nobodyさん2010/09/19(日) 13:07:40ID:???
>>18
ttp://hain.jp/index.php/tech-j/2007/02/13/%EF%BC%B0%EF%BC%A8%EF%BC%B0%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91
0025nobodyさん2010/09/19(日) 13:21:49ID:???
>>18
<?phpの次の行に
header("Content-Type: text/html; charset=UTF-8");
0026nobodyさん2010/09/19(日) 13:44:14ID:DdIFZWUf
>>19>>20
削除してみましたが結果は同じでした
>>21
postで送信するのではなく index.htmlというページにあるvalueの値を取得したいのです
>>22
encodingはUTF-8でした
>>23
サーバからです
>>24
それを読んでみましたが まったくダメでした
>>25
それもダメでした…

0027nobodyさん2010/09/19(日) 14:14:16ID:???
$cntって何に使ってるの?
0028nobodyさん2010/09/19(日) 14:18:30ID:d8+XLEjx
こんな記事みたんだけど
ーーーーーーーーーーーー
クロスサイトスクリプティングの解説記事でよく説明される「入力データチェックを厳密に」という表現から,
フォーム受付時のタイミングでサニタイジングを行うのかと思いがちである。
サニタイジングは(2)HTML生成時のタイミングで行うべきである。
次章「クロスサイトスクリプティング対策の詳細」で説明するが,
データを埋め込むHTML中の文脈に合わせて適切なサニタイジング手法を選択する必要があるからである。
また掲示板の例では,将来的にデータベースへの記事の書き込み手段として,メールによる投稿が導入された場合でも,
HTML生成時のタイミングでサニタイジングしていれば,
なんら手を加えることなく,いろんな入力源から入り込んでくるデータを漏れなくサニタイジングできる。
また,同じデータに誤って2回以上サニタイジングしてデータの意味が変わってしまうという設計上のトラブルも防げる。
ソース
http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html#PHP_Session_about
今はデータベースに入れる前に、こんな感じで、
function delete_tag_changing_line($str){
$str=strip_tags($str);
$str=htmlspecialchars($str,ENT_QUOTES,"SJIS");
return str_replace(array("\r\n","\r","\n","\"","\'"),'',$str);
}
$hoge=delete_tag_changing_line($_GET['hogehoge']){
って感じでエスケープしてるんだけど,
上の記事見ると、print関数とかのhtml出力時にエスケープすべきみたいなんだよね。
でも、正直今の設計上で出力時に全部エスケープすると、かなりソースに変更が必要になってしまうです。
だから、今まで通り
$hoge=delete_tag_changing_line($_GET['hogehoge']){
このやり方で、リクエストのフォームデータを扱う時にエスケープかける方向でいきたいんだけど、

>同じデータに誤って2回以上サニタイジングしてデータの意味が変わってしまうという設計上のトラブルも防げる。
>メールによる投稿が導入された場合でも,
ここら辺が問題なければ、現状通りのやり方でも大丈夫かな。
お手間かけてすみませんが、見解聞かせてください。
0029nobodyさん2010/09/19(日) 14:27:07ID:???
>>28
修正に稼動かけてられないなら、問題点をちゃんと把握してれば構わないと思うよ
0030nobodyさん2010/09/19(日) 14:35:32ID:???
>>27
今は使いませんが 文字化けが解決した後に cntの回数だけループしてItemの値を取得しようと思っています
003162010/09/19(日) 14:35:36ID:???
>>8
qd_simple_mailは知らなかったのですがそっちの方も使ってみたところ同じでした。
mbstring.detect_orderが原因でした、ASCII,JIS,UTF-8,EUC-JP,SJISにしたら文字化けしなくなりました。
Qdmail側がそこら辺はうまい具合にやってくれてると思ってたんですが違ったようです。
0032nobodyさん2010/09/19(日) 14:42:52ID:???
>>30
index.htmlの頭に
<?xml version="1.0" encoding="utf-8" ?>
付けたら出たよ

あとID出してね
0033nobodyさん2010/09/19(日) 14:47:01ID:???
>>32
あ すみません。。。janeなので自動でsageてしまいました

それをつけないでできませんか?
0034nobodyさん2010/09/19(日) 15:25:46ID:???
>>33
$doc = new DomDocument('1.0', 'utf-8');
0035nobodyさん2010/09/19(日) 15:29:31ID:???
>>33
phpinfoの内容うpマダデスカー?
0036nobodyさん2010/09/19(日) 15:31:00ID:???
>>33
コマンドラインに出力してるのかブラウザに出力してるのかはっきり書け
0037nobodyさん2010/09/19(日) 15:43:06ID:RW6Zh2z2
$str = "あ いうえお かきくけ こ";
$str = trim($str);

文字列から半角スペースだけ削除したいのですが消えません
どなたかご教示おねがいします
0038nobodyさん2010/09/19(日) 15:47:53ID:???
>>37
str_replace
0039nobodyさん2010/09/19(日) 15:48:05ID:???
str_replace
0040nobodyさん2010/09/19(日) 15:57:35ID:+3xl6Ak5
テキストエディタでPHPを書いてます
eclipseに移行した場合、どのようなメリットがありますか?
テキストエディタからeclipseに移行することで開発スピードは上がりますか?
0041nobodyさん2010/09/19(日) 16:01:10ID:???
>>40
上がる。メリットはぐぐれ。
0042nobodyさん2010/09/19(日) 16:11:39ID:???
でもファイル数が多いと一々エクスプローラウインドウで選択するのがめんどくさいかもって思った。
0043nobodyさん2010/09/19(日) 16:39:27ID:???
>>16
><form action="" method="post" id="test">

actionはマジで空っぽ?
0044nobodyさん2010/09/19(日) 16:57:53ID:???
※自分自身のファイルに送信するときはaction属性の値は省略できる
0045nobodyさん2010/09/19(日) 17:00:41ID:LNQ8CDVB
$test = "test";
echo $test[0];
これがtを表示するのは何故ですか?
0046nobodyさん2010/09/19(日) 17:08:14ID:4bBjydvf
データを取得する部分の実装の話なのですが、
データベースと接続する部分は共通化していますが、
各データを扱う部分は、直接各クラス毎に、
$sql = "SELCT COLUMN FROM TABLE_NAME WHERE CONDITION = '123'"
という風に書いています。

こういう書き方って、皆さんから見るとどうでしょうか?

データ取得部分だけクラス化するという話もききますが、
それだと、SQLの数だけクラスが増えて相当なクラス数になると思います。

どのような方法が一般的なのか、お伺いできればと思います。
宜しくお願いします。
0047nobodyさん2010/09/19(日) 17:11:14ID:???
>>45
そこらへんはCと同じような考え方からきてんじゃないのかね
Cは文字列というものは存在しなくて文字の配列を文字列としてるから

0048nobodyさん2010/09/19(日) 17:14:38ID:???
>>46
オブジェクト指向、MVC、O/Rマッパー、各種フレームワーク等を学ぼう
0049nobodyさん2010/09/19(日) 19:41:04ID:4bBjydvf
>>48
ご回答ありがとうございます。
O/Rマッパーについて調べてみたのですが、Java専用でphpのものはないそうです。
phpでそれに該当するようなものはございますか。

度々のご質問で申し訳ございません。宜しくお願いします。
0050nobodyさん2010/09/19(日) 19:47:19ID:???
>>49
過疎ってるけど
【propel】PHPのORMについて語ろうぜ【peropero】
http://hibari.2ch.net/test/read.cgi/php/1173181854/

ORMの問題ではなく、まずはMVC学んで有名どころのフレームワーク使った方が良いと思うが。
サンプルが参考になるはず
0051nobodyさん2010/09/19(日) 21:05:03ID:2wvRyPkx
>>36
ブラウザに出力です
0052nobodyさん2010/09/19(日) 21:06:51ID:???
>>34
もう諦めたほうがいいのでしょうか・・・
まったくできません
0053nobodyさん2010/09/19(日) 21:11:40ID:???
>>52
>>32
0054nobodyさん2010/09/19(日) 21:26:38ID:???
>>52
もう小出しせずそのまんまのHTML文書とコードを出そうぜ
0055nobodyさん2010/09/19(日) 22:03:35ID:???
ソースは真似されると嫌なので出したくありません。
0056nobodyさん2010/09/19(日) 22:08:46ID:???
動かないコードを誰が真似するんだよw
0057nobodyさん2010/09/19(日) 22:23:54ID:???
小者が書いたコードは既に世界中の誰かが誰かが書いてるんだから気にしすぎ
0058nobodyさん2010/09/19(日) 22:46:55ID:???
preg_match("/検索パターンを表す文字列/", 比較文字列)

/(スラッシュ)って必要?

preg_match("検索パターンを表す文字列", 比較文字列)

だと動作にどういう違いが生じる?
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
できないので教えません
■ このスレッドは過去ログ倉庫に格納されています