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

【PHP】ID出さなくても質問OKなスレ【初心者歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/02/03(火) 01:09:36ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
0497nobodyさん2009/05/18(月) 21:41:15ID:???
サニタイズ言うな
0498nobodyさん2009/05/18(月) 21:42:52ID:???
>>496
ttp://jp.php.net/htmlspecialchars
0499名無し募集中。。。2009/05/18(月) 21:47:19ID:wP2DRNT9
>>495
「今決まってることを先に全部伝えてもらえれば余分な工数が圧縮できますよ 」
って言うけど
0500nobodyさん2009/05/18(月) 22:14:26ID:???
>>498
それだとサニタイズできないでしょ。
0501nobodyさん2009/05/18(月) 22:53:23ID:???
>>500
・・・・え? 何がしたいの?
0502nobodyさん2009/05/18(月) 23:01:36ID:???
<a href="javascript:[ここにjavascriptのコード]">vvv</a>


こう書かれると、htmlなんとかでは
サニタイズできないでしょう?

だからjavascriptって文字をかけない
ようにしなければならないんだけど、
これって正規表現使ってゴリゴリ書かないと
だめなの?
0503nobodyさん2009/05/18(月) 23:03:28ID:???
error_reporting(0);

これって使わないの?
0504nobodyさん2009/05/18(月) 23:11:09ID:???
>>502
実際にそこに何が入るのか知らんが、入力値を分解してURL作ればいいだけの話じゃないの?
0505nobodyさん2009/05/19(火) 02:17:09ID:???
ログファイルの中味を見られないようにするために、
拡張子を.phpにしようと思います。

これだと、たとえブラウザで直接ファイルを指定しても、
拡張子が.phpなのでPHPファイルとして実行しようとするので
(そして中味はPHPのスクリプトでなくて単なるテキストファイルなので)
見られないというわけです。

でもパーミッションが書き込み可能になっていると
問題ありますか?
0506nobodyさん2009/05/19(火) 02:28:01ID:???
ドキュメントルート外や.htaccessでアクセスできないようにする方が吉
拡張子phpは最後の手段
0507nobodyさん2009/05/19(火) 02:31:21ID:???
>>505
発想は悪くないんだがとりあえず試してみ。たぶん思ったのと違う結果になるw
あとパーミッションはあまり気にするな。共用鯖じゃsafemodeでも無い限りどーにもならん。
0508名無し募集中。。。2009/05/19(火) 03:02:13ID:qJyAGOVK
PHPは<??>で囲まない部分はHTMLと同じ扱いだからなw
0509nobodyさん2009/05/19(火) 10:05:00ID:???
>>495
素直に謝って今後そうすることが無いようにすればいいのに
開き直ってそんなこと言ってるから未だにろくな仕事が出来ねえんだよ。
0510nobodyさん2009/05/21(木) 17:42:51ID:???
php_browscap.ini は商用利用可能なのでしょうか。
その他の制限があったりしないか不安なので質問です。
よろしくおねがいします。
0511nobodyさん2009/05/22(金) 00:11:50ID:???
教科書に、

「 magic_quotes_gpc がONになっているときは、
stripslashes を使ってエスケープを取り除く」

と書いてあるのですが、そんなことをするよりも、
ini_set
とかで、
magic_quotes_gpc をOFF
にするほうが
いいのではないですか?
0512nobodyさん2009/05/22(金) 00:13:11ID:???
>>511
いいと思います。
05134222009/05/23(土) 14:25:12ID:???
>>484に遅レス便乗で、今のレン鯖で.htaccessは使えますがOptionsディレクティブが使えないので
ini_set("display_errors", 0)をファイルの先頭に書こうと考えてます。
ini_set実行以前にエラーが出たら意味なしになってしまいますが、それはどういった場合が考えられるでしょうか。
0514nobodyさん2009/05/23(土) 14:27:08ID:???
ん名前欄は関係ないです。すみません。
0515名無し募集中。。。2009/05/23(土) 14:27:44ID:sw/qjhoP
ini_setを最先頭行に書けばいいだけだと思うが
0516nobodyさん2009/05/23(土) 15:28:46ID:???
>>515
そうですね。
たとえば何らかの理由でファイルが読み込めない、実行できない場合ini_set前なのでエラーが出ると思います。
でよくよく考えたら今はerror_reporting(0)でエラーメッセージが出ないようにしてるんですけど
上記のようなときは結局エラーが出るだろうから、ファイル外で設定を変更できない以上エラー表示から逃れられなさそうです。
完全にエラーメッセージを非表示にできなければerror_reporting(0)で対処するつもりで質問をしたんですが、
これも完全でないなら素直にini_set("display_errors", 0)+ログ書き出しで対処します。
失礼しました。
0517nobodyさん2009/05/23(土) 15:36:50ID:???
PHP前ならPHPのエラーはでないと思うが
0518nobodyさん2009/05/23(土) 15:38:13ID:???
データベースのエラー文がそのまま表示されてるサイトとかもあるし
そこまで気にしないでも
0519名無し募集中。。。2009/05/23(土) 16:00:00ID:sw/qjhoP
流石に本番運用では気にした方がいいと思うが
0520nobodyさん2009/05/24(日) 19:13:43ID:???
携帯で画像をランダム表示したいのですが
どのようなスクリプトが使えるのでしょうか?
0521nobodyさん2009/05/24(日) 19:26:51ID:???
業者に1万円払って作ってもらえ
0522nobodyさん2009/05/24(日) 22:03:26ID:???
今なら俺が9980円で
0523nobodyさん2009/05/25(月) 00:22:37ID:???
session.use_only_cookiesが0の場合、

URLにセッションIDが含まれてしまうので
セキュリティ的に、危険です。

なのでこれを普通は1にすると思いますが、
それはphp.iniを編集できる場合のみです。

レンタルサーバーなどでは、php.iniを編集
できない場合も多いです。

その場合は、session.use_only_cookiesの値を
取得して、それが0なら1にする、と
自分でPHPスクリプトの先頭に書くのでしょうか?

でもそれで間に合うのでしょうか?
0524nobodyさん2009/05/25(月) 00:24:05ID:???
http://phpc2.seesaa.net/article/52425834.html

例えばこのページだと、

ini_set( 'session.referer_check', "example.com" );
ini_set( 'session.use_trans_sid', 0 );
ini_set( 'url_rewrite.tags', "" );
ini_set( 'session.use_only_cookies', 1 );
ini_set( 'session.use_cookies', 1 );
ini_set( 'display_errors', 0 );


こんくらい書いてます。
セキュリティをカンペキにするには、
全部でどれだけ書かないといけないのでしょうか?
0525nobodyさん2009/05/25(月) 00:29:11ID:???
ini_setじゃなくてphp.iniで設定しとけよみたいな
0526nobodyさん2009/05/25(月) 00:29:42ID:???
クッキーもヘッダ部に平文で流れてるだけだろ
これを安全というのならURLにセッションID含まれてても同様に安全というしかないだろ
0527nobodyさん2009/05/25(月) 01:19:22ID:???
URLはそれをブックマークしたり知らずに晒したりできるからまた違うんじゃないの
0528nobodyさん2009/05/25(月) 01:39:29ID:???
セッション要るようなエリアはhttpsにしとけばいいだけの話
0529nobodyさん2009/05/25(月) 02:09:17ID:???
いやブックマークとかURL流出はHTTPSだからとかいう問題じゃないだろ
0530nobodyさん2009/05/25(月) 02:14:14ID:???
セキュリティの話をすると
ついてこれないヤツが必ずいるよね

高卒なのかな?
0531nobodyさん2009/05/25(月) 02:15:06ID:???
「外出するときは、必ずドアにカギをかけましょうね」
.
「そんな、カギなんてプロの泥棒が本気だせば5分で開くんだよ
だからいちいちかける意味ないよ」
0532nobodyさん2009/05/25(月) 02:18:16ID:???
httpsにしなくていいって話じゃなくてhttpsにするだけじゃ不十分って話だろ
0533nobodyさん2009/05/25(月) 02:33:17ID:???
<a タグや、<imgタグのsrcにjavascripの
コードを直接書かれると、そのまま実行されてしまいます。

なので、javascriptをサニタイズする必要があるのですが、

ググって出てきたページに

http://php-web.net/security/sanitize.html

a、imgタグでは、<a href="javascript:...といった記述でj
avascriptが実行できます。このため、URL等は javasc
ript挿入対策として、「javascriptで始まる文字列をサニ
タイズする」作業が必要になります。

if (substr($_POST['url'],0,10) == "javascript:") {
die("Illegal URL!\n");
}

----------------------------------------------------

と書いてあるのですが、このコードでサニタイズできますか?

正規表現は使わなくてもいいの?

こういうとき、perlerだったら、100%の確率で
正規表現を駆使した渾身の一作を出してくるはずなんですけど。
0534nobodyさん2009/05/25(月) 02:51:01ID:???
htmlspecialcharsでいいだろ
0535nobodyさん2009/05/25(月) 03:15:54ID:???
http://php.benscom.com/manual/ja/info.configuration.php

ここで

「PHP 6.0.0 で削除されました。」
という記述があるが、6なんて
まだ出ていないだろう?

それとも、漏れが知らないだけで、
もう出ているのか?
0536nobodyさん2009/05/25(月) 03:18:53ID:???
出てるよ
0537nobodyさん2009/05/25(月) 03:23:54ID:aHvsLNiK
simplexmlで下記xmlのstartTimeを取得するにはどうすればいいでしょうか?
<entry>
<gd:when startTime='2009-05-28T19:00:00.000+09:00' endTime='2009-05-28T21:00:00.000+09:00'>
<gd:reminder minutes='10' method='email'/>
<gd:reminder minutes='10' method='alert'/>
</gd:when>
</entry>
0538nobodyさん2009/05/25(月) 04:42:43ID:???
$xml = simplexml_load_file('hoge.xml');
var_dump($xml);
してみれば分かるよ
0539nobodyさん2009/05/25(月) 23:18:15ID:???
ini_set('magic_quotes_gpc', '0');

このやり方でオフにするのって

phpのバージョンが4.2以下でないと
使えないの?
0540nobodyさん2009/05/25(月) 23:35:00ID:???
いや? そんなことないけどなんで?
0541nobodyさん2009/05/25(月) 23:48:05ID:???
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=3675&forum=2

ここのページに、

>magic quotes gpcがini_setできるのはPHP4.2.3以下だったと思います

って書いてあるけど??
0542nobodyさん2009/05/25(月) 23:49:14ID:???
http://www.webdeveloper.com/forum/archive/index.php/t-90414.html

ここのページにも、

>you can only modify magic_quotes_gpc this way in PHP versions <= 4.2.3.

って書いてあるけど???
0543nobodyさん2009/05/26(火) 00:12:13ID:???
Manualを見ろよ。 ttp://jp2.php.net/manual/ja/ini.list.php
4.2.4以降 PHP_INI_PERDIR になったからini_setじゃ無理。
0544nobodyさん2009/05/26(火) 00:17:18ID:???
>>541-543
そこまでわかってるならわざわざ聞きに来なくても・・・
0545nobodyさん2009/05/26(火) 01:13:59ID:???
アクセスログ等から
アクセスしてきたやつの
コンピューター名抜くのって
どうやってたの?
0546nobodyさん2009/05/26(火) 01:37:40ID:???
User Agentの話?
0547nobodyさん2009/05/26(火) 01:58:06ID:???
ウィンドウズなら同じワークグループだったらコンピュータ名抜けそう
0548nobodyさん2009/05/26(火) 11:21:02ID:???
特定のディレクトリ$dirの中でもっとも作成日付が新しいファイルのファイル名を取得したいのですが、

globでディレクトリ内の一覧を作ってfilectimeで作成日付を取得して・・・えーとえーと・・・と考えたものの、
「あれ?このあとどうしよう」となってしまいうまくコードにまとめることができません

良い方法はないでしょうか

PHP5
0549nobodyさん2009/05/26(火) 11:50:15ID:???
ソート
0550nobodyさん2009/05/26(火) 12:02:33ID:???
$last = new SplFileInfo(null);
foreach(new RecursiveDirectoryIterator('target') as $entry)
if($entry->isFile() && $entry->getCTime() > $last->getCTime())
$last = $entry;
こんなんとか。
05515482009/05/26(火) 18:32:03ID:???
>>550
うわ〜一回で動きました
PHP5で実装された関数まだ使い慣れないんで初めて見ました
ありがとうございます

たまたまディレクトリ内の、取得したいファイル群の名前が全部日付なので、
これの応用で作成日付順じゃなくて名前の順で一番遅い(=新しい)ものを
取得できるんじゃないかと改造してるんですが私には不可能でしたw
0552nobodyさん2009/05/27(水) 16:01:50ID:???
メールフォームから送信してるんですけど相手に届きません
ローカルサーバです
PHP.iniのどの設定を変えたらいいですか?
0553nobodyさん2009/05/27(水) 16:40:06ID:???
ローカルアカウントには届くってんならOP25Bでググれ
0554nobodyさん2009/05/27(水) 23:11:44ID:???
それって自分のISPの回線の
SMTPサーバー経由でないと
メールを送信できないってやつ?
0555nobodyさん2009/05/28(木) 00:21:44ID:???
>>554
いえ、違うんです
レンタル鯖だとできたんですけど・・・
0556nobodyさん2009/05/28(木) 00:26:24ID:???
レン鯖だとOKで自宅鯖だとNGって間違いなくポートブロックだろ
プロバイダのヘルプをサブミッションポートで検索してみ
0557nobodyさん2009/05/28(木) 01:30:28ID:???
$filename = $month."/".$day.".csv":
$data = @file($filename);

PHP5でローカルのWindows機でテストしているのですが、上のように下位フォルダにあるファイルを開こうとすると失敗します。
ディレクトリを表す"/"の部分がWinだと\だからだと思うのですが、そもそも根本的に"/"で変数を繋ぐのが変なような気もします。
サーバー上でもローカルWin機でも動くようにできないものでしょうか。

0558nobodyさん2009/05/28(木) 01:44:46ID:???
ごめんなさい、自己解決しましたw
$が間違って&になってましたw
切腹してきますw
0559nobodyさん2009/05/28(木) 08:09:32ID:???
>>552
自宅ってどうせ窓でしょ?
「windows php mail」でググって味噌。
0560nobodyさん2009/06/01(月) 20:27:02ID:???
JISの漢字コードから

3021 → 亜

のように、実際の文字を表示するには、
どのようにしたらよいのでしょうか?

よろしくお願いします。
0561nobodyさん2009/06/01(月) 21:02:57ID:???
JISコードの場合、エスケープシーケンスで漢字であることを知らせないといけないから
echo "\x1b\$B",pack('H*', 3021);
05625602009/06/01(月) 21:29:46ID:???
>>561

できました!
ありがとうございます。

こういうことって、どこで覚えるんでしょうか?
0563nobodyさん2009/06/01(月) 21:55:20ID:???
>>562
今のお前さんのような状況に陥ったときに覚える。
人に聞くか自分で調べるかの違いはあるけどな。
0564nobodyさん2009/06/07(日) 01:18:31ID:q/9VwFhz
SSLを使って「login」というディレクトリをSSLのみの接続にしていますが、
loginディレクトリ内のリンクで<a href="../index.html">とするとhttpsのまま
階層が1つ下がるだけとなります
これをhttpにする関数はあるのでしょうか?
0565名無し募集中。。。2009/06/07(日) 01:42:48ID:kkylNn0/
ない
0566nobodyさん2009/06/07(日) 01:53:33ID:???
PHPって同じことやるのにも複数の似通った関数があるイメージがあるんだが、
コレとアレならこっち使うのがイイ!
みたいなベストプラクティスとかある?
0567nobodyさん2009/06/07(日) 02:08:23ID:???
あるよ
0568nobodyさん2009/06/07(日) 02:15:41ID:???
>>566
よくあるのが
is_nullを使わないで、 $hoge === null で評価したほうが早いとか
正規表現で評価できるsplitを使うより単純に「,」とかできりたいならexplodeを使ったほうが早いとか

0569nobodyさん2009/06/07(日) 02:35:59ID:???
おれが作るから半年待て
0570nobodyさん2009/06/07(日) 10:51:54ID:???
バッファの意味がわかりません><
どなたか親切な方^^いないでしょうけど教えてくdさい!
0571nobodyさん2009/06/07(日) 11:08:03ID:???
ゴミを一粒ずつひろってゴミ箱に捨てるより、ちりとりで集めてゴミ箱に捨てるほうが効率いいの解かるならOK
0572nobodyさん2009/06/07(日) 11:50:14ID:???
すいません。記載するスレを間違えてしまいました。
初心者ながら自作サイトを作成しているのですが、なぜか作成したページが
「疑わしいWebページを遮断しました」とノートンが反応するようになりました。
ソースが長いので記載はできないのですが、内容はmailtoで送信するための
名前やメアドを入力した後の「以下の内容で間違いないですか?」みたいな
画面です。値はメアド入力画面から$_POSTで受けとってます。
遮断される可能性としてはどのようなものがありますでしょうか?
すいませんがアドバイスを御願いします。
0573nobodyさん2009/06/07(日) 11:53:14ID:???
ノートンよく知らないけど遮断した理由書いてあるログとかないの?
05745722009/06/07(日) 12:01:37ID:???
>>573
ノートンのセキュリティ履歴をみると
「疑わしいサイトとしてシマンテックに提出しました」としか記載がなく
なぜ疑われているのかがわからない状態です。
0575nobodyさん2009/06/07(日) 13:06:34ID:???
ソース見ないで答えるのは情報処理の試験でも出題されないくらいの難易度の高さ
ノートンの判断はノートン作った人にしかわからん
つまり、「疑わしいWebページを遮断しました」でぐぐって似たケースを見るのがいいかと
0576nobodyさん2009/06/07(日) 13:25:53ID:???
最終的に吐き出したものをHTMLに保存してそれを表示させて
疑わしいものを削っていけばわかるかもよ
05775722009/06/07(日) 15:11:25ID:???
>>575 >>576
すいません。ソース長くてどこを見せればいいかわからない状態です。
ソース削りながら色々試してみます。
ありがとうございました。
0578nobodyさん2009/06/10(水) 11:22:45ID:???
変数に格納された数字を、正の数なら+を、負の数なら−を頭に付けて表示したいのですが、
それに便利な関数はないでしょうか

PHP4
0579nobodyさん2009/06/10(水) 11:30:01ID:???
そんくらいなら自作してやれば
0580nobodyさん2009/06/10(水) 11:31:18ID:???
宿題か?
05815782009/06/10(水) 11:56:17ID:???
自作しますた
30秒で終わりますた
15分ぐぐって損しますた
0582nobodyさん2009/06/10(水) 11:59:44ID:???
>>581
You!ここに載せちゃいなよ!
0583nobodyさん2009/06/11(木) 10:23:35ID:???
んなもんifで数値比較するだけだろw
0584nobodyさん2009/06/11(木) 13:32:40ID:???
$str = $val > 0 ? '+' . $val : '-' . $val ;

あ、0のときはしらん。
0585nobodyさん2009/06/11(木) 14:09:33ID:???
-1を--1にする気か?
0586nobodyさん2009/06/11(木) 14:10:28ID:???
みんな printf 嫌いなの?
0587nobodyさん2009/06/13(土) 16:08:22ID:???
あえてセッション使わずにglobal変数使いまくって

入力画面←→確認画面→送信

と行ったり戻ったりするフォーム作るって変?
遷移するたびに文字のエスケープやらなんやらで埋もれるんで明らかにいけてないなと
0588nobodyさん2009/06/13(土) 16:18:56ID:???
global変数でどうやってリクエスト跨いでデータ受け渡しすんの?
0589nobodyさん2009/06/13(土) 18:08:42ID:???
hiddenかsession以外でそれやる奴バカだろ
0590nobodyさん2009/06/13(土) 18:21:00ID:???
>>587
>あえてセッション使わずに

の時点で変だけど、そうしたい理由は何さ?
05915872009/06/14(日) 21:34:45ID:???
>>588
フォームに入力→POST→確認画面→戻るリクエスト→hidden大量で入力画面にバックして反映
この間globalでユーザー関数またぎまくり

>>589
戻ると次へと送信でhiddenとそのエスケープ処理が100コくらいある

>>590
クッキー使えないのと、心理的にURLに埋め込みたくないのと、
ブラウザのバックボタンで期限切れだしたくない(じいちゃん連中向けなんでヤツらはパニクる)のでどうしていいやら

最後のはセッション関係なかったっけ

機能的にはできあがってきちんと動いてるんだが超気持ち悪い
やり方あったら教えてプリーズ
0592nobodyさん2009/06/14(日) 21:54:41ID:???
>>591
>ブラウザのバックボタンで期限切れだしたくない

youメニュー隠しチャイナyo
っていうか心理面を克服してでもセッション使ったほうが楽だと思うんだがなぁ。
0593nobodyさん2009/06/14(日) 21:56:49ID:???
セッションキーをhiddenで渡せばいいだけの話だろ常考
0594nobodyさん2009/06/14(日) 22:00:08ID:???
>>593
そんなことできたのか
しらんかった
0595nobodyさん2009/06/14(日) 22:11:51ID:???
まぁ実際はただのリクエストだからなw
0596nobodyさん2009/06/15(月) 20:18:19ID:???
正規表現についてお尋ねします。
あるフォームに入力された全角文字を半角文字にして他のフォームに代入するといった事をやっていますが、
全角→半角にするのはmb_convert_kanaでやるとして問題は半角に出来ない文字(例えば漢字など)を取り除いて
代入したいのです。要は半角に変換した後の文字列から全角文字だけを取り除いて半角文字列だけにしたいのです。
例:HOGE安弘MOGE → HOGEMOGE
こういう事は正規表現で可能でしょうか?
■ このスレッドは過去ログ倉庫に格納されています