【PHP】下らねぇ質問はここに書き込みやがれ Part19
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/04/09(日) 01:31:18ID:???ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
本スレ【PHP】質問スレッドpart33【php】
http://pc8.2ch.net/test/read.cgi/php/1140027592/
【PHP】下らねぇ質問はここに書き込みやがれpart18
http://pc8.2ch.net/test/read.cgi/php/1142417901/
過去スレは>>2-3あたり
0263nobodyさん
2006/04/12(水) 19:09:40ID:???0264nobodyさん
2006/04/12(水) 19:09:42ID:???'w'ならデフォルトで新規作成される。
'r'でファイルが存在しなかった場合に新規作成したいならtouch($file);とか書けばいい。
0266nobodyさん
2006/04/12(水) 19:32:24ID:???0267nobodyさん
2006/04/12(水) 20:24:31ID:fK671VOd答えられないのに文句だけ言う奴もウザイけど
0268nobodyさん
2006/04/12(水) 20:37:47ID:zZpSpaHD<?php
$arg = input_filter($_SERVER['QUERY_STRING']);
header('HTTP/1.1 301 Moved Permanently');
header('Location: /'.anchor_replace(rawurlencode($arg)).'/');
?>
とすると、
[12-Apr-2006 20:15:54] PHP Fatal error:
Call to undefined function: input_filter() in /home/user/public_html/slash.php on line 2
というエラーが出てしまいます。
この関数やエラーについて調べてみたのですが、手がかりがつかめませんでした。
これはどうなっているのでしょうか?
0269nobodyさん
2006/04/12(水) 20:43:40ID:???input_filterて関数が無いってメッセージ出てるやん。
リンク先に
>でぃあばぁ(管理者) at 2005-11-13 (日) 20:05
>func.phpからinput_filterとanchor_replaceをコピーしてくれば動きます。ただし何のチェックもしていないので、
>一つ間違うと無限ループです 一応 RewriteOptions MaxRedirects=1 で避けていますが、正直全くお勧めできません。
とあるが、理解可能?
0270nobodyさん
2006/04/12(水) 20:57:48ID:zZpSpaHDうーん、よくわかりません…
でぃあばあ氏は、このようにスラッシュを補完しているのですが、もっと効率的な方法とかあるんでしょうか?
0271nobodyさん
2006/04/12(水) 21:15:18ID:???効率とか関係なく、func.phpからinput_filter()をコピペしてきてないから動かないだけだろ。
0272262
2006/04/12(水) 21:30:17ID:???ありがとうございます
$file = './dat/env.dat';
if( ! file_exists( $file)) touch( $file);
こう書いてみたのですが、うまく動きません
根本的に間違っているのでしょうか?
0273nobodyさん
2006/04/12(水) 21:35:33ID:zZpSpaHDありがとん。
PHPの方はエラーを吐かなくなったのですが、http://example.com/slash.php/ にリダイレクト
され、500 Internal Server Error となってしまいます。(Connection: close
)
0275nobodyさん
2006/04/12(水) 21:51:23ID:zZpSpaHDすみません、PHPやApache設定に関しては全くの無知なので・・・
「RewriteRule ^.+$ slash.php?$0 [L]」これが原因でInternal Server Errorになるのでしょうか。
0277nobodyさん
2006/04/12(水) 21:59:09ID:zZpSpaHD0279262
2006/04/12(水) 22:27:29ID:???ありがとうございます
ご指摘のとおりパーミッションの問題でした。
.datを777にしたら問題なくさくせいされました
お手数をおかけして申し訳ありませんでした
0280nobodyさん
2006/04/12(水) 22:35:28ID:KG2NZf4eダイアログが出てきた時に
デフォルトでIDが表示されているように
出来ませんでしょうか?
(PASSを入力するだけの状態)
よろしくお願いします。
0282nobodyさん
2006/04/12(水) 22:46:27ID:???標準のダイアログにID文字列を勝手に入れるのは無理じゃないかな。
やるなら、HTMLのFORMでIDとパスを受け付けるようにするとか
JavaScriptのダイアログで受け付けるようにするとかにしないと。
0283nobodyさん
2006/04/12(水) 23:38:10ID:???俺のソースは汚いぞおおおおおおおおおおおおお
0284nobodyさん
2006/04/13(木) 01:42:46ID:???$main_text = 同一ファイル内ヒアドキュメント、内容はHTML(htmlのタグ含む)
$words = '1111111111'で区切られた単語とURLが1行1レコードのファイルをfile()で拾って来た配列
で、foreach($words as $line){
list($word[],$url[]) = explode('1111111111',$line);
}
として$word、$urlをprint_r()して中に期待した配列が入っていることを確認しました。
その次に
$replacement = "<a href=" . $url . " target=_blank>" . $word . "</a>";
$main_text = preg_replace($word,$replacement,$main_text);
とすると
Warning: Unknown modifier '?' in /パス/test.php on line 410
Warning: Unknown modifier '?' in /パス/test.php on line 410
と2回エラーが表示されました。$wordと$urlの要素が2個になっていたのでそこが関係していると思うのですが…。
またpregをeregに変えるとエラーを吐かなくなりますが配列で置換できないようで要求をみたせませんでした。
何かアドバイスくださいまし
0285nobodyさん
2006/04/13(木) 02:01:28ID:???$word が正規表現として解釈されることを前提に、適切にエスケープしたり書式を整えたりしてる?
$word の中身をここにコピペしてみたら?
0286nobodyさん
2006/04/13(木) 02:07:48ID:???解像度が低いPCで書いているのですが、どうしてもよみづらくて・・。
0287nobodyさん
2006/04/13(木) 02:13:11ID:???$word[] = "/ABC/sUi";
$word[] = "/DEF/sUi";
$replacement[] = "えーびーしー";
$replacement[] = "でぃーえふ自慰";
$main_text = preg_replace($word,$replacement,$main_text);
ってこんな風に使うんじゃなかったっけ
0289284
2006/04/13(木) 02:22:12ID:???とりあえずprint_rの結果をば
Array
(
[0] => テスト
[1] => テスト2
)
Array
(
[0] => http://www.exsample.jp/1
[1] => http://www.exsample.jp/2
)
ファイルは全てEUCです。
ブラウザのエンコードをeuc以外にしたら化けたので文字コードはおk、
エンコーディングが必要な文字列は(今はテストデータだからですが)無いようでした。
>>287
ごめんなさい、提示していただいたサンプルとの違いが読み取れなかったのですが…。添字も数字になりますから一緒ですか?
0290nobodyさん
2006/04/13(木) 02:23:11ID:???> $replacement = "<a href=" . $url . " target=_blank>" . $word . "</a>";
それって「<a href="Array" target=_blank>Array</a>」にならんか?
配列をそのまま文字列として連結ってどういう意味よ
> $main_text = preg_replace($word,$replacement,$main_text);
$wordが配列なら$replacementも配列にせんと。
0293284
2006/04/13(木) 02:32:34ID:???…$replacementが
<a href=Array target=_blank>Array</a>
になってしまっていました。
これでは目的が達成できないとおもいつつとりあえず
preg_replaceのエラー吐いているのだけでも何とかしようと思い
$main_text = preg_replace($word,$url,$main_text);
としてみましたが上記と全く同じエラーを吐きました…。
ちょっと試しに>>287さんのコードをまんま試してきます。
と思ったら>>290さん、その通りでした
orz
0295284
2006/04/13(木) 02:48:19ID:???ご指摘の通りでした。
$word = "/ABC/";
$replacement = "/http:/";
として通りました。
後は配列となっているURLをどうaタグにするか、考えてみます。
ありがとうございました。
全然関係ないですが皆さん遅い時間まで起きますね。
差し支えなければ、今何なさっているか晒してもらってもいいデスカ?
0296287
2006/04/13(木) 02:56:09ID:???俺なら
foreach($words as $line){
の処理の中で
"<a href=" . $url . " target=_blank>" . $word . "</a>";
を配列に突っ込むかな。
0297nobodyさん
2006/04/13(木) 02:56:14ID:???0298nobodyさん
2006/04/13(木) 03:02:07ID:???もう寝る
0299nobodyさん
2006/04/13(木) 12:31:27ID:???を
$abc2[0] = "a";
$abc2[1] = "b";
$abc2[2] = "c";
にするにはどうすればいいでしょうか?
指定文字で分割する関数があったと思うのですが、
公式マニュアルみてもちょっとわかりませんでした。
いつも逆引きリファレンス本使ってるんですが、無いと死にますね・・・
0301nobodyさん
2006/04/13(木) 12:55:47ID:???どうすればいいですか?
0302nobodyさん
2006/04/13(木) 13:02:18ID:???を一気に 2006-04-10 18:18:53
に変更するような簡単な方法きぼんぬ
0303nobodyさん
2006/04/13(木) 13:02:58ID:???explode("\n\n", 〜
preg_split('/([\r\n]|\r\n){2,}/', 〜
とかかな
0304nobodyさん
2006/04/13(木) 13:04:18ID:???date('Y-m-d H:i:s', strtotime('Mon, 10 Apr 2006 18:18:53'))
0305303
2006/04/13(木) 13:09:41ID:???これじゃ\r\n1つでも区切っちまうわ
0306nobodyさん
2006/04/13(木) 14:18:17ID:???例えば、$textに入っている文字数が200文字だとして
一覧に表示する時は20文字しか表示しないなど
0307nobodyさん
2006/04/13(木) 14:22:10ID:???0308nobodyさん
2006/04/13(木) 14:23:23ID:???mb_strimwidth()
0309nobodyさん
2006/04/13(木) 14:25:27ID:???mb_strimwidth($text,0,20,'...');
などなど
0311nobodyさん
2006/04/13(木) 19:10:41ID:???言われるような読むのにオススメなソースコード教えてください。
0313nobodyさん
2006/04/14(金) 01:47:26ID:AD++CmCGどのように書けばいいのでしょうか。
学生なのですがよくわからないので教えてください。
0314nobodyさん
2006/04/14(金) 01:58:34ID:aAV+eb7Hチュートリアルのようなサイトご存知ないですか?
マンモス本を読み出して1部チャプター3で早くもくじけそうです・・・。
0315nobodyさん
2006/04/14(金) 06:41:02ID:???0316nobodyさん
2006/04/14(金) 07:28:18ID:???cronかスクリプトで永久ループしながらsleep
学生だから知らないちゅー言い訳はヤメレ
>>314
根性入れろや
>>315
出来ますか?じゃなくて
やってみてわからないことを質問する>強く推奨
0317nobodyさん
2006/04/14(金) 07:41:14ID:???スクリプト起動時にファイルの日付をチェックして1週間以上前のものを削除する
opendir
whileでループ
readdir
filemtimeかstat
unlink
ループ終了
closedir
0318nobodyさん
2006/04/14(金) 11:29:45ID:???アクセスって無茶苦茶重くなりそうだな
上手くやれば回避できそうだが、そこまで知ったこっちゃないか
0319nobodyさん
2006/04/14(金) 11:55:13ID:???その辺はシステムの性格に応じてチューニングでよかろ
0320nobodyさん
2006/04/14(金) 12:46:56ID:???0321nobodyさん
2006/04/14(金) 13:30:41ID:???0323nobodyさん
2006/04/14(金) 14:35:43ID:9w4nbvJuセキュリティー的に問題があるのでしょうか?
define('HTTP_SERVER', 'http://'.$_SERVER[HTTP_HOST]);
0324nobodyさん
2006/04/14(金) 14:45:48ID:???0325nobodyさん
2006/04/14(金) 14:57:36ID:???定数の定義だけじゃセキュリティ上の問題は無い。
'HTTP_HOST' は、「現在のリクエストに Host: ヘッダが もしあればその内容。」となる。
ユーザから送られてきた値だから信頼はできねーぞ。
この意味分かるな。
Apacheのデフォルト設定だと、どんなHostヘッダでも受け付ける。
バーチャルホスト上のホストなら不正なホスト名だとサーバが受け付けないこともあるが
それを信用してはならない。
0326nobodyさん
2006/04/14(金) 15:12:40ID:9w4nbvJu画像のリンクなどのURLフルパスとして利用したかっただけなので
問題ないようですね
>>325
了解しました。
ありがとうございます
0330nobodyさん
2006/04/14(金) 15:43:39ID:???設定した定数(HTTP_SERVER)を、そのままSQLに突っ込んだりすると危険
($_SERVER[HTTP_HOST] にSQLインジェクションされる文字列とか入ってり)
結局は>>324の言うとおり、使い方次第
っGoogle検索「サニタイズ」
0331nobodyさん
2006/04/14(金) 15:46:41ID:???困るのってその変なホスト名をよこしてきたユーザ本人だけでは。
0332nobodyさん
2006/04/14(金) 16:15:18ID:???PHPのCLI版で書いてcronで定期実行がスレに合ってるかな・・
シェルスクリプトでいいならそれでいい気もするけど
0333nobodyさん
2006/04/14(金) 16:21:09ID:???単純に考えてそうでも将来的にそれを利用した攻撃方法が発見されないとも言い切れないんだし、
htmlspecialcharsを通すべき。
0334326
2006/04/14(金) 16:21:41ID:???使うんですよ
>>328
分かってますが?
>>329
基本的にドメインとダミーでバーチャル切ってるので問題なし
>>330
だから「html出力で画像のリンクに使用」といってるのですが…
>>331
そのとおりだと思っています
0335333
2006/04/14(金) 16:22:17ID:???エスケープしてはならない理由があり、かつ、安全性が確認できている変数のみエスケープしないというポリシーのが安全。
0336nobodyさん
2006/04/14(金) 16:24:37ID:???function h($value) {
return htmlspecialchars($value);
}
こんな関数作ったらどうです?
変数を h( と ) で囲むのはたいした手間じゃないでしょ。
高木浩光流のセキュリティ対策ブログでも読んでみたらどうかな
0338326
2006/04/14(金) 16:32:28ID:???ついでなので以下のようにしておきました。
// HTMLタグの無効化
function h($value) {
return trim(htmlspecialchars($value));
}
0339nobodyです
2006/04/14(金) 17:25:47ID:NgSqFnSxdie(require_once('error.html'));
}
これは、何か問題が出てきますか?
0340nobodyさん
2006/04/14(金) 18:25:52ID:???if(error)って、もし error という定数が真なら if文 を実行するということだけど、それであってる?
変数じゃなくて定数ならいい。
あと、定数は一般的なコーディングルール、慣習では全て大文字で書き、単語をアンダースコアで区切る。
これは様々なC系言語やJavaでも同じ。(ただし必ず従わなければならない訳ではないが、それを配布するなら
従っている方が他の人が見やすい)
これは、pearコーディングルールでも同じ http://itbtech.itboost.co.jp/man/php_man/pear.standards.constants.html
例: DB_ERROR_MESSAGE
変数は小文字で初めて単語の区切りを大文字にする。
ちなみに、
if ($error) {
die(require_once('error.html'));
}
は、
$error or die(require_once('error.html')); と書く人もいる。
ただし、比較演算子の用途外利用なのであまりおすすめできない。
(ただ、使うことでコーディングがすっきりするときは使う)
戻り値の比較をしない分、if文の方が早いと思われる。
0341340
2006/04/14(金) 18:28:11ID:???require_once は関数では無く制御構文なので
pearコーディングルールと慣習によれば関数コールと区別するために、
require_once('error.html'); じゃなくて、
require_once "error.html"; と書くべきだな。
0342nobodyさん
2006/04/14(金) 19:07:58ID:???0343nobodyさん
2006/04/14(金) 19:16:14ID:???せっかくGoogle先生が内容も少し表示してくれてるんだから、
0344nobodyさん
2006/04/14(金) 20:57:11ID:Vr96m26aecho $req->getResponseBody();
これではlocationで転送(?)された先を表示することができないんですが、
できるようにするにはどうすればいいでしょうか。
0345nobodyさん
2006/04/14(金) 21:01:58ID:???0346nobodyさん
2006/04/14(金) 21:11:12ID:???0347nobodyさん
2006/04/14(金) 22:31:00ID:29AM62vMif文の条件で、「$hogeがあれば」みたいにすることはよくあると思うのですが、
( isset ($hoge)) {
( $hoge != "") {
if ($hoge) {
(strlen($hoge) != 0) {
などなど、似て非なるものが沢山ありますが、
これはどういう基準で使い分けているのでしょうか?
0348nobodyさん
2006/04/14(金) 23:19:47ID:???自分がどういう意味を持たせるか、によるんじゃないかな。
$hoge という変数の存在自体を調べる意図があるなら isset だし、
$hoge の中身について評価する意図があるならそれ相応の判定式だし。
ただ気をつけなくちゃいけないのは、$hoge=="" みたいな判定式。
これは、$hoge が "" のときだけじゃなくて、0 のときや false のときにも成立しちゃう。
本当に "" であるかを判断したいならば、strlen($hoge)==0 や、$hoge==="" を使う。
strlen($hoge)==0 は、$hoge が未定義か "" か false の時に成立して、0 の時には成立しない。
$hoge==="" は、$hoge が存在してその中身が "" の時だけ成立する。
関数の中でも、0 と false どっちも返す可能性があるものがあるから、そういう判定の時にも気をつけて。
ex) strpos
0349nobodyさん
2006/04/14(金) 23:25:17ID:dko7defd俺も串作るときこれがわからなくて断念した
どうやるんだ
0350nobodyさん
2006/04/14(金) 23:30:25ID:???> ( isset ($hoge)) {
その変数が定義されているかどうか。
1度も代入してない、unset()した場合、NULLを代入した場合にのみelse条件になる。
主に初期背低が存在しない、特定のsubmitボタンが押されたか、などの存在チェックに使う。
> ($hoge) {
真として評価できる値が入ってるかどうか。
1度も代入していない、unset()した、NULL、FALSE、0、"0"、""、array()のいずれかが
代入された場合にelse条件になる。
一般的な数値チェック、論理チェックなどに用いられる。
たまに、文字列の有無を判定しようとしてこれを使って「0」を入力されたときにバグってるバカがいる。
> ( $hoge != "") {
> (strlen($hoge) != 0) {
文字列として空っぽかどうか。
1度も代入していない、unset()した、NULL、FALSE、""、array()のいずれかが代入された場合に
else条件になる。
FORMデータの入力有無など文字列の存在チェックにはこれを用いる。
0351347
2006/04/15(土) 00:44:06ID:mBWU3p7Tすばらしい回答ありがとうございます。
人間リファレンスのようですね。
else条件のバリエーションをみるとなんとなく分かってきますね。
自分はなんとなくな理由でissetを多用してる気がします。
逆にstrlenはあまり使ってませんでした。
いずれもしっかりとした根拠なく使っていたので、これからは
意味合いをよく考えて適材適所な感じでいきたいです。
ありがとうございまいsた。
0352347
2006/04/15(土) 00:49:45ID:???>348 350
もう一度言いますがすばらしい回答ありがとうございます。
人間リファレンスのようですね。
else条件のバリエーションをみるとなんとなく分かってきますね。
自分はなんとなくな理由でissetを多用してる気がします。
逆にstrlenはあまり使ってませんでした。
いずれもしっかりとした根拠なく使っていたので、これからは
意味合いをよく考えて適材適所な感じでいきたいです。
ありがとうございまいsた。
0354nobodyさん
2006/04/15(土) 01:13:32ID:???0357nobodyさん
2006/04/15(土) 01:24:51ID:???0358nobodyさん
2006/04/15(土) 02:19:58ID:???0359nobodyさん
2006/04/15(土) 02:29:00ID:???どのように設定して、折り返したらよいかわかりません。
どこか参考になるサイトなどはご存じないでしょうか?
0360nobodyさん
2006/04/15(土) 02:59:27ID:???0362nobodyさん
2006/04/15(土) 06:36:20ID:???【je-pu-pu アクセス解析 有料版のご案内】ttp://je-pu-pu.jp/access/pay.php
月額\350らしいんだけど、どうも内部はこんな感じ→ ttp://je-pu-pu.jp/webalizer/
これってJE製作のツールでなくて、モロ海外フリーソフトのwebalizer↓なんでないかと思うんだけど。
ttp://www.ahref.org/webalizer.html()
勝手にコレの利用料で金取ってもいいの?ライセンス得てるんでしょうか?
それとも表面上は同じに見えるオリジナルなのでしょうか。
せいぜいあってもコードパクって部分的に改変しただけな気がするのですが・・・
もしかして人のフンドシで文字通り商売してるのでしょうか?
もしそうだったらレンタルするのが怖いです。
webalizerの権利関係詳しくないから誰かそっち方面強い人調べてみてくれないですか?
どうぞよろしくお願いします(´・ω・`)
■ このスレッドは過去ログ倉庫に格納されています