【PHP】下らねぇ質問はここに書き込みやがれ 24
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/07/07(金) 14:54:53ID:KnVubDvEここならお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
過去スレは>>2
0356nobodyさん
2006/07/12(水) 20:52:20ID:???自分で考えろ
0357nobodyさん
2006/07/12(水) 21:11:44ID:bxIkUHnKhttp://jp.php.net/manual/ja/index.php
ここに載ってるよ。
てか、ほとんどの質問、ここの関数調べてきゃ普通に一発で行きつくものばっかじゃねーかYO!
くだらない質問というよりも丸投げだろ!
0358nobodyさん
2006/07/12(水) 21:12:02ID:???substr ("abcdefghijk", 2, 4);
0359nobodyさん
2006/07/13(木) 00:01:37ID:???その質問は明らかに悪い
何がしたいのかがわからない
元データがはっきりとわかっていて、取得する文字列もはっきりとわかっているのなら
$foo = "cdef";
とか書かれても仕方ないぞ
0360nobodyさん
2006/07/13(木) 00:22:14ID:???「n桁目〜m桁目までを取り出したいんです」
なのか
「bからgまでの内容を取り出したいんです」
なのか
「cdefって文字があったら取り出したいんです」
なのか、まったくさっぱり。
きみたちゃ小学生レベルかと・・・
0361nobodyさん
2006/07/13(木) 00:38:26ID:4CgVM/D80365nobodyさん
2006/07/13(木) 04:51:44ID:???0367nobodyさん
2006/07/13(木) 18:03:28ID:4QScch9z0368148
2006/07/13(木) 18:58:37ID:???スレ違いだとは思いますが、開発言語がPHPなのでここで質問させてもらいました。
問題を解決するためにどのような情報(header関係だとは思うんですが・・・)を調べればいいのかわかりません。
ヒントだけでもいいのでどなたかわかる方いましたら宜しくお願いします。
0369nobodyさん
2006/07/13(木) 19:02:00ID:???http://example.com/b/login.php
上記のように「a」と「b」二つのフォルダにそれぞれセッションによる
ログイン認証が必要なスクリプトを置いたとき、「a」でログインした状態で
「b」にアクセスすると、既にログイン済みの状態となってしまいます。
上記の現象は、違うディレクトリ間でセッション・ファイルを共有してしまっている…と
いうことなのだと思うのですが、これってPHPの仕様ですか?
ちなみにサーバはXREA+です。
0370nobodyさん
2006/07/13(木) 19:07:50ID:???0371nobodyさん
2006/07/13(木) 19:20:47ID:???http://jp2.php.net/manual/ja/ref.session.php
> 複数回のアクセスを通じて特定のデータを保持する手段を実現するものです。
逆に聞くが、ディレクトリやファイルが変わった時に
保持されないようなセッション情報に何の価値があると?
まずはログインしているかどうかの判定を見直せ。
0372nobodyさん
2006/07/13(木) 19:38:22ID:???そうかねぇ?
http://example.com/admin/login.php
http://example.com/users/login.php
でセッション情報を分離したいとかよくある要求だと思うけど。
>>369
http://jp.php.net/manual/ja/function.session-set-cookie-params.php
で
http://jp.php.net/manual/ja/ref.session.php#ini.session.cookie-path
を限定してあげれば良いと思うよ。
0373nobodyさん
2006/07/13(木) 19:44:17ID:???http://jp.php.net/manual/ja/function.session-name.php
で session ID を別々に分けておかないとごっちゃになるよ。
0374nobodyさん
2006/07/13(木) 19:49:21ID:???状況を想定しているのだろうな
0375nobodyさん
2006/07/13(木) 19:57:48ID:???それだとCookie無効時に不具合が生じるんじゃ?
セッションデータにユーザレベルなり何なりを組み込んで
そっちで判断した方が良いんじゃないかと思うが。
0376nobodyさん
2006/07/13(木) 20:01:30ID:???> それだとCookie無効時に不具合が生じるんじゃ?
あ"? そんなの /a/ と /b/ で分離するとかしないとかに関係ない話じゃん。
そもそも Cookie が無効でもセッション情報が扱えるように
URL に ID 付与とかあるわけで、今回の話題と何の関係が?
0378nobodyさん
2006/07/13(木) 21:32:54ID:???0379nobodyさん
2006/07/13(木) 21:45:50ID:???http://example.com/a/login.php
でログインした状態で
http://example.com/b/login.php
に行くと既にログイン済みになるという問題が起こっている。
>>371は基本的にセッションデータはサーバ上でひとつなので、
ログイン中かどうかを判断するルーチン
(恐らく『セッションデータがある=ログインしている』とかそんな感じと思われ)
を見直せと言った。
>>372-373は
http://jp.php.net/manual/ja/function.session-set-cookie-params.php
でセッションキーを補完するクッキーの有効ディレクトリを制限してやれば
ディレクトリを移った時にはそのクッキーは食わないのでログイン済みにはならないと言った。
>>374は>>372の方法だとクッキーを無効にしてある場合、つまり
http://example.com/a/login.php?SID=hagehagehogehoge
のようにURLパラメータとして受け渡す場合に
http://example.com/b/login.php?SID=hagehagehogehoge
のようにされるとやっぱりログイン済みになるので>>372の方法は不完全で、
セッションデータの中に今どちらにログインしているのかを示すデータを埋め込むべきだと言った。
要するに>>371と同じくログイン中かどうかを判断するルーチンを変えろと。
すると何故か>>377=372はキレ出した。
それを見た>>377は呆れていた。
一方ロシアは鉛筆を使った。
0380nobodyさん
2006/07/13(木) 21:49:19ID:???× 補完
○ 保管
0381nobodyさん
2006/07/13(木) 21:51:39ID:???× http://example.com/a/login.php?SID=hagehagehogehoge
○ http://example.com/a/login.php?PHPSESSID=hagehagehogehoge
0382nobodyさん
2006/07/13(木) 21:54:18ID:???> http://example.com/a/login.php?SID=hagehagehogehoge
> のようにURLパラメータとして受け渡す場合に
> http://example.com/b/login.php?SID=hagehagehogehoge
> のようにされるとやっぱりログイン済みになるので>>372の方法は不完全で、
ログイン済みにはならない。>>373 があるから。
0383nobodyさん
2006/07/13(木) 22:14:17ID:???0384369
2006/07/13(木) 22:16:38ID:???皆さんのご意見を参考に、セッションデータに格納するログイン判定用のデータを、
ディレクトリ毎に変えてみたら上手くいきました。
以下のような感じです。
$_SESSION['loginOK'] = "a-logined"; //「a」でログイン成功時に格納するログイン済みフラグ
$_SESSION['loginOK'] = "b-logined"; //「b」でログイン成功時に格納するログイン済みフラグ
今回のような事例に関しては、意外と気付かないでいる人も多いのではないでしょうか?
同じドメインでディレクトリやサブディレクトリ毎に別のWebアプリを置いていて、
ログイン判定データが同じだったら全部のログイン認証が筒抜け・・・というのは盲点でした。
一種のセキュリティ・ホール(?)になりうるので、このスレのテンプレにも入れたらいかがでしょうか?
0385nobodyさん
2006/07/13(木) 22:25:36ID:dYQP4E5n<label>
<input type="file" name="upfile" size="35" />
</label>
<label>
<input type="submit" name="Submit" value="送信" />
</label>
</form>
<?
if($_POST['Submit'] == "送信"){
echo $_POST['upfile']:
}
?>
アップローダーを作ろうと思っているのですが、
上記のようにしても、upfileには何も格納されないのです。
どうすれば格納されるようになるのでしょうか?
0386369
2006/07/13(木) 23:03:37ID:???さらに実験してみたところ、
仮にログイン判定用のセッション・データ(>>384で書いたログイン判定フラグ)が全く同じ場合でも、
session_name('a');
session_name('b');
などのようにsession_nameをディレクトリ毎に分けて設定する(毎回session_startの前にコールする)という方法でも
大丈夫だということが分かりました。
0387nobodyさん
2006/07/13(木) 23:28:13ID:???$_SESSION["siteA"]["色んな情報"] = ...
$_SESSION["siteB"]["色んな情報"] = ...
ってやってたけどこれじゃ何か問題あるの?
0389nobodyさん
2006/07/14(金) 01:29:17ID:???一度、全ての行を、変数にいれて、
最後の行だけを除いて、保存するというやり方しかないんでしょうか?
テキストファイルがでかくなるとメモリの消費が辛いんですが、変数を節約するいい方法を教えて下さい
0391nobodyさん
2006/07/14(金) 03:23:20ID:???やりようはあるよ
ftellで場所を記憶しながらfgetsで取得していって
最後にftruncateでいける。
行の長さがある程度予想つくならば、最初にfseekしてパフォーマンスを上げられる。
0392nobodyさん
2006/07/14(金) 03:27:25ID:???最終行の先頭位置さえ分かればftruncate()で以降を削除できる。
最終行の位置を探すには
1.頭から1行ずつ読み込んでいって行末のftell()を保持しながら最後まで探していく
2.fseek()でファイル末尾に移動して1文字ずつ後ろから読み込んでいって1つ前の行末を探す
3.fseek()でファイル末尾から1行以上の分量だけ戻った位置に移動してそこから行単位に読み込む
などのアルゴリズムが考えられる。
3番は1行の最大長が分かってる場合は比較的有効。これが全然不明だと
100バイト戻って探索→ダメだったらさらにもう100バイト戻って…みたいになって大変。
この辺は対象ファイルのでかさなどからどこまで手間をかけるべきかを自身で判断しる。
処理時間は問題にならず単に消費メモリ量だけの問題なら1番で十分対応できる。
この種の末尾削除処理が頻繁に発生するなら、そもそもファイル書き込みの段階で
各行の先頭位置をインデックスファイルとして別途保存するか
そもそもファイルなんてやめてDB使った方がいい。
0393nobodyさん
2006/07/14(金) 03:29:28ID:???あと、全部丸ごと変数に入れなくても、
1行読み込み→その行を別のファイルに出力
というのを行単位に繰り返していって、
最後に元ファイル削除&別のファイルをリネーム、
って手順でも単純ながらメモリはほとんど食わずに処理できる。
でも、分量が多いならftruncate()の方が処理が軽いけどね。
0394nobodyさん
NGNGどうやればいいでしょうか?
"あ" を "202 240"
"犬" を "214 242"
というふうにです。
ご存じの方がいればよろしくお願いします。
0395nobodyさん
2006/07/14(金) 04:19:14ID:???$c = "あ";
$o = decoct((ord($c{0])) . " " . decoct(ord($c{1}));
echo $o;
0396nobodyさん
2006/07/14(金) 05:37:32ID:???言われてみて自分の管理してるサイト調べてみたら、
別々のシステムなのにログイン情報(セッションファイル)が共通になってた…orz
0397nobodyさん
2006/07/14(金) 07:08:44ID:???マニュアル嫁
http://jp.php.net/manual/ja/features.file-upload.php
0398nobodyさん
2006/07/14(金) 11:50:58ID:uuZ6ZGypfwrite($fp,'こんにちわ');
fclose($fp);
上記のようにファイルを作成する際に、
文字コードをUTF8に指定するには
どう記述すればいいんでしょう???
0400nobodyさん
2006/07/14(金) 12:12:07ID:???0401394
2006/07/14(金) 12:26:35ID:???ありがとうございました。後で試してみます。
それで、逆を聞くのを忘れていました。
"202 240" を "あ"
"214 242" を "犬"
というパターンです。よろしくお願いします。
0402nobodyさん
2006/07/14(金) 12:34:40ID:???「decoct」って関数を示されているわけだから、マニュアル読めば関連項目とかで
見つけられそうだ、とは思わないのでしょうか?
http://jp.php.net/manual/ja/function.decoct.php
0403nobodyさん
2006/07/14(金) 12:36:45ID:???0404nobodyさん
2006/07/14(金) 12:45:47ID:???http://pc8.2ch.net/test/read.cgi/php/1150088761/
0405nobodyさん
2006/07/14(金) 12:56:23ID:Gr8Njl8B内部エンコーディングって何が適当ですか?
0406nobodyさん
2006/07/14(金) 13:14:14ID:???0407nobodyさん
2006/07/14(金) 13:52:59ID:mRNg6YQD0408nobodyさん
2006/07/14(金) 14:00:17ID:???例外が少ない
0409nobodyさん
2006/07/14(金) 14:05:42ID:???そのサーバで使えるならUTF-8が安定してていいと思う
使えなきゃEUC-JP
Shift-JISはカタカナのソとかで面倒だから使わない方がいい
ちなみにコレはPHP書くときの文字コードの話ね
正規表現使うときはデータに合わせて正規表現の文字コードを指定するよろし
0410nobodyさん
2006/07/14(金) 16:39:54ID:???DB2へ接続するといった処理を行わせようとしているのですが、
HogePDOのコンストラクタでPDOのコンストラクタを2回呼び出し
ても問題ないでしょうか?
class HogePDO extends PDO
{
//DB1接続挑戦
parent::__construct(DB1の設定);
if( DB1接続失敗? )
{
//DB2接続挑戦
parent::__construct(DB2の設定);
}
}
0412nobodyさん
2006/07/14(金) 16:55:10ID:EKwqojz9こんな感じで 'PHP' を辞書から(国語、英和、和英)検索
ttp://dictionary.goo.ne.jp/q=PHP
0413nobodyさん
2006/07/14(金) 17:08:35ID:???0414nobodyさん
2006/07/14(金) 17:17:08ID:???てことで三省堂しか選択肢ないんじゃないかな
0415nobodyさん
2006/07/14(金) 17:35:29ID:LYbOhGxKこういうのを参考にインストールしてみました。
http://www.bnote.net/windows/windows/win_php.shtml
Apacheのhttpd.confの
LoadModule php5_module c:/php/php5apache2.dll
があると、Apacheが起動しません。
これをコメントアウトするとApacheが起動できて、htmlは見れます。
PHPはコマンドライン版は動くのですが、
起動しない理由のヒントをください。
0416nobodyさん
2006/07/14(金) 17:39:26ID:???俺はここみてやったらできたぞ。
ttp://oss.kk-ntc.co.jp/jpug/pukiwiki/pukiwiki.php?PHP%A4%CB%A4%E8%A4%EBWeb%A5%A2%A5%D7%A5%EA%A5%B1%A1%BC%A5%B7%A5%E7%A5%F3%B3%AB%C8%AF
0417415
2006/07/14(金) 18:02:38ID:???おおありがとう!
> 注2)apache_2.x.x系は、今回は使用しません。
> PHP4とApache2の組み合わせは現時点ではお奨めできません。
PHP5を使いたいのにっ _| ̄|○
Apache2.2か!?Apache2.2がだめなのか!?
0418nobodyさん
2006/07/14(金) 19:41:12ID:vYtz7wstをした後で、$linesにhogeという文字が入っている行のみを見つけ出すには
どうすれば良いですか?正規表現を使うのかなぁという気がするのですが
正規表現を使った経験がなく、どうしたらよいのか方法を教えてください。
0419nobodyさん
2006/07/14(金) 19:45:43ID:???if (preg_match('/hoge/', $line)) {
print("Hit!!\n");
}
}
0421ぬこえもん(=・ω・) ◆S715eQBvs6
2006/07/14(金) 20:25:24ID:Rg3ieVQg辞書順に配列するために何かよいアルゴリズムは無いでしょうか??
0423nobodyさん
2006/07/14(金) 20:49:28ID:???iframeを使うとリンク元がそのページになってしまいます。
何か良い方法はないのでしょうか?
(スレ違いならすみません。)
0424nobodyさん
2006/07/14(金) 20:51:23ID:???.......
<img src="http://hoge.com/hogehoge.php" />
0425ぬこえもん(=・ω・) ◆S715eQBvs6
2006/07/14(金) 20:53:09ID:Rg3ieVQgごめんなさい、言い忘れてました
テキストファイルだとかに生ファイルとして書き込みしようかと考えています。
それだとソフトウェアで再生することもできますし。
DBではこんなこと考えなくてもいいのかもしれませんね
0427nobodyさん
2006/07/14(金) 21:05:37ID:???textだとまず該当する語句がそのファイル内にあるかどうかの
真偽を判定しなきゃならんが、語句の数が多くなってくるとPHP標準の
関数で配列とかに読み込むとメモリ食うし、ソート処理も時間かかる。
DBにまかせた方がベター
どうしてもtextでやるんなら力任せ検索で真偽判定して偽であれば追加、
っていうのが面倒くさくなさそう。Boyer検索とかもあるけど。
0428nobodyさん
2006/07/14(金) 21:18:26ID:???リファラが欲しいなら、JavaScriptを使って
画像なりを出力するサーバースクリプトに引数として渡して呼び出すか
HTMLをPHPとして実行できるように設定するかの
どちらかかな。
0429426
2006/07/14(金) 21:18:30ID:???<img src="./count/count.php" width="0" height="0" />です。
0430ぬこえもん(=・ω・) ◆S715eQBvs6
2006/07/14(金) 21:50:14ID:Rg3ieVQgそうですか・・・・
やっぱりそれしかないのですね・・・・
構築できたらそれだけでDBソフトとして利用できそう
0431nobodyさん
2006/07/14(金) 21:53:15ID:3oB/DzeI0432nobodyさん
2006/07/14(金) 22:38:02ID:???・単語単位にファイルを作る
とか
・記録は登録順にしておいて各単語の順番を保持するindexを作る
とか
・1行の長さを固定にするか行の位置をindexに記録しておいて自由に挿入削除可能にする
とか。
ちなみにテキストファイルじゃないけど固定長レコードで高速キー検索できるようにした
ファイルを使ったDBもどきとしてはdbmというのが既にある。Perl辺りじゃ標準装備。
0434nobodyさん
2006/07/14(金) 22:43:12ID:???彼らは「仕組みを知りたい」んじゃなく「こうやったらこうなる」という
結果が出てくる方法だけをケーススタディとして知りたいだけなんじゃないかなー。
WEBから入ってJavaScriptのサンプル集とかでしかプログラムしたことないやつには多そう。
もしも「そんなことはない!」というなら漏れなく消防レベルの知能指数と断定してやろうw
0435nobodyさん
2006/07/14(金) 22:48:12ID:???0436ぬこえもん(=・ω・) ◆S715eQBvs6
2006/07/14(金) 23:17:25ID:Rg3ieVQgはあくしました
サンクスです
0437nobodyさん
2006/07/14(金) 23:31:36ID:???複雑な条件を探すんならともかく、単にhogeって単語を探すだけなら
正規表現は使わない方が速いし確実。
strpos()使え。
0438nobodyさん
2006/07/14(金) 23:35:14ID:???作れますでしょうか?
phpですとなかなか資料が見当たらなくて・・
perlだと「ひみこーど」?というのがあるみたいですがphpで可能でしょうか
0439nobodyさん
2006/07/14(金) 23:54:51ID:???0441nobodyさん
2006/07/15(土) 00:04:59ID:???PEAR::Text_CAPTCHA
ttp://pear.php.net/package/Text_CAPTCHA
ttp://pear.plus-server.net/package.text.text-captcha.html
紹介ページ
ttp://www.doyouphp.jp/sample/sample_others_captcha.shtml
ttp://kawama.jp/archives/2006/05/peartext_captch.html
ttp://blog.poyo.jp/archives.php/categ-1/year-2005/month-1/id-1106990727
0442nobodyさん
2006/07/15(土) 10:01:30ID:???preg_grep というすばらしい関数がある。
$mutches = preg_grep('/hoge/', $line);
0443nobodyさん
2006/07/15(土) 10:02:55ID:???PHPだと無理?
0446nobodyさん
2006/07/15(土) 12:13:33ID:DUyjY8jkphpをCGI(Suexec)で動かして、ダウンロードさせるファイルのパーミッションを400にし、↓のようなスクリプトでダウンロードさせようと考えています。
if(ある条件をクリアしたら){
header("Content-Disposition: inline; filename=\"".basename($path_file)."\"");
header("Content-Length: ".$content_length);
header("Content-Type: application/octet-stream");
if (!readfile($path_file)) {
die("Cannot read the file(".$path_file.")");
}
}
この場合、ダウンロードさせるファイルは、99%不正にダウンロードされないと思っていいのでしょうか?
あと、他にパフォーマンスやセキュリティ面で勝る方法があれば、教えていただけるとありがたいですm(_ _)m
0447nobodyさん
2006/07/15(土) 12:16:29ID:???$path_fileとかいうのがDOCUMENT_ROOT以下に置いてないんなら
まー不正ダウンロードされることはないっしょ。
あとはそのif条件を不正に成立されたりしないかくらいでないの?
0450nobodyさん
2006/07/15(土) 12:46:12ID:DUyjY8jk安心しました。ありがとうございますm(_ _)m
念のため.htaccessも使おうと思います
0451nobodyさん
2006/07/15(土) 13:19:27ID:dl9oNIQiそういうのはarray_filterとかarray_reduceだと思うけど、grepと比べたら使い勝手は悪いかも。
0452nobodyさん
2006/07/15(土) 13:35:16ID:???PHPの関数はあくまでC言語ライクだが、Perlの関数はシェルスクリプトライクなわけで。
でも、だからこそ誰が書いても比較的一定のコーディングスタイルを保ってられるんだと思うけどね。
0453nobodyさん
2006/07/15(土) 14:37:30ID:RYeH9Y82環境は、SunCobaltRedHatLinux7.0+PHP5.0.4+nkf2.0.4です。
「ココ,ココリコ,ココ数」とだけ書いたsample1.csvをUTF-8(改行コードCR+LF)
で作成します。そして、test1.phpというファイルをUTF-8(改行コードCR+LF)で
作成し、<input type="file"〜>でファイルアップロードが出来、fgetcsvで、
アップロードしたCSVファイルの要素を取得出来るように、test1.phpに記述します。
test1.phpに、
list($field1,$field2,$field3)=fgetcsv(アップロードしたファイル名);
print("1番目".$field1."2番目".$field2."3番目".$field3);
と書くと、
「1番目??コ2番目??コリコ3番目??コ数」
と、先頭の文字が「??」に文字化けしてしまうのです。この原因は、どなたかお分
かりでしょうか?先頭の「コ」以外は文字化けしていないので、「コ」という文字
が原因ではないと思います。test1.phpの先頭に「mb_internal_encoding();」と書く
と、「ISO-8859-1」と出て来ました。これが原因かと思って、
「mb_internal_encoding("UTF-8");」としたのですが、やはり同じ文字化けのままでした。
ちなみに、他のPCにFedoraCore2+PHP5.0.4+nkf2.0.4をインストールし、全く同じ(!)
sample1.csvとtest1.phpで試した結果、「1番目ココ2番目ココリコ3番目ココ数」と
なり、正しく表示されました。けれども、本番機はSunCobaltRedHatLinux7.0で動いて
いますので、本番機の文字化けを直さなくてはならないのです。どなたかお分かりで
しょうか?教えて頂ければ、幸いです。
0455232
2006/07/15(土) 14:50:39ID:???<?php
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
"<b>example: </b><div align=left>this is a test</div>",
$out, PREG_PATTERN_ORDER);
print_r($out);
?>
以上を実行すると以下の配列が出力されます。
Array ( [0] => Array ( [0] => example:
[1] => this is a test
[1] => Array ( [0] => example:
[1] => this is a test ) )
これだと配列が取り出しにくいので
Array ( [0] => example:
[1] => this is a test )
↑こんな感じに$outに配列を格納することは出来ませんか?
■ このスレッドは過去ログ倉庫に格納されています