【PHP】下らねぇ質問はここに書き込みやがれ 23
■ このスレッドは過去ログ倉庫に格納されています
0001909
2006/06/23(金) 01:59:03ID:lPdqGX0Zここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
過去スレは>>2
0446nobodyさん
2006/06/29(木) 02:52:13ID:???つーかメアドかどうか確かめる正規表現としてはいい加減すぎwww
0447せっ☆マ ◆wwwwWwWWWw
2006/06/29(木) 02:58:19ID:???mjk!!!
目からウロコです
ありがとうございました
>>446
その後別のチェックも加えてるから大丈夫。
エラーメッセージを細かくするために分けた。
0448nobodyさん
2006/06/29(木) 02:58:22ID:???数値と文字を比較するときは数値として評価して比較されるから。
"hoge"は数値変換すると数字解釈できないので0になる。
var_dump(intval("hoge"))はint(0)。
ttp://www.php.net/manual/ja/language.operators.comparison.php
> 整数値を文字列と比較する際、文字列が 数値に変換されます。
0449nobodyさん
2006/06/29(木) 03:01:57ID:???> 問題は0だけのようですので、
array_search("2hoge",array(0,1,2));
はint(2)が返る。
0450nobodyさん
2006/06/29(木) 03:05:39ID:???なるほど!ありがとうございました。
いろいろ試してみた結果、haystackもneedleもすべてstringにキャストした上で
strictにするしかないようでした。
0452nobodyさん
2006/06/29(木) 11:11:02ID:j7oCXco7表示されないレンタルサーバーがあります。
0453nobodyさん
2006/06/29(木) 11:12:24ID:???0458nobodyさん
2006/06/29(木) 14:47:43ID:???ブラウザからダウンロードできるようなスクリプトを作りたいのですが、
上手くいきません。
というのもディレクトリの容量がある程度あると
サーバー側のメモリを使用しきってサーバーダウンしてしまいます。
大容量ディレクトリのダウンロードでもメモリを占有しないような
上手い方法はないでしょうか?
0461nobodyさん
2006/06/29(木) 16:00:58ID:MDHzuRjB有難うございます。
おかげさまでPEARが無事に入りました!
なんとか、1つのブログPINGポータルに反映させることができました。
しかし、大手のPINGポータル(MyBLOGやGOOなど)は未だに反映されません…
これはPHPの問題というより、ポータル側のスパム対策などでしょうか。
こちらのスレッドからずれてしまいそうですので、検証の後、別の所で質問させて頂くかもしれません。
皆様本当に有難うございました!
0462nobodyさん
2006/06/29(木) 16:24:57ID:???shell_exec でtarか何かでアーカイブするシェルを動かす
終了後、できたファイルにへのリンクを生成して出力する
0464nobodyさん
2006/06/29(木) 18:23:57ID:???会員制のシステムで一般的なユーザ認証の方法というのはどのような仕組みですか?
例えば、
・ログイン時にIDとPASSでDBを検索し、それ以降はセッションにログイン済みフラグ的なものを与える。
・ログイン後はIDとPASSを暗号化したもの+認証情報でないユーザ番号をセッションIDにしてアクセス毎にユーザ番号を基にDB内を再検索。
とか...
あと、MovableType、XOOPS、PLONEなどが使用する認証の仕組みもわかる方いましたら、是非教えてください。
宜しくおねがいします。
0465nobodyさん
2006/06/29(木) 18:57:58ID:???XOOPSは
>・ログイン時にIDとPASSでDBを検索し、それ以降はセッションにログイン済みフラグ的なものを与える。
アクセス毎に認証チェックするというのは珍しいケースだと思うけど?
0466nobodyさん
2006/06/29(木) 19:36:08ID:???0467nobodyさん
2006/06/29(木) 20:21:44ID:???ここだとhttp://pc8.2ch.net/test/read.cgi/php/1150995543/l100とかです
0469379
2006/06/29(木) 21:49:46ID:zAm3zlYqopenのタイミングでエラーになります。
どなたか分かりましたら教えてください。お願いします。
OS:linux kernel 2.6
gcc
php4
これは成功します。
PHPからshmop_open(keyid, "c", 0666, size); でopen。
その後、Cアプリから shmget(keyid, size, IPC_CREAT|IPC_EXCL|0666); でopen。
逆の順で実行するとエラーになる。
uid, gid はともにあわせています。アパッチのuserはconfigでCアプリの
ユーザーに設定しています。
0470469
2006/06/29(木) 21:52:16ID:zAm3zlYq0471nobodyさん
2006/06/29(木) 22:16:27ID:???エラーが出てるならその内容を書いたほうがいいと思うのデス
0472469
2006/06/29(木) 22:35:58ID:???今確認できる場所にいないので後でもう一度見てみます。
あらかじめC側でメモリを割り当てておいてphpでopenしにいくと
エラーではねられるんですが、openモードは "c" "a" ともに一緒でした。
0473nobodyさん
2006/06/29(木) 23:26:56ID:???> >>422
> _check.phpがリファラーを返さない仕様で、
> Apacheの設定で画像の直リンクを禁止するためにリファラーチェックしてるとか。
apacheではそういう設定をしていないんですけどねぇ…
ちゃんと動作しているようなのですが、どんな可能性があるのかと思いまして。
ただのバグですかね。
0474nobodyさん
2006/06/29(木) 23:35:53ID:???> ただのバグですかね。
自分の思い通りに動かないのをすぐバグ扱いするのは良くない。
telnet なりで自分でリクエストを投げてみて自分の目で確認すべし。
0475nobodyさん
2006/06/29(木) 23:53:12ID:???サーバにかかる負荷って実際どれぐらい違うんでしょうか?
2000ぐらいあるファイルのフッタ部分をいちいち書き換えてられないので
includeで表示させたいんですが…。
0476nobodyさん
2006/06/29(木) 23:57:19ID:???サーバーのハードやHTMLの内容やPHPの設定にもよるんじゃないの?
重いのはHTMLを構文解析しなきゃいけなくなる部分なので
includeファイルのサイズは大して問題にならないと思うけど。
(元のHTML自体が巨大だとその分だけ重くなる)
でもせいぜい負荷2%が5%になったとかそんなもんだと思うけどねー
(既存の倍以上には重くなると思う)
0477nobodyさん
2006/06/29(木) 23:59:21ID:???情報の痕跡も探さずに可能性だけ列挙して
その可能性が該当しない=バグだろう
ってのはあまりに短絡的な考え方だろう。
0478nobodyさん
2006/06/30(金) 00:05:43ID:???474 の人ですが、自分も入れて試してみました。
ふつーに、200 になりましたが?
単に pc2m.php のパーミッションの問題のような気がしますが。
0479nobodyさん
2006/06/30(金) 00:13:05ID:???やっぱり画像の URL だ。となると、やっぱり自分でリクエスト確認だ。
情報少なすぎなので、これ以上はなんとも。
0480nobodyさん
2006/06/30(金) 00:14:58ID:8PS/D42hどんなとき777で、705で、666なのか数字も一緒に教えて下さい。
0482nobodyさん
2006/06/30(金) 00:45:17ID:???0483nobodyさん
2006/06/30(金) 01:03:54ID:???0484nobodyさん
2006/06/30(金) 01:04:50ID:???親父用語だ
0487nobodyさん
2006/06/30(金) 01:20:12ID:???容量があるならtarとか無圧縮格納可能な形式でoutputは出力したまま逐次ファイルを追加していくとか。
>>475
2kB+include1kBのPHPと3kBのhtmlをabで調べたら1.5倍程度だった。
>>476
PHPってHTMLをパースしてるの?
0488nobodyさん
2006/06/30(金) 01:28:15ID:???>487
検証までして頂いてありがとうございます。
2倍までとはいかずとも1.5倍ぐらいにはなってしまうんですね。
かといってJavaScriptで書き出してしまうとSEO的にどうしようもないですし…。
やはり少しでも負荷を減らすには静的ファイルにするしかないですね。。
楽はしたいけどサーバが重過ぎて。。。orz
0489nobodyさん
2006/06/30(金) 01:41:37ID:???それはセッションを使っているのでしょうか?
どういう仕組みなのかわからないので、どなたか教えてください。
0490nobodyさん
2006/06/30(金) 01:41:42ID:???htmlの転送ってのは本来屁みたいなもんなんだよ。
それすらきついということは他に改善の余地がありそう。
まあ楽をしたいだけならhtmlを自動で編集するスクリプト書くというのもあるけどPHPから離れてきたのでこのへんで。
0491nobodyさん
2006/06/30(金) 02:11:15ID:???0492nobodyさん
2006/06/30(金) 02:12:55ID:???include方式にした上でそれはワークディレクトリ上に置いといて、
本来のDOCMENT_ROOTに吐き出すスクリプト作って一括更新すりゃいいだけでは。
foreach(file(WORKDIR . "*.html") as $file) {
ob_start();
include(WORKDIR . $file);
$html = ob_get_contents();
ob_end_clean();
$fp = fopen(SAVEDIR . $file, "w");
fwrite($fp, $html);
fclose($fp);
}
こんだけですみそーな。
0493nobodyさん
2006/06/30(金) 02:14:32ID:???まちがい
> foreach(file(WORKDIR . "*.html") as $file) {
は
foreach(glob(WORKDIR . "*.html") as $file) {
ね
0494nobodyさん
2006/06/30(金) 02:29:37ID:???おおお…ここまでしてくださるとは…。感謝…。
2000もファイルがあるとタイムアウトが怖いですがちょっと試してみたいと思います。
<(_ _)>どもどもです
0496nobodyさん
2006/06/30(金) 02:59:32ID:???>shell_exec でtarか何かでアーカイブするシェルを動かす
>終了後、できたファイルにへのリンクを生成して出力する
これをワンクリックで処理する方法ないでしょうか?
アーカイブにワンクリック、出てきたリンクにワンクリック、
なら簡単にできそうですが、
ワンクリックで、アーカイブ、ダウンロードまで
こなしたいと思います
0497nobodyさん
2006/06/30(金) 03:03:31ID:???0498nobodyさん
2006/06/30(金) 03:27:50ID:???精度よくやるならセッション(もしくはそれに類するもの)を使うが、
別になくても出来ないこともない。
やり方はIPアドレス−誰−現在居る/居ないの関係を
どうやって結びつけるかを考えれ。
(IPアドレス−誰の関係はなくても出来る)
現在居る/居ないはHTTPの仕組み上「接続状態」は得られないので、
接続状態の場合に限ってJavascriptなどで周期的にアクセスを繰り返して
接続を通知する。最後の接続後一定時間は接続してると見なす。
などのやりかたをする。
0499nobodyさん
2006/06/30(金) 08:48:06ID:???自分一人で開発してることもあって、今までは「手続き型プログラミングで十分。
ベタ書き最高!」なんて思ってスパゲティ化もあまり気にせずにいたのですが、
最近ちょっと規模の大きいWebシステムを作っていて、スクリプト・ファイルが何十個にもなり、
また一つのスクリプトが1000行以上になってきたりしました。
そうすると、もはや自分で作ったプログラムなのに、どこでどう処理してるか収拾がつかなくなって
なんかすごく複雑&冗長で無駄な処理をやってる部分も多々あります。
まだオブジェクト指向で作ったことがないし知識もないので、
「一度システムが全部完成してからオブジェクト指向で書き直せばいいや」と思ってたんですが、
このままだとさらに混乱が悪化しそうなので、今すぐオブジェクト指向を勉強して、それで書き直したほうがいいでしょうか?
それともとりあえず完成までベタ書きで続けるべきでしょうか?
0500nobodyさん
2006/06/30(金) 09:10:31ID:Y/YT1xaCcase "aaa":
include = "aaa.php" ;
break;
case "bbb":
include = "bbb.php" ;
break;
}
のようにして読み込みファイルを変えているのですが、
これが100も200もとなってくると管理が大変ですし、
「〜の場合」というチェックを上から順番にしていくでしょうから、
それが上にあった時は良いですが、後の方に存在していたとすると、
それまでのマッチに負荷がかかるというか、
何か(精神的に)スッキリしません。
0501nobodyさん
2006/06/30(金) 09:13:21ID:???設計からやり直せ
ちゃんとした設計であれば、オブジェクト指向でも手続き型でもどっちでも大差はない
オブジェクト指向を学ぶにしても、そんなスパゲティコードは捨てて、小さいシンプルな題目から始めた方がよい
0502軟式PHP
2006/06/30(金) 09:14:02ID:???俺は可視性が高ければいい、必ずしもOOPをしなければならないとは思わないなぁ。
複雑・冗長で無駄な処理が多いということは、自分の中でルールをキチンと決めてプログラミングを
作ってないような気がする。
でも一度勉強してみたほうがいいかもね。あと、完成後にOOPに書き直すのは手間がかかりまくるのでやめたがいい。
>>500
ファイル名を配列化したら?
$fileList = array( "aaa" => "aaa.php",
"bbb" => "bbb.php");
if( isset( $fileList[$XXX] ) ){
include( $fileList[$XXX] );
}
0506nobodyさん
2006/06/30(金) 10:15:30ID:???REMOTE_ADDR,timestamp
のログファイルを作って、タイムスタンプが5分以内なら入室中、5分越えたらログから削除、
みたいにつくりたいところだな。
(5分は、10分でも15分でもお好みに)
同一IP者が複数人いても一人と扱われるが、そんなのは知らん。
0508nobodyさん
2006/06/30(金) 11:05:15ID:???0509nobodyさん
2006/06/30(金) 11:33:58ID:0OZ4Tvf7値を取得したいのですが良い方法はないでしょうか?
> class Config {
> private $conf;
> public function __construct() {
> $this->$conf = array();
> $this->conf['hoge'] = 'tarou';
> $this->conf['hoge1']['hoge1-1'] = 'hanako';
> $this->conf['hoge1']['hoge1-2'] = 'php';
> }
> public function get( ... ) { # 可変引数
> # 引数をそのまま添字に使用したいです。
> return $this->conf[ ... ];
> }
> }
>
> $cfg = new Config();
> # 'tarou'が表示されます。
> print $cfg->get( 'hoge' );
> # 'hanako'が表示されます。
> print $cfg->get( 'hoge1', 'hoge1-1' );
> # 'hanako'が表示されます。
> print $cfg->get( 'hoge1', 'hoge1-2' );
> exit();
配列で受け取ってループさせれば出来そうだと思ったのですが、
できればループは使用したくありません。。。
0510nobodyさん
2006/06/30(金) 11:46:47ID:???{
0511nobodyさん
2006/06/30(金) 12:00:31ID:???動かして確認してないけど、こんな感じで再帰使えばいい
class Config {
var $conf = array();
function get() {
return get_array_value(func_get_args(), $this->conf);
}
function get_array_value($keys, $data) {
$key = array_shift($keys);
$value = $data;
if ($key !== null)
$value = is_array($data) ? get_array_value($keys, $data[$key]) : null;
return $value;
}
};
0512nobodyさん
2006/06/30(金) 13:27:49ID:???セッションの中身を定期的に消さないと鯖に負担がかかると聞いたのですが、
自動的には消されないのでしょうか?
0514nobodyさん
2006/06/30(金) 13:46:39ID:???自動的に消すような設定をしているディレクトリに
セッション情報を保存するなら勝手に消される。
(だから自分の予期せぬ結果にならんこともないのだが)
つかセッション機能には一応ガーベージコレクトもあるんだから
それで処理できる範囲ぐらいは自分で後始末ぐらい汁
0515nobodyさん
2006/06/30(金) 15:09:11ID:4l4GYYpWanswe.txt、flaファイル、phpファイル、サーバーにアップしても
エラーメッセージすらでません…。phpファイルに問題があるんでしょうか?
それともflaファイルのほう?
<?php
$content="
Hi $nameempf\n
the following site you have to visit: http://www.webdesign-ks.de \n
$name
";
mail($empfang, "recommendation from $name", $content, "From: $absender");
$filename = "answer.txt";
$fd = fopen( $filename, "r" );
$contents = fread( $fd, filesize( $filename ) );
fclose( $fd );
mail( "$absender", "Danke f�� Ihre Weiterempfehlung", "$contents\n\n", "From:[email protected]\n" );
$signal=1;
echo "signal=$signal";
?>
0516nobodyさん
2006/06/30(金) 15:53:37ID:Y/YT1xaC>>504
>おまいは何をやっとるんだ・・・
HTMLしか知らなかった時はページの分だけ作らねばならず大変でしたが、
>>500でかなり楽になりました。
というのを、継続していた状態です。
今後、効率的な管理ができるようにしていきます。
存在しない「sss.php」が指定された時のことも考えます。
(switchの場合はdefaultで処理できたので)
0517nobodyさん
2006/06/30(金) 16:13:57ID:???if (!eregi ('[0-9a-zA-Z]', $str)) or die ('不正な要求ですわ');
if (file_exists ('./' . $str . '.php') or die ('Not Found');
include ('./' . $str . '.php');
0518nobodyさん
2006/06/30(金) 16:40:45ID:???tableで、widthを指定しているのですが.(ドット)があると改行されません。
ドットがあっても改行させることってできないのでしょうか?
スレ違いなのは十分わかってますがなにとぞよろしくお願いします。
0519nobodyさん
2006/06/30(金) 16:55:42ID:???0520nobodyさん
2006/06/30(金) 16:57:13ID:???対策は、自分で改行されない文字列長を判別し、必要な長さで改行を挿入するとかだろうね。
0521nobodyさん
2006/06/30(金) 17:04:42ID:???まあ改行されちゃうと、意味を変な解釈をされるからね。
例えばこのスレをWebブラウザ(IEなど)で閲覧すると:
http://wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.example.com/
このリンク(正確にはアンカー)文字列がウィンドウ枠を越えてると横スクロールバーが出ると思う。
0522nobodyさん
2006/06/30(金) 17:10:50ID:???たとえばこんな感じだと.aaaは改行されずbbbは改行される
<table border=1><tr>
<td width="5">.aaa .aaa .aaa</td>
<td width="5">bbb bbb bbb</td>
</tr></table>
0523nobodyさん
2006/06/30(金) 17:15:12ID:???0526nobodyさん
2006/06/30(金) 17:18:05ID:???0527nobodyさん
2006/06/30(金) 17:28:13ID:Y/YT1xaC>>517
>>500です。
ご指導により、以下のようになりました。
気分的にはかなりスッキリしましたが、
実効果として>>500よりも処理は早くなるのでしょうか。
・$PAGE_IDと同名のファイルを作成しておき、読ませる。
・$PAGE_IDが空の時はtop.php(トップページ)を読ませる。
・$PAGE_IDに相当するファイルがない時はcaution.php(警告)を読ませる。
0528nobodyさん
2006/06/30(金) 17:29:18ID:Y/YT1xaC$file_name = "files/{$PAGE_ID}.php" ;
if(isset($PAGE_ID)){
if(file_exists($file_name)){
include($file_name) ;
}
else{
include "file/caution.php" ;
}
}
else{
include "files/top.php" ;
}
問題点:
・$PAGE_IDにより選択されるファイルは、全て1つのディレクトリ(files)に入れておくことになり、整理しにくい。
・目下、$PAGE_IDとファイル名が異なっている状態なので、上記導入の際はリネームする必要がある。
・ヘッダが共通ファイルであり、$PAGE_IDにより<TITLE></TITLE>等の内容が変わるので、
結局>>500のようにswitch,caseを使わねばならない?
0529nobodyさん
2006/06/30(金) 17:41:37ID:???>$PAGE_IDにより選択されるファイルは、全て1つのディレクトリ(files)に入れておくことになり、整理しにくい。
$PAGE_IDの文字列にスラッシュがあっちゃだめなん?
つーかこれは何がしたいんだ?
0531nobodyさん
2006/06/30(金) 18:14:17ID:Y/YT1xaChttp://www.test.com/$PAGE_ID.html
でアクセスするようにしているのです。
0532nobodyさん
2006/06/30(金) 18:16:35ID:???<?php
if (isset ($_GET["id"])) {
$file_name = rawurldecode ("./files" . $page_id . ".php");
if (file_exists ($file_name)) {
include ($file_name);
} else {
include ("./files/caution.php");
} else {
include ("./files/top.php");
}
?>
1. $page_id = "hoge" → "files/hoge.php"
2. $page_id = "foo%2Fhoge" → "files/foo/hoge.php"
3. $page_id = "foo%2Fbar%2Fnull" → "files/foo/bar/null.php"
> ヘッダが共通ファイルであり、$PAGE_IDにより
> <TITLE></TITLE>等の内容が変わるので...
ヒント: ファイルをオープンし、正規表現で、
preg_match("/<title>.+<\/title>/i", $data, $matches);
echo htmlspecialchars ($matches[0]);
0533nobodyさん
2006/06/30(金) 18:27:51ID:???逆に面倒じゃないか?それ...
初心者がよく使いたがるんだけど。
「テクニックにおぼれない」
↑これ、次スレからテンプレに追加したいw
0534nobodyさん
2006/06/30(金) 18:36:24ID:Y/YT1xaC"/"(Slash)も"%2F"でURLに含めることができるようですので、
>>531から、
files/foo/hoge.phpを読ませた時のURLは
http://www.test.com/index.html?$PAGE_ID=foo%2Fhoge
となるようですね。
しかし上記URLだと長いのでmod_rewriteを使って
http://www.test.com/foo%2Fhoge.html
とします。>>533
但し"%2F"を使うには、
rawurldecodeというのを使わないとならない?
http://php.s3.to/man/function.rawurldecode.html
>正規表現で
>>500のような状態からここまでとなると、
今は良く分かりませんので、少し勉強してみます。
>>528でもかなり楽になったと思います。
(まだswitch,caseからは逃れられませんが...)
0535nobodyさん
2006/06/30(金) 18:48:34ID:???> test.php?$PAGE_ID=foo%2Fhoge
> しかし上記URLだと長いのでmod_rewriteを使って
こうする理由がわからねー
> 但し"%2F"を使うには、
> rawurldecodeというのを使わないとならない?
デコードしないとディレクトリを指定できないだろが。
「foo%2Fhoge.php」というファイル名になってもいいなら別だが。
つーかもっと基礎から勉強した方がいいんじゃないか?
0536nobodyさん
2006/06/30(金) 18:56:46ID:???0537nobodyさん
2006/06/30(金) 19:20:22ID:???$tp = '
<p>$link - <a href=$link title=$link>$link</a></p>';
$ato = array(
"1.php",
"2.php",
"3.php",
"4.php",
"5.php"
);
foreach ($ato as $link) {
eval("echo \"$tp\";");
}
?>
0538nobodyさん
2006/06/30(金) 19:21:44ID:???>>537のようにしてみましたが、もっとスマートな方法があるような
気がするんですがどうでしょうか。
0539nobodyさん
2006/06/30(金) 19:24:03ID:???0540nobodyさん
2006/06/30(金) 19:42:45ID:???ファイル名が、1〜5固定ならば、
for ($i = 1; $i <= 5
echo "<p>$i.php - <a href=$.php title=$i.php>$i.php</a></p>";
でいいとおもうんだが
0541nobodyさん
2006/06/30(金) 19:45:42ID:???今意味がわかった。
$tp = '<p>%LINK% - <a href=%LINK% title=%LINK%>%LINK%</a></p>';
echo str_replace('%LINK', $ato, $tp);
がよい。
そんなところで evalなんか使うな。
0542nobodyさん
2006/06/30(金) 19:46:28ID:???な
0543nobodyさん
2006/06/30(金) 19:48:31ID:???foreach ($ato as $link) {
echo str_replace('%LINK%', $link, $tp);
}
な
■ このスレッドは過去ログ倉庫に格納されています