【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あたり
0249nobodyさん
2006/04/12(水) 17:26:52ID:???他人の情報や経験がタダだと思ってるバカは1秒でも早く氏んだほうがいいよ。
この世で最も価値があるのは車でも家でもダイヤでもなくて、情報だぜ。
それが分からずに調子コイた戯言をぬかしてるお前は一生底辺で終わる。
0250227
2006/04/12(水) 17:28:09ID:8N7Yz7+/そうですね。該当スレが見つからなかったもので。すいません。
それと、メール保存は違法ではないかとか、保存されるのは嫌だとかいう意見がありましたが、
メールサービスを提供した時点で、メールボックスにはメールデータは保存されます。
保存場所を移したいだけです。もちろん悪用するわけではありません。
なぜ保存場所を移したいのかというと、Webメールサービスに近いものも提供したいからです。
しかし、メールボックスの容量も制限したいです。制限値を超えた時の処理なんですが、受信拒否となっては困ります。
古いものから自動的に削除されていくような容量制限が出来れば、特に保存場所を移す必要もありません。
環境はqmail+vpopmail+ezmlm+mysqlでメールサーバーは動かしてます。
ソースが読めれば簡単なんでしょうが。。。
0251227
2006/04/12(水) 17:32:33ID:8N7Yz7+/偉そうな物言いで申し訳ありませんが、事実ではないですか?
私の経験ではそうでした。
0252nobodyさん
2006/04/12(水) 17:37:58ID:???情報が得られないとわかったなら何も言わずに立ち去れ。
いちいち捨て台詞を吐くのは非常に失礼。
事実かどうかなんていうお前の主観は発言が許される理由にならない。
>>248-249の口調もほめられたものじゃないが内容は完全に同意。
0253227
2006/04/12(水) 17:55:11ID:8N7Yz7+/小学生からやり直せとか、日本語勉強しろとか言われるために書き込みしたわけじゃない。
こいつらが人に言えるほど語学力と知識があるとは到底思えませんがね。
謙虚になれという事はそういう事かい?
人を失礼だと思う前に自分も失礼ではないかと考えてみたらいかがでしょうか。
なんて不毛な掲示板だ。
0255nobodyさん
2006/04/12(水) 18:11:41ID:LsBK61rAキミにはその仕事を請けるスキルが無いんだから、他に回すなり業者に発注するなりしなよ。
せめてここの回答やgoogle先生の結果で何とかできる程度のアタマが無いとさ。
つーか、SQL書ける?
書けるならその案件程度のテーブル設計くらいできるよね?
だったら、何が疑問?
0256227
2006/04/12(水) 18:26:46ID:8N7Yz7+/おっしゃるとおり、スキルはありません。外注も考えています。
ただ、そういうソフトがあれば教えてもらいたかったのです。
SQLは書けます。
vpopmailはSQLにメール毎ぶちこめましたっけ?
ユーザー管理にしかSQLは使っていませんが。
0257nobodyさん
2006/04/12(水) 18:30:48ID:???0258227
2006/04/12(水) 18:37:35ID:8N7Yz7+/PHPやperlで書くなら実現できます。
ただ、メール転送だけはMTUに任せたいのです。
0259nobodyさん
2006/04/12(水) 18:37:43ID:???0260nobodyさん
2006/04/12(水) 18:42:12ID:???すごいなPHP&Perl
0261nobodyさん
2006/04/12(水) 18:48:49ID:???メール転送を任されて戸惑ってるMTUやRWINの図が浮かぶ。
0262nobodyさん
2006/04/12(水) 18:57:56ID:???ファイルを作成したいのですが
そういう場合はどうしたらいいですか?
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
■ このスレッドは過去ログ倉庫に格納されています