【PHP】下らねぇ質問はここに書き込みやがれ 23
1 :
909 :
2006/06/23(金) 01:59:03 ID:lPdqGX0Z
本 ス レ は も う 無 く な り ま し た
・part17よりテンプレ化 extractは極力使わないほうがいいと思います。 例えば、 hoge.php?_SESSION[user_pw]=hogehoge って形で送られてきたとします。これを extract($_GET) しちゃうと、$_SESSION['user_pw']の値が、 "hogehoge"に変更されてしまいます。 もし事前にユーザのパスワードを、$_SESSION['user_pw']に 保持してたとしたら、勝手に書き換えられてしまうことになります。 それを避けるために extract($_GET, EXTR_SKIP) ってやって上書きを避けたとしても、 このままでは変数の初期化を忘れる危険性があります。 extract($_GET, EXTR_PREFIX_ALL, "get") と、接頭辞をつけるのが一番安全な気はしますが、 それなら最初から $hoge = $_GET['hoge']; ってやるのと手間が変わらないと思いますし、可読性も増します。 確かにextractするのは楽だと思いますけど。
質問スレはマニュアルの検索エンジンではありません 「○○する関数はありますか?」の類いの質問はお断りします
◆質問する場合の注意 1. 自分のIDを表示させること。(メール欄には何も記述しないでください) 2. ハードウェア、OSのバージョン等を明記すること。 3. 己の行った操作、変更などを詳しく明記すること。 4. エラーメッセージはそのまま表記すること。 5. 質問者としても態度をわきまえること。 ◆質問後の注意 ・質問者は必ずIDを表示させてください。 書き込む場合はメール欄に何も記述しないでください。 ・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。 (逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。) ・解決しなくても回答をもらった場合はお礼を言う。 (荒らし、煽りは除く) 【その他諸注意】 ・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ ・SQLについての質問はデータベース板(PCカテゴリ)の各スレで ・オブジェクト指向については良スレがないから本を買え ・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【簡易FAQ】
1. ブラウザに何も表示されないんだけど・・・
→ error_reporting()や、php.iniのdisplay_errors、log_errorsを確認
2. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
→ できません
3. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
→ 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
4. echo "$arr['hoge']['fuga']"; がうまくいかない
→ {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
5. echo?print?
→ echoはコンマ区切りで書けるけど関数ではない。printは関数。パフォーマンスは気にするな
6. 値渡しと参照渡し(「&」を使う)のパフォーマンス
→ この二つはパフォーマンス目的で使いわけたらダメ。よく知らずに参照渡しにすると遅くなったりする
参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
7. CSVやTSVのファイルをスマートに扱いたい
→ まずはfgetcsv()
8. ファイル入出力関数(fopen等)でリモートファイル(
http:// 〜とか)を扱う際の限界
→ fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
9. 一定時間ごとに何かしたい
→ cron、タスクスケジューラ
10. 画像処理一般 or GDの限界
→ ImageMagick(PECLのやつ or シェルから実行)
11. 画像・音・動画はファイルで保存?DBに保存?
→ 好きにしてください
12. クッキーの情報をユーザから隠したい
→ セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
13. このスレに書き込むときに自分のサイト名を晒したくない
→
http://example.com/が例文などのために予約されている 14. SQLの質問はどこで?
→ データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
15. 記号の意味がわからないけどググりようがない
→ 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス
「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
16. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
→ ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
17. strip_tags()で削除しないタグを複数指定したい
→ strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
18. そもそもインストールの時点でうまくいかない
→ 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
19. PHPからPOSTリクエストしたい
→8.を参照
13 :
909 :2006/06/23(金) 05:15:15 ID:lPdqGX0Z
さ、参考になりますねぇ^^; みなさん書き込みお疲れ様です!
14 :
nobodyさん :2006/06/23(金) 10:52:39 ID:8iUOatGT
>>7 なんでハードウェアを明記する必要があるんですか?機械語じゃあるまいし
>>14 amd64とx86では同じOSを入れられるが挙動が変わることがある。
ってケースがあるからでしょ?
file($data);でファイルを開くのと $fp=fopen($data,"r");でファイルを開くのは何が違うのでしょうか?
file()は有無を言わせず全部メモリに読み込んで終わり。 巨大なファイルを読み込んだりしたら大変なことになる。 fopen()なら任意の部分だけをメモリに読み込ませたり 同じ場所を何度も読んだりなど自由な処理ができる。
>>16 率直に言うと、
flockを介して読み書きを行うスクリプトであれば、
単に file($data) で読み込むのはよくない。
例を挙げると、
表示する場合だけ file 、書き込みを行う場合は fopen(r+) から flock(2) とした場合でも、
fopen-flock 中のファイルでも、 file は問題なくファイルの内容を読み込んでくるからだ。
これは、flock中のプロセスが、ファイルを書き換えるために ftruncate(0) などを行って
ファイルの内容が0の時に 他プロセスがfileで読み込むと、
エラーもなく空のファイルを読み込んでくる。
以上から、もっともまずいスクリプトの書き方は、
$ar = file($data); で読み込んできた配列を処理して、その後
fopen(+r) flock(2) ftruncate(0) fputs するようなやり方だ。
ロックファイルを用いて処理全体のロックを行わないと、データが全部失われる可能性がある。
>>15 そんな事例のニュースいままで聞いたことありません?
srand((double)microtime()*1000000); $iro1=round(rand(1,4));//マーク $iro2=round(rand(1,4)); $iro3=round(rand(1,4)); $num1=round(rand(1,13));//数字 $num2=round(rand(1,13)); $num3=round(rand(1,13)); //途中 略// $card1=$mark1.$num1; $card2=$mark2.$num2; $card3=$mark3.$num3; トランプ3枚を表示させようとしています。 echo $card1."-".$card2."-".$card3; 表示し終わってから戻るボタンでページを一枚戻り 進むボタンを押すとまたトランプが変わってしまいます。 進むボタンや戻るボタンでトランプを変わらないように 簡単にやる方法はありませんでしょうか?
>>21 なにをやろうとしてるのかわからないけど、
クッキーに $mark1,$num1,$mark2 ・・・
を持たせておいて、
スクリプト実行時に、まずクッキーにデータがないかを読み込むようにすれば?
23 :
21 :2006/06/23(金) 17:20:44 ID:???
簡易ゲームのページで手持ち100Pあり ページAのボタンによりページBに移動 その際に1Pを消費します。 ページBでトランプ3枚を表示するのですが 戻るボタン、進むボタンを押されると 何回でもポイント消費なしでゲームできてしまいます。 何か良い対策方法はないでしょうか?
>>23 だからクッキーにデータを・・・
セッションでもいいけどさ
クッキーは改ざんの恐れがあるし、この場合はセッションがベストじゃね?
27 :
21 :2006/06/23(金) 17:47:49 ID:???
遅れましたが携帯専用のページとなります。
簡易ゲームのページで手持ち100Pあり ページAのボタンによりページBに移動 その際に1Pを消費します。 ページBでトランプ3枚を表示するのですが 戻るボタン、進むボタンを押されると 何回でもポイント消費なしでゲームできてしまいます。 何か良い対策方法はないでしょうか?
29 :
16 :2006/06/23(金) 18:58:44 ID:???
遅くなりました。
>>17-18 つまり、file()は読み込む、fopen(r)は開くだけ
と考えれば良いのでしょうか?
>>29 そうだよ
それくらいはマニュアル読んでね
32 :
前スレ996 :2006/06/23(金) 20:04:48 ID:???
$NA1 = $_POST['NA1']; $NB1 = $_POST['NB1']; $EA1 = $_POST['EA1']; $EB1 = $_POST['EB1']; $NA2 = $_POST['NA2']; $NB2 = $_POST['NB2']; $EA2 = $_POST['EA2']; $EB2 = $_POST['EA2']; $NA = $NA1 + (NA2 / 60); $EA = $EA1 + (EA2 / 60); $NB = $NB1 + (NB2 / 60); $EB = $EB1 + (EB2 / 60); $NA = 3.1415926535 * $NA / 180; $EA = 3.1415926535 * $EA / 180; $NB = 3.1415926535 * $NB / 180; $EB = 3.1415926535 * $EB / 180; $NA = $NA - ((11.55 / 60) * 3.1415926535 / 180) * sin (2 * $NA); $NB = $NB - ((11.55 / 60) * 3.1415926535 / 180) * sin (2 * $NB); $c = cos($NA)*cos($NB)*cos($EA-$EB)+sin($NA)*sin($NB); $s = sqrt(1-c^2); $t = $s/$c; $z = atan($t); $z = $z * 6369; としたのですが、全てを0にすると「距離は 6669.60120357 です。」になります。 ソースの部分と何が違うのでしょうか。
33 :
前スレ996 :2006/06/23(金) 20:10:07 ID:???
すみません。 間違いだらけでした、解決です。
34 :
前スレ996 :2006/06/23(金) 20:52:50 ID:???
もう一度お願いします echo $_POST['listA']."<BR>"; echo $_POST['listB']."<BR>"; list($NA1,$NA2,$NA3,$NA4,$EA1,$EA2,$EA3,$EA4) = split(".",$_POST['listA']); list($NB1,$NB2,$NB3,$NB4,$EB1,$EB2,$EB3,$EB4) = split(".",$_POST['listB']); echo $NA1; と書いたのですが、リストにある$NA1〜$EB4までの間に変数が入りません。 出力では、 34.41.56.713.35.29.53.705 43.3.57.897.141.21.15.765 となっているのですが。
35 :
前スレ996 :2006/06/23(金) 20:59:13 ID:???
split(".",$_POST['listA']);をsplit('[.]',$_POST['listA']); で解決できました。すみません
36 :
nobodyさん :2006/06/23(金) 21:27:41 ID:rAXE6ZzN
携帯むけの投票スクリプトをつくっているんだが、1日1回だけクリックさせたい。 クッキーでやってみたんだが、FOMAが対応していないorz なにか案があったらおながいします。
38 :
37 :2006/06/23(金) 21:33:16 ID:???
>>36 投票するとIPが記録され、
次に投票するときにIPが投票されているか調べるというのはどうでしょう
IP?固有番号使えばいいじゃん。
パーミッションで他の人が観覧できないデータファイルにするにはどうすればよいですか?
リンクに配列の値を文字列に変換してくっつけて、GET送信しているのですが、リンクのアドレス表示が物凄く長くなります。 これはPOST送信と同じくほぼ際限なく長くても問題ないと考えてもいいのでしょうか? もし限界などがあれば教えてください。
>>42 RFCで決まってたと思うが。
決まってればそれが保証限界ってところかと
(対応できてなければ改良を求める根拠)
session_start(); $_SESSION['cnt']++; echo $_SESSION['cnt']; 同じページだと中身が表示されるのですが 次のページで echo $_SESSION['cnt']; を記述しても中身が表示されません。 お願いします。
47 :
46 :2006/06/23(金) 22:16:46 ID:???
解決しました。すいません。
mysqlのデータベース内にデータが無い(テーブルが無い)場合は、 という if 文を作りたいのですが、 教えて栗
>>48 意味がわかんない
もうちょっと具体的に説明ヨロ
>>49 テーブル一覧取得関数
mysql_list_tables
蛇足だが、そういう構造はあまりよろしくない
特殊な場合を除いて必要なテーブルは最初から全て揃っているのが望ましい
>>48 URLが固定の場合
dirname('
http://localhost/web/index.php ').'/'
固定じゃない場合
(!empty($_SERVER['HTTPS']) ? 'https' : 'http').'://'
.$_SERVER['HTTP_HOST'].($_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '')
.dirname($_SERVER['SCRIPT_NAME'])
テキストリンクでPOST送信するにはどうすればよいのでしょうか。 echo "<form method=\"POST\" action=\"" . $_SERVER["PHP_SELF"] . "\"><TD width =\"14\">"; echo "<a href=\"" . $_SERVER["PHP_SELF"] . "\">" . $hoge . "</a> "; echo "<input type=\"hidden\" name=\"hoge\" value=\"$hoge\">"; echo "<input type=\"hidden\" name=\"hoge2\" value=\"$hoge2\">"; echo "<input type=\"hidden\" name=\"hoge3\" value=\"$hoge3\">"; echo "</TD></FORM>"; 上記のようにして試してみましたが上手く行きませんでした。 どなたかよろしくお願いします。
>>52 普通に<input type="submit">使っとけ。
どうしてもリンクでやりたいなら、GETとPOSTの違いを勉強して、onclickハンドラとjavascriptでやればいい。
>>52 >>53 の言うとおりJavaScriptでやるのが一番手っ取り早いと思う。
PHPやHTMLでは不可能だ
大量のデータ(1000行くらい)を、一番下の行から順番に 読み込んでいきたいのですが、やっぱりfile()を使わないと無理でしょうか
>>56 面倒臭いがfopenでも可能
データが大量だと分かってるならfileは使わない方がいいよ
>>56 一番下からは無理だよ
一番上からになっちゃう
59 :
56 :2006/06/24(土) 01:22:14 ID:???
fopenですよね。 どのような手順ですればよいのでしょうか? どうしても下からしたいのですが・・
読み込みは絶対にファイルの先頭からになっちゃうっす
61 :
56 :2006/06/24(土) 01:29:55 ID:???
了解です。諦めますT_T
>>60 うそつくな
fseekで任意の位置から読み込み可能
>>52 <form name='hoge' action='fuga.php' method='POST'>
<a href='javascript:document.hoge.submit();'>Submit</a>
<input type='hidden' name='foo' value='bar' />
</form>
PHP以前にHTMLとJavascriptを勉強した方がいい。
64 :
56 :2006/06/24(土) 01:42:35 ID:???
ファイルの一番上の行に追加していくというのはできないのでしょうか? file()を使わない方法で・・・
>>64 無理。そうしなくてもいい方法(設計)を考えろ。
何のために脳みそついてるんだ。
>>64 できるよ
テンポラリファイル作ればOK
67 :
56 :2006/06/24(土) 01:55:46 ID:???
>>65 今必死に考えています。
他の方法でもダメそうなので・・・
>>66 宜しければもっと詳しく教えてください。
一回全部読み込んで書き込めば良いだけ
69 :
56 :2006/06/24(土) 02:05:06 ID:???
>>53 54
おとなしく、submitにしました。
検索サイトのような、ヒット数に応じて下部にリンク数字が出るやつをしようかと思ったのですが、
もう一度検索させるのは重たくなりそうなのであきらめました。
ありがとうございました。
10MBのファイルをfile()で普通に読み込めたんだが それでもやめたほうがいい? ちなみに行数は150000ちょっと
ファイルじゃなくてDBを使うというのも一つの手ではないのか?
ご め ん な さ い D B 使 え ま せ ん 本 当 に す み ま せ ん
カレントURLを取得する方法はありませんか?
>>69 1行ずつ読み込みながら書き出せばいいじゃん
全部まとめて読もうとするなよ
76 :
nobodyさん :2006/06/24(土) 03:26:03 ID:aJs1PJvk
>>20 どういう事例があるか教えて頂けませんか?勉強不足でございまして恐縮ですがなぜハードウェアが関係するのか理解できるレスをお願いいたします。
exsample...
>>76 確かに聞いたこと無いな。
まぁ、もしあったとしてもスクリプト言語だからなぁ・・・俺らにはどうしようもないか?
そもそもこのテンプレって本スレ33で提案されて34で初めて使われて、
で、34を最後にスレ自体が無くなっちまった、という代物なんだよな。
ハードウェアの話については本スレ34ですでに論議されてる。
7 名前:nobodyさん[sage] 投稿日:2006/03/21(火) 10:52:53 ID:???
>>1 乙です。
以前、
> 2. ハードウェア、OSのバージョン等を明記すること。
について議論なかったっけ?
バージョンに関しては、基本的に必要なのはPHPのバージョンだけで、内容によってはWebサーバとそのバージョン、もしくはOSやハードウェアって感じになると思うんだけど。
まあ「そんなテンプレ律儀に守る奴いねーよ」って言われればそれまでなんだけどさ。
8 名前:nobodyさん[sage] 投稿日:2006/03/21(火) 11:00:37 ID:???
> 2. ハードウェア、OSのバージョン等を明記すること。
確かにハードのバージョン書くよりは
phpやサーバのバージョンのほうが情報として意味があるよな
9 名前:nobodyさん[sage] 投稿日:2006/03/21(火) 11:10:13 ID:???
ハードウェア情報を書かれても困る
もっと大事な情報が欲しい
10 名前:nobodyさん[sage] 投稿日:2006/03/21(火) 11:21:23 ID:???
最低限PHPのバージョンだな。PHP4と5では違いが大きすぎる。
まさかPHP3使ってるやつはそういないだろうが…
>>76 バイナリ値を扱ったときにバイト並びがビッグエンディアンだったかリトルエンディアンだったか、
みたいなのくらいしか思いつかないなー
83 :
nobodyさん :2006/06/24(土) 08:08:16 ID:29S7mcCw
>>67 今、ざっと書いてみただけだから動くかどうか分からないけど
考え方としてはこんな感じ。
$fp=fopen('hoge', 'r+);
$tmp=tmpfile();
flock($fp,LOCK_EX);
stream_cccopy_to_stream($fp,$tmp);
rewind($fp);
rewind($tmp);
fputs($fp,$data);
stream_cccopy_to_stream($tmp,$fp);
flock($fp,LOCK_UN);
fclose($tmp);
fclose($fp);
>>71 他に誰もそのサーバにアクセスしないんだったら別にいいんじゃない?
実用的とは言えなくなるだけ。
仕事でそんなの作ったらブン殴られるけどね
if(!ereg("^[a-zA-Z0-9\[\]\-]+$",$keyword)){ $error_flag = "on"; } これだと$keywordに[]が含まれている場合に許可してくれない(error_flagがonになってしまう) んですが、どこが問題でしょうか?
>>86 preg系関数使えよ。
$test = '[]';
preg_match('/^[a-zA-Z0-9\[\]\-]+$/', $test) && print 'Passed';
で通ったぞ。
>>86 こうする
ereg("^[][a-zA-Z0-9-]+$",$keyword)
89 :
86 :2006/06/24(土) 13:05:45 ID:???
↑(A && B)って A が真だったら B を実行という構文なんでしょうか? 初めて見ますた あと 86 側でなぜ上手くいかないかわからないでしょうか?
>>89 違う
&&は左辺が真なら右辺も評価するが左辺が偽なら右辺を評価しない。
だから左辺が真のときだけ実行する文を右辺に書くのは良くあること。
ereg関数はPerl互換正規表現じゃない。
91 :
86 :2006/06/24(土) 13:12:45 ID:???
なるほど、納得です、ありがとうございました
92 :
nobodyさん :2006/06/24(土) 13:54:39 ID:WbsotHgV
ちょっと、教えて下さい。 PHP4.2.2がインストールされているLinuxに、MySQL4.0をインストール しようとしています。普通は、MySQLをインストールした後にPHPをイン ストールするのですが、私の場合既にLinuxにPHPがインストールして あったので、PHPのインストールの後にMySQLをインストールするつもり なのです。 このように、PHPのインストールの後にMySQLをインストールする場合、 php.iniを書き換えなければならないのでしょうか?php.iniで関係あり そうなところは、[MySQL]の mysql.allow_persistent mysql.max_persistent mysql.max_links mysql.default_port mysql.default_socket mysql.default_host mysql.default_user mysql.default_password なのですが、これらの内、どれかを書き換えなければならないので しょうか?PHPファイルの作成の時は、mysql_connectやmysql_select_db で、必ず引数を指定するつもりなのですが、それでも、これらのどれか を書き換えなければならないのでしょうか?教えて下さい。宜しく お願い致します。
MySQLをインストールした後にPHPをインストールするのが普通なのか? 俺はいつもPHP4アンインストール→PHP5インストール→MySQLインストールの順番だ。 あと、PHP4を使うなら特に設定は必要ないよ。 mysql_connectの時にソケットファイルを指定しないとならない場合もあるけど。 とりあえずまずは自分で試してみろよ
94 :
nobodyさん :2006/06/24(土) 14:14:25 ID:WbsotHgV
テキストボックスに小文字の,があるときに大文字の、に自動的に書き直すには 正規表現を使えばいいのは考えられるのですが、どう書いたらよいでしょうか? マニュアルとかいろいろ見てきましたが分かりませんでした。おしえてください
PHP6っていつ出るんだ?
PHPが出来たら彼女も出来ますか?
PHPで彼女を作りたいの? それには流石にもっと高級な言語使った方がいいんじゃないかなあ。
PHP + JavaScript で大規模なの作れ。 んで色んなバージョン作って LAMP+Ajax とかで構築して販売しる
毎日毎日遅くまで仕事してさ・・・ 家帰っても一人で換気扇の音だけ聞こえるの。消し忘れちゃってたのか・・・ 彼女が「お帰りダーリン☆」とか言ってくれるのに憧れる。 今は双葉ちゃんの猫板でヌコ画像見ることのみが俺の癒しだぜ・・・
まずは日本語を勉強するだぜ・・・
>97 レスありがとうございます。 でもそれって全部大文字化されてしまいます。 じゃなく、「これは,テスト」って書かれた文の中に小文字のカンマがある時に 「これは、テスト」とするためにはどういう構文を書けばよいのかが分からないのです。
>>100 大規模? 構築して販売?
「何」を??
ごめん間違えた
>>104 は忘れて^^^^^^;;;;;;;;;;;;;;;;;;;
str_replaceが良いんじゃないかなと思う。
107 :
103 :2006/06/24(土) 15:03:40 ID:???
追記です。 「これは,テスト」の部分にはアルファベットが入る可能性もあります。 「abcd,1234,efgh」と書かれる場合に カンマの部分は大文字でも構わないのですが 文章中のアルファベットの部分は書き込みをしてくれる人の文をそのまま見る人に伝えたいので 出来れば「abcd、1234、efgh」とだけしておきたいのです。 どうかお知恵を貸してください。よろしくお願いします。
phpで文字をunicode表記(\uXXX)に変換したいのですが何か良い関数ありませんか?
>>103 ttp://www.php.net/manual/ja/ にPHPのマニュアルがある。
「VI. 関数リファレンス」から始まる部分がこれからおまいさんがずっとお世話になる部分だ。
今したい事は文字列に対する操作なので、文字に関係しそうなものを探してみる。
「文字型 (ctype) 関数」ってのがあるので中を見てみると、どうやら今回の件にはつかえなさそうだ。
更に探していくと、「マルチバイト文字列関数(mbstring)」てのがある。
それぞれの関数の説明を見ていくと、使えそうなものもありそうだが、慌てずに残りも探してみよう。
そうすると「Strings(文字列関数)」ってのがある。
クリックしてどういう関数があるのかを見てみると、どうやら
(全てを読むにはワッフルワッフルと書き込んでください)
110 :
103 :2006/06/24(土) 15:10:00 ID:???
ワッフルワッフル
>>101 function kanojo() {
if ($location['
>>101 '] == "home") {
echo "お帰りダーリン☆";
show("本日の特選ヌコ様");
} else {
stop("換気扇");
}
}
show()とstop()は自力でドゾー。
関数が大好きです。
114 :
103 :2006/06/24(土) 16:30:30 ID:???
>109 $str = ereg_replace (',', '、', $str);で出来ました。 ありがとうございました。
>>114 そのように正規表現を使わない場合はstr_replace()の方がオススメ。
116 :
103 :2006/06/24(土) 17:10:51 ID:???
>115 str_replace()ではならなくて、調べていたら ereg_replace()を発見して、やってみたらできました! それと、csvファイルに書き込みしたいのですが 改行されたものを<br>にする為にはどうしたらいいのでしょうか? といいますか、改行コードがどんな値として渡ってくるのかが分かりません。 それさえ分かれば自分でも何とかなると思うのですが。。。
118 :
103 :2006/06/24(土) 17:38:50 ID:???
でばっがでひっかける??? それはどんな高尚なものなのでしょうか?
>>118 改行文字ぐらい自分で調べられないんならプログラミングなんて止めれば?
$query = explode('&', $_SERVER['QUERY_STRING']); なあ、GETクエリの処理ってこの方法でやってる人いる? どっかで↑を見たんだけど、上記方法で自前でやるのはメリットあったりしますかね? parse_str() で第2引数なしだと、先に宣言されていた変数が上書きされるからとか?
>>120 a=100&a=101
とかのクエリを処理できる
$_GETでとると、上書きされる
あー、クエリ内でキーが重複してるとき値が上書きされないようにするためか! んでも parse_str() で配列にしたほうが良くない? a[]=100$a[]=101 にしないと駄目だろうけど
118ではないが、デバッガなんて誰でも作るのか!? そうなのか!??
今したい事は文字に関する調査なので、文字に関係しそうなものを探してみる (略) bin2hex()で16進数に変換してみればいいべ
125 :
nobodyさん :2006/06/24(土) 19:29:47 ID:to5dTZDp
ファイルのパスを生成する際、.....を./../..のように置き換えたいのですが、 どのようにすれば良いでしょうか。sprintfを使うのかな・・というのは 分かるのですが記述方法がいまいち分かりません。
>>125 Path Traversalって知ってるか
while(!feof($fp)){ } これを使うときに 「あああああ いいいいい ううううう 」 となっていると、一番最後に空白が読み込まれるのですが これをなくす方法はありませんか?
ltrim
要JS+Cookie カスサイトだなw
133 :
nobodyさん :2006/06/24(土) 22:10:45 ID:WbsotHgV
>>92 です。
PHP4.2.2がインストールされているLinuxに、MySQL4.0.13をインストール
しました。rpmでインストールして、何も改変していないのですが、
コマンドラインからはテーブル等を作ることが出来、MySQL自体のインスト
ールは完了しました。
しかし、PHPからMySQLには接続できないのです。
Fatal error: Call to undefined function: mysql_connect() in /var/www/html/index.php on line 4
と出てしまい、mysql_connectが使えないのです。
「ソケットファイルを指定すれば良い」と
>>93 様に言われましたので、「mysql.default_socket =」を指定
しようとしているのですが、これには何を入れれば宜しいのでしょうか?どなたか教えて下さい。宜しく
お願い致します。
もうこれからはJavaScriptがONになっているってのが前提でサイトが出来てくるだろうな。 ajaxの流行がきっかけになったかのかな WinMEとかWin98SEも打ち切りでしょ?これでIEはVer6が前提になってしまったな
>>133 ちょっとindex.phpの4行目前後を晒してみ
嫌ならパスワードとかは***とかでもおk
ちょっとsoketファイル指定したファイル探してくるわ
136 :
133 :2006/06/24(土) 22:23:25 ID:???
92です。自己解決しました。
137 :
135 :2006/06/24(土) 22:29:30 ID:???
どういう風に解決したのかフィードバックしてくれないか? そうすればこれからお前と同じ部分で躓いた奴がお前のレスで助かるじゃないか
138 :
nobodyさん :2006/06/24(土) 22:34:00 ID:WbsotHgV
>>136 >92です。自己解決しました。
>>92 >>133 です。勝手に人になりすまさないで下さい!!
自己解決していませんよ!!それで、
/var/lib/mysql/mysql.sock
というファイルがあったのですが、0バイトでした。また、
PHPファイルは、
<?php
mysql_connect("127.0.0.1","root","******");
mysql_select_db("test1");
と書いたら、Call to undefined function: mysql_connect()
と出てしまったのです。まだ、解決していませんので、どな
たか教えて下さると嬉しいです。宜しくお願いします。
>>138 「Call to undefined function mysql_connect」でぐぐる。
このスレの過去ログの何個か前から探しても数個(Winだったかな)見つかると思う。
貴方はLinuxなので原因は一緒だが、具体的な解決方法を調べたいなら
Googleで探す方が良いだろう。あとRPMパッケージで管理してるならそれも検索ワード追加。
140 :
nobodyさん :2006/06/25(日) 00:00:12 ID:WbsotHgV
>>139 すみません。Googleや過去ログで検索した結果、
「mysql.default_socket=/var/lib/mysql/mysql.sock としたら良い」
という回答が殆どでした。それで、php.iniをこの通りにしてApacheを
再起動したのですが、やはりエラーメッセージは上記のままでした。
phpinfo();で調べてみると、Configure Commandに
--with-mysql=shared,/usr' 'という表記はありました。Environment
にPWD /var/lib/mysql という表記もあります。
環境はRHLinux9+PHP4.2.2+MySQL4.0.13 で、rpm -iv でMySQLをイン
ストールしただけです。どなたか、教えて下さると非常に助かります。
何卒、宜しくお願い申し上げます。
俺の環境はMySQLが5でPHPも5なんだけど、ソケットファイルを指定しなかったら Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) って言うエラーが出るから、それはもしかしたらソケットファイルのエラーではないかも知れんな。 ただ単にmysql_connect関数が呼べてないだけか?
>>141 おいおい… 「undefined function」だっての。
Windows だったら .so (だっけか? 知らん)がない
Linux 系だったら -devel とかのパッケージをインストールしてない
自前で make したなら configure 時に指定してない
>>138 なりすましは気にすることないが、教えてもらう人がそんな態度してちゃ〜なんか教えたくない。自分でしらべなよ。検索のやり方から勉強したほうがいいよ。
アップして気づいたのですがレンタルサーバーのPHPのバージョンが4.4.2でした。 PHP5でしかない、array_combine()をかなりの頻度で使用しているうえに、 array_combineを使用することを前提にプログラムを書いてしまったので、修正に大変苦慮しています。 PHP4.4.2の場合は、array_combineと同じような動作をさせる場合にはどうすればいいのか、助言をよろしくお願いします。 array = array_combine($header,$list) という箇所を出来るだけ簡単で、かつまったく同じ挙動をするようにしたいと考えています。
function array_combine($arrayKey, $arrayValue)  : $num = 0;  : $returnArray = array();  : if(($tmp = count($arrayKey)) || $tmp != count($arrayValue)) or  :  : return false;  : foreach($arrayKey as $key){  : $returnArray[$key] = $arrayValue[$num];  : $num++; }  : return $returnArray; }
>>148 なるほど。こうなっていたんですね。
ありがとうございます。さっそく試してみます。
普通のHTMLに複数のFORMを置いてPHP にPOST送信した場合、 後に記述したFORMの内容しか反映されません。 1. <form> A...</form> <form> B...</form> Bの内容だけ反映される。Aの内容は反応しない。 2. <form> B...</form> <form> A...</form> AとBの位置を入れ替えると、Aの内容だけが反映される。 どうやらスペルミスなどではないようです。 これはHTMLとはこういう仕様なのでしょうか? これを回避するテクニックなどがあれば教えてください。
>>149 みたいなorの使い方はマニュアルのどのあたりを見ればいいでしょう?
>>152 submitはそれぞれのフォームの間です。
<form>A... <submit></form>
<form>B... <submit></form>
こんな感じです。
>>154 それでA側のsubmitを押してもA側の内容が反映しないってこと?
実は古い携帯端末で操作してるとかの落ちじゃないだろうな…。
スペルミスしてるとしか思えんが。
半角スペース、タブ、ラインフィード、改行、ヌル文字、垂直タブが含まれていたら _に変換したいのですが if(ereg("/0\x20|0\x09|\x0A/|0\x0D|0\x00|0\x0B/",$name)){$name = preg_replace("/0\x20|0\x09|\x0A/|0\x0D|0\x00|0\x0B/", "_", $name);} で、あってますか?
>>156 なんでeregとpregを混ぜて使ってるんだ
>>153 んー。Perlのマニュアル?w
こういうorやandの挙動って、Perlでは仕様で保障してた気がするけどPHPでも保障してるのかな。
実装依存でPHPのバージョンに依存する、とかいうオチはなし?
すいません。pregでは無くeregを使ってました。 どうでしょうか?どう間違っているか教えて頂けませんでしょうか?
>>161 型に厳密な言語なら怒られてもおかしくないべ。
or の場合、左右のオペランドが論理型であることが要求される。
returnはよく分からんがexitやdieは返り値がvoidなのでNULL扱いとなり、
暗黙の型変換によってfalse扱いとなる。で、PHPでもたまたま動く、と。
: も消さないと駄目じゃないの?
165 :
161 :2006/06/25(日) 14:22:13 ID:???
CSVファイルを掲示板のデータ保管用にアップしたのですが、 外部からの直リンで見られてしまいます。 どうすれば見られないようになるのでしょうか?
>>166 拡張子を.cgiに変えてパーミッションを変更
>>166 public_html より上の階層に置く
169 :
nobodyさん :2006/06/25(日) 16:02:16 ID:ZuxDqgv3
>>166 出来ればドキュメントルート外に置くのがベスト。
それが出来ないレン鯖なら、.htaccessで見れなくする。
それすら出来ないなら>166かな。あまりオススメできないけど
170 :
nobodyさん :2006/06/25(日) 16:05:04 ID:9OF/oNeC
スクリプトを探しています。 phpで作られたwebブラウザはありませんか? 会社のFWがきびしく、資料となるページも見られない事が多々あり それを回避する為に探しています。現在は readfile($url); というスクリプトを自宅に置いたサーバから見ていますが これだと画像やフレームが使われているサイトが見られません。 よろしくお願いいたします。
>>170 それってPHPで出来たブラウザを使うとかって問題か?
何にせよ仕事が出来ないほどならネットワーク管理者なりにちゃんと事情を説明して
普通に規制を緩くしてもらうほうが良い
>>170 スクリプト探しはスレ違い。板違い。
// 自宅サーバにプロキシ立てればいいんじゃないの? 独り言だから、レスしても答えないぞ。
お礼が遅くなってしまい失礼致しました。
学校が忙しくて、phpに関われるようになったのが今日でした。
すみません。
結局、
>>599 さんの、sprintf() を使ってやりたいようにすることが出来ました。
>>598 さんと
>>610 さんの方法も私は知らなかったので勉強になりました。
ご回答いただいてありがとうございました。
また、何かあったら宜しくお願い致します。
>>171 レスありがとうございます。
その通り、phpでできたブラウザの事です。
私もまだ入社したばかりで発言力も弱く
規制を緩くするには、時間がかかってしまいますので
それまでの繋ぎとして現在探しています。
>>172 レスありがとうございます。
板違いなのですね。
phpdからwebprogだと思ってました。
教えてくれてありがとうございます。
というわけなので
>>170 の質問は閉めさせていただきます。
閉めるとか閉めないとか やれやれだぜ
うう締まる締まる
さぁ、どんどん閉めちゃうからねぇ _((()_ /∴ `ー'| しまっちゃう!!! ゝ.∵ .ミ(゚)_∩∩__ (∵ <__入 | |__) 〉∴ ヽ――' )ω゚)ノ| | (∵∴ く/⌒) / Д | | //、__, /_ノ / ゝ |_| ⊂ノ L| [ ̄
僕の肛門も閉鎖しそうです><
ここは2ちゃんだ。閉めるんだったらアノ掲示板に行けよ。
裏2chのことは世間に公表されてないはずだが
182 :
153 :2006/06/25(日) 20:54:52 ID:???
>>158 ,161,162
ありがと
なんとなく分かったような気がする
183 :
nobodyさん :2006/06/25(日) 21:02:29 ID:WzsSuz7K
185 :
183 :2006/06/25(日) 21:18:59 ID:???
>>184 ありがとう。
こんなことするくらいなら、はじめから宣言したほうが楽な気がしてしまう
私は面倒くさがり屋
それよりも
<?php
$a = "abc"; // $a は文字列
$a{1} = "f"; // $a は"afc"
?>
これを知れたことが大きな収穫でした。
ありがとうございます。
>>185 必要なときにどっちにでも使える、ってことでしょ。
型宣言ってより型変換と言った方が正しい。
まぁ、除算(/)した時点で結果がfloatになっちゃうので、 (int)をつけないとおかしなことになっちゃうんだけどね。
188 :
nobodyさん :2006/06/25(日) 22:28:26 ID:I0W6MOFz
Symfonyで HelloWorldから教えてくれ。
189 :
nobodyさん :2006/06/26(月) 10:54:28 ID:eMFdAlON
fsockopenでssl通信を行いたいのですが、下記のようなスクリプトを組むとワーニングが発生して接続に失敗します
このページを参考にして、
http://php.s3.to/man/ref.openssl.html php.iniの「extension=php_openssl.dll」をコメントアウトし、
php_openssl.dll、libeay32.dll、ssleay32.dllをPHPフォルダからをWINNT\SYSTEM32にコピーしましたが
うまくいきません
どなたかお詳しい方ご教授いただけないでしょうか
【環境】
Windows2000
PHP4.3.7
OpenSSL 0.9.7e
190 :
189 :2006/06/26(月) 10:55:17 ID:eMFdAlON
【ワーニングメッセージ】 Warning: fsockopen(): no SSL support in this build in c:\apache\htdocs\ssl.php on line 4 Warning: fsockopen(): unable to connect to localhost:443 in c:\apache\htdocs\ssl.php on line 4 【スクリプト】 $header = "GET / HTTP/1.0\r\n"; $header .= "Host: localhost\r\n\r\n"; $fp = fsockopen("ssl://localhost", 443, $errno, $errstr, 30); // ここでワーニング if (!$fp) { echo "$errstr ($errno)<br/>\n"; echo $fp; } else { fputs($fp, $header); while (!feof($fp)) { echo fgets($fp, 1024); } fclose($fp); }
>>190 むしろApacheスレ向きの質問じゃないヵ?
192 :
189 :2006/06/26(月) 11:44:58 ID:???
うーん、クライアント側の話なのでこちらのスレでいいと思うんですが
>no SSL support in this build ってでているから、PHP が SSL 有効なオプションでビルドされていないんだろう
194 :
189 :2006/06/26(月) 11:56:30 ID:???
なるほど dllロードすれば使えるもんだと思っていたんですが 自前コンパイルで作るしかないのか、、、Windowsでやるのは情報少なくて難しそうだな〜
>>192 いやApacheもSSLにする必要があったと思うよ
196 :
189 :2006/06/26(月) 12:21:04 ID:???
あ、サーバー側はssl対応してます(ここでいうlocalhost)
質問なんですけど。 皆さんがよく使う関数やプログラム文はどんなのがありますか?
anal_sex();
push
require_once
>>189 それでいける筈だけどな。
php_openssl.dllをsystem32にコピーしてるのは?だが
"コピー"だから影響ないしね。php.iniでロードしてる
他の拡張は上手くいってるんでしょ。
>>189 あとSSLのDLLはPHPにバンドルの方を使ってるよね。
205 :
189 :2006/06/26(月) 14:43:34 ID:???
>>203 ご返信ありがとうございます
やり方としてはあながち間違いじゃないんですね、ちょっと希望が持てました
php_openssl.dllをコピーしたのはどっか別のサイトでそんなことが書かれていたからです、、、
他の拡張はうまくいってます(例えばOracleとの接続など
>あとSSLのDLLはPHPにバンドルの方を使ってるよね。
すいません、ちょっと意味がわからないのですが、ssleay32.dll、libeay32.dllはともに
C:\php\dllsからsystem32にコピーしています
>>198 論外です
>>199 それはあたりまえのように使いますよね
printとechoはどちらのほうが良いのでしょうか
>>200 最近それを使うようになりました。
こんなに便利だとは思ってもいませんでした
>>201 はじめてみました
辞書にも載っていないのですが、どういった関数でしょうか?
>>202 まだ使ったここがありません
requireよりそちらのほうが使えるのでしょうか?
_,,...-───‐-:、._ ト、____.ィ1 `ヽ、 ここはよく釣れる釣堀ですね ,:'´ l. ‐- -‐ ,j____,,.-‐;'フ、 i' 〈`ニ''ニ'フ_ノ ,r''´ 'i | ン--t" 〈 | . !、 `) ノ〉 _,,.ィ'''7 ,、 ヘ y' ヽ、 ~'"く/\」 L/ \_〉,.ィ″ ``''‐-:..,,_____,,::‐''"
>>205 >php_openssl.dllをコピー
コピー先をextension_dirに指定してるなら、それでも構わない。
>C:\php\dllsからsystem32にコピーしています
PHPバンドルのものを使ってるようなのでOK。
上手くいかないようならPHPのバージョンを替えてみるのも手。
別にPHPのバージョンで違いがあるわけではないんだが、
公式で提供されてるWindows用バイナリーは、提供されてるものによって
ビルド毎の差異が結構あったりするので。
209 :
189 :2006/06/26(月) 14:57:27 ID:???
>>208 なるほど〜、そうですよね
PHP5ならsslもデフォルトで動くということがどっかに書いてありましたので、動くかどうか試してみます
どうもありがとうございました
210 :
nobodyさん :2006/06/26(月) 16:05:39 ID:tUdeZDum
DBに接続し、テーブルを作成しようとして: <?php $mysql_server = "mysql5.db.sakura.ne.jp"; $mysql_username = "example_user"; $mysql_passwd = "example_user_password"; $link = mysql_connect($mysql_server, $mysql_username, $mysql_passwd); if (!$link) { die(mysql_error()); } $sql = mysql_query("CREATE DATABASE my_db"); if ($sql) { echo "テーブルを作成したお"; } else { die(mysql_error()); } mysql_close($link); ?> このようなスクリプトを作ってみたのですが 「Access denied for user: ?example_user@%? to database ?my_db?」というエラーが返ってきます。 コマンド・ライン端末から mysql> CREATE DATABASE my_db; でも同じエラーが返ります。 何が原因なのでしょうか? DBは「さくらインターネット」のを借りています。
>>210 example_userに使わせるDBなんて無ぇ!!
って言われております
それと回答ってよりアドバイス的になるが、必要なテーブルは予め全て作成するべきかな 動的にテーブル作成するWEBアプリは設計的にどうかと。 ssh分からないからってならphpMyAdminだしな
PHP関連の会社に就職したいのですが、 PHPを扱うにあたってどういうのを作成できれば良いのですか
>>213 まだ若いのであれば、簡単な掲示板を作れる位でも大丈夫。これからの勉強次第だろう。
>>210 "CREATE DATABASE"は日本語にすると、"テーブルを作成"なのか?
217 :
210 :2006/06/26(月) 16:25:59 ID:tUdeZDum
>>211 まあ普通に和訳すればそうんですが、こうなる理由がわかりません。
>>197 htmlspecialchars
strlen
strpos
substr
なんかはよく使うな。
>>215 来年専門学校卒業(20歳)で、現在はWebデザインの専門学校に通っています。
作品は、簡単な掲示板やチャットなどです。特に大きいものは作れませんけど・・・。
PHPはとても好きなので勉強をする気はあります!
220 :
210 :2006/06/26(月) 16:31:12 ID:tUdeZDum
>>216 ./~ヽ /~~ヽ
.| ‖_∧ゝノ "CREATE TABLE"か…
./ ノ´Д`)/
( ノ ソ
.ヽ ヽ
\ \
\ \
_ / _ \_
(⌒Y / \ \
 ̄\,_/ \,_ノ ̄
>>219 デザインも出来るのであれば有望だな。
掲示板やチャットが普通に作れるのであれば大丈夫だろう。
>>219 ただ、「PHP関連の会社」
といっても、PHPだけをやっていればいいって訳じゃないだろうから、
そこんとこだけは注意。
>>221 デザインは特に自身はないですけどね^^;
就活って自分から行動しなきゃダメなのに、
どうしてもその一歩がなかなか踏み出せないのですよorz
>>213 PHPはサーバー側の技術だからそれだけじゃあまり使えないでしょ。
CSS,JavaScript望ましくはsql辺りができれば
会社の方も放ってはおかんでしょ。
ついでに言えば、客先に出向いて要件定義が出来て、
デザインも出来れば、鬼に金棒かな。
>>223 昔の漏れみたいだな。
漏れの頃はPerlを勉強して、一般的な掲示板を作れるようになって、
それでweb製作会社に入ったよ。
その後、PHP、VB、C++など覚えていった。
自作のスクリプトのURLを前もってメールで送るとか、がんばろう。
>>224 PHPを使いこなす力があれば、CSS, JSやSQLなどすぐだろう。
プログラマはデザイン力に劣る傾向があるので、
デザイン力があれば強い。webプログラミングは、HTMLに表示させる部分とは切り離せないからだ。
客先との折衝もできれば、将来はかなり有望といえるだろうな。
CSS、JS はブラウザ依存があるしメチャ面倒だけどな
>>227 昔は、IE、NetScapeで確認してたけど、
今はIEでしかみてない(・ω・)
230 :
nobodyさん :2006/06/26(月) 19:14:16 ID:yNRsQBsS
PEARのAuthを使ってHTTP認証を行おうとしています。 ユーザが所属するグループのIDとユーザのパスワードで承認を 行おうとしているのですが、パスワードが1件目のユーザでNGと なった時点で認証失敗で終了してしまいます。 Authを使用して同じIDの全パスワードをチェックする方法は ありませんでしょうか。 #今考えている方法は、「自力でチェックしてAuth_Anonymousを #使用する。」か「Auth::loginをオーバーライドしてチェック」 #なのですが、可能であればAuthで提供されている機能のみで #解決したいです。。。
>CSS、JS はブラウザ依存 面倒だよねー phpは純粋に楽しみながらできる
232 :
230 :2006/06/26(月) 22:06:35 ID:???
>>230 自己レスです。
fetchDataをオーバーライドして解決しました。
ショッピングカートを作るのにセッションは絶対に必須ですか? PHPやっていてセッションを使ったことがなかったので・・・
234 :
233 :2006/06/26(月) 22:57:59 ID:???
自己レスです。 とりあえずセッションの勉強をしてみます。 そしてそれがショッピングカートに必要か検討してみます。 なんでもかんでも聞くのは失礼な質問して申し訳ありません。
236 :
233 :2006/06/26(月) 23:09:32 ID:???
すいません、初歩的以前の質問でしたね。以後質問には気をつけてます…
perlでのDprof, SmallProfみたいなプロファイラは、ありますか? GoogleでPHP プロファイラで検索しても出てこないようです。 よろしくお願いします。
知らないことに対して教わる敬意は表してください。質問者としてIDだすのは、回答者に対しての礼儀です。
239 :
nobodyさん :2006/06/26(月) 23:58:26 ID:AIwNfLy+
age進行なんてめずらしいスレですね。 ID出してもう一度質問させていただきます。 perlでのDprof, SmallProfみたいなプロファイラは、ありますか? GoogleでPHP プロファイラで検索しても出てこないようです。 よろしくお願いします。
初心者系質問スレはどこの板でも大抵はage進行だよ。初心者呼ぶために。 それに対して、初心者に来て欲しくないスレをsage進行にする。
>>240 さんくす。
何年も2chにいて知らなかった orz...
ageるとたたかれるものかと思っていた.
スパムなどの書き込みが多いからって聞いたけど、ウソだったのかー うわーん
お前らこういう関数作ってくれ 引数として 「俺」 実行すると返り値として「彼女」 頼む!お前らなら出来るはずだ!!
ほらよ function Morocco($man)
func_242("俺"); function func_242($man) { return "彼女" or die("無理!"); }
初めまして。少しわからないところがあるので質問してみます。 $_SESSION['name'] = "田中"; 別ページに移動して、 echo $_SESSION['name']; としても何も表示されません。 どうやって別のページにセッションデータを移すのでしょうか?
俺がちょっと前に質問したのと同じだなw 別ページの方でもせっしょんすたーと 書かないとだめなんだってよ
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by
>>247 少しは自分で調べろ。それは FAQ だ。
スペースかなー
>>248 一番最初に書かないといけないのですね
解決しました。
>>242 function GetRateStedy($man){
if (rand(255) == 77){
return '彼女';
} else {
return '一生童貞';
}
}
>>237 xdebug
ただ、Dprofみたいなプロファイラではないが
>>242 function GetRateStedy($man){
if ($man != "
>>242 "){
return '彼女';
} else {
return '一生童貞';
}
}
PHPとMySQLで名簿を作っています。 フォームからあるメールアドレスと名前・住所などが送信されたときに、 そのメアド(主キーです)がDBに存在しなければINSERT、 既に存在しているならUPDATEというSQLを投げたいと思います。 これを実現するにはあらかじめフォームから来たメアドをWHERE句に入れてまずSELECTしてみて、 結果がエラーとなるかどうかを調べておき、 その結果をもとにINSERTにするかUPDATEにするかを条件分岐させる方法しかないでしょうか?
>>254 ない
adodb なんかは、それを自動的にやってくれるメソッドを用意しているが
内部的には同じようなことをやっている
一回DELETEしてからINSERT
258 :
nobodyさん :2006/06/27(火) 13:41:32 ID:KxN4Ul2M
SQLServer+ASPから、SQLServer+(ODBC)+PHPに移行してるんですが、 LONG BINARY(OLE Object)のデータの出力方法が分かりません。 ASPのGetChunkみたいなので、少しずつ取ってくるようなイメージはあるんですが、 SQLServer+PHPだと、どんなメソッドを使えばいいんでしょうか?
それじゃ DROP DATABASEも忘れずに
だったら MySQLのアンインストールも忘れずに。
だったら、 OSのアンインストールも忘れずに
265 :
nobodyさん :2006/06/27(火) 15:33:57 ID:7osXzbuk
264 厨
どうせ管理してないんでしょ
さっそく、海外からのURLの書き込みで流れだしている模様です。
268 :
nobodyさん :2006/06/27(火) 16:54:30 ID:EpsxO8/5
自作でBLOGのPING送信ツールを作成しております。 色々なBLOGの本を読みますと、XML-RPC関数を使えとありますが、私の使用しているサーバーでは PEARを使えない為、fsockopen関数で作ってみました 例えばping.myblog.jpに送信する場合は、 $fp = @fsockopen("ping.myblog.jp",80, $errno, $errstr, 30); fputs ($fp, "POST / HTTP/1.1\r\n"); fputs ($fp, "Host: 送信元サーバーのドメイン\r\n"); fputs ($fp, "User-Agent: PHP/".phpversion()."\r\n"); fputs ($fp, "Content-Length: PING用XMLの文字バイト数\r\n"); fputs ($fp, "Content-Type: text/xml\r\n"); fputs ($fp, "\r\n"); fputs ($fp, PING用XML本文); fputs ($fp, "\r\n"); これで送信した結果、HTTP/1.1 200 OKが帰ってきまして、特にエラーメッセージは出ないのですが、 反映されません。 ヘッダー自体がおかしいのでしょうか? 何かご指摘ありましたら、ご教授頂けると幸いです。
>>264 漏れがテスト投稿してみたらさらに変になってしまったぞ!
>>268 で、そのレスポンスの本文はどんな内容になってる?
それを読んでみたまえ。
271 :
nobodyさん :2006/06/27(火) 17:15:20 ID:EpsxO8/5
>270 反応有難うございます。 HTTP/1.1 200 OK Date: Tue, 27 Jun 2006 08:11:57 GMT Server: Apache Connection: close Content-Type: text/xml; charset=EUC-JP flerror 0 message Thanks for the ping. こういったレスポンスが返って参りました。 しかし、何分経過しても更新記事リストに表示される気配はありませんでした。
>>271 レスポンスヘッダーじゃなく、本文の方だよ。
fputs ($fp, PING用XML本文); fputs ($fp, "\r\n"); fputs ($fp, "\r\n"); じゃだめなのか?
274 :
nobodyさん :2006/06/27(火) 17:46:40 ID:EpsxO8/5
>>271 すみません、勘違いしてしまいました。
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
<param>
<value>ブログタイトル</value>
</param>
<param>
<value>ブログのURL</value>
</param>
</params>
</methodCall>
このような形になります。
>>273 有難うございます。
そちらも今、試してみましたが、やはり反映されませんでした。
275 :
nobodyさん :2006/06/27(火) 17:59:55 ID:t5dObYiZ
>>275 別にいいんじゃね?
3で別ファイルに記録すればerror_logファイルもキレイだろ
Call to undefined function mysql_connect()
PHP5.0.14
MySQL5.0.22
http://allabout.co.jp/computer/database/closeup/CU20060414A/index.htm 上記のサイトを見て
$dbHandle = mysql_connect("localhost","root","root")
or die("can not connect db\n");
を実行したところ、タイトルのようなエラーが出ました。
php.iniでextension=php_mysql.dllも書かれていて、
php_mysql.dllもphp/extに入っています。
phpinfo()で見ると、MySQLらしき部分がありません。
どうすれば実行できるのでしょうか?
>>268 PEARコマンド使えなくても、手動で設置すれば
PEARのライブラリは動作するぞ。
利用するライブラリがPECLに依存してたら難しいが。
>>280 WindowsXP Proです
>>281 magic_quotes_gpc = Offに変えて、ApacheをRestartしても変化なしです。
一度Stopさせたほうがよいのでしょうか
>>281 Stop⇒Startしたは反映されましたが、
相変わらず動かないです。
DLLの
>>281 手順6の作業が抜けていたので、system32にコピーして
Apacheを再起動させましたが、まったく変化がありません
>>284 ExtensionDirはちゃんと設定したか?
>>285 extension_dir = "php/ext" なので、大丈夫です。
287 :
278 :2006/06/27(火) 21:28:33 ID:???
>>286 それでちゃんと正しいところを指してるとは思うけど
(ロード出来なかったらエラー出てる筈だから)
念のためダブルクォートで括ったドライブ名から書いたフルパスにしてみ。
289 :
278 :2006/06/27(火) 21:33:33 ID:???
>>288 パスをC:/PHP/extとしたら実行できました。
ありがとうございました。
290 :
278 :2006/06/27(火) 21:38:48 ID:???
あと、しょうもない質問すみません^^; 作成したDBを直で見たいときは、どのソフトを使えばよいのでしょうか MySQLはAccessでは無理なんでしたよね
291 :
nobodyさん :2006/06/27(火) 21:45:37 ID:792aro1J
データベース(MySQL)にINSERTする文字列は、何かに変換する必要はありますか? あるとすればそれはどんなことでしょうか。
293 :
nobodyさん :2006/06/27(火) 21:49:43 ID:792aro1J
上記の理由から、当サイトにて公開していたphpMyAdmin日本語版は配付終了とさせて頂きます。 orz
phpMyAdminは元から日本語対応だし
どもありです。 これはシェアなのでしょうか。
function make_girl_friend($man) { #
>>242 用
if (is_under12($man)) die('早すぎます><');
if (has_wife($man)) die('離婚すればいいよ^^');
if (has_H($man)) die('貴様は二次元で十分');
if (is_impo($man)) die('人生\(^o^)/オワタ');
return get_woman($man);
}
function get_woman($man) {
$woman; $rnd = mt_rand(0, 10);
switch ($rnd) {
case 2 :
$woman = "エルメスたん";
break;
case 3 :
$woman = "細木数子";
break;
case 5 :
$woman = "HG";
break;
case 6 :
$woman = "インリン";
break;
case 8 :
$woman = "泉ピン子";
break;
case 9 :
trigger_error('彼氏のモトカノのモトカレ');
break;
default :
$woman = null;
}
}
>>295 いや、昔は日本語対応なんてしてなかったよ。
294のは日本語対応されたので、私家版の配布を止めます宣言
つか古い話だよなw
>>298 そうなのですか。
config.inc.phpが見つからないのは仕様でしょうか・・・
>>299 俺に振るのかw
config.default.phpをベースに変更して、自分用のconfig.inc.phpを作る。
最近ので実験版とかじゃないやつは、installユーティリティが入ってて
それで自分用のconfig.inc.phpを作ることも出来る。
バージョンで差異があるので、自分の入手したもののドキュメントをあたれ。
>>300 いえいえ、詳しそうなので^^;
使ってみたのですが、まったく使い方がわかりませんね(笑
とりあえず$cfg['DefaultLang'] = 'ja';にしたのですが、日本語にならないですしorz
phpで別ドメインのセッションの共有ってどうやるのです? サブドメインの場合はsession.cookie_domainでできるみたいですが、 example.jpとexample.comとexample.netとauau.infoで共有する方法を探しています。 宜しくお願い致します。
303 :
nobodyさん :2006/06/27(火) 23:10:19 ID:8VAiAYdr
>>276 3で別ファイルに記録しています。
アクセスログを全部見るまではしませんが、
特定のアクション(ボタン押し下げ等)をした時のIPなどを
記録したいと思いまして。エラー処理ではないのですけど。
304 :
nobodyさん :2006/06/28(水) 00:00:34 ID:5cOrr7Id
include の取消みたいなことはできますか? もう少し正確に言うと、include したファイル内で定義された関数の取消というか。 同じファイルを複数回 include したいのですが、そのファイルの中で関数定義があるため、二度目の include でエラーになってしまいます。 さらに悪いことに、include されるファイルは数種類あり、それぞれのファイルの中で同名の関数が定義されていることもあります。 その include されるファイルというのは画面のテンプレートになっていて、メインのスクリプトでは決まった変数にパラメータをセットしておき、 画面テンプレートを include することにより、画面出力を行うという仕組みになっています。 画面出力と言っても、それは HTMLファイルに出力するようになっています。 メインのスクリプトは大量のHTMLファイルを作成するスクリプトで、数種類の画面テンプレートを何度も include して、その結果をファイルに落とし込む処理をしています。 で、画面テンプレート内に固有の関数定義をした場合に、include が失敗するという問題に突き当たってしまったというわけです。 今は実験的に、関数定義を if(function_exists(〜)) の trueパートに置くことにより二重定義を避けていますが、別ファイルに同じ関数名があるようなケースに問題があります。 全ファイルを通して関数名をユニークにするという案もあるかと思いますが、ひとまずそれ以外の方法があればそれを知りたいです。
305 :
304 :2006/06/28(水) 00:05:07 ID:???
× 関数定義を if(function_exists(〜)) の trueパートに置くことにより ○ 関数定義を if(!function_exists(〜)) の trueパートに置くことにより
>>304 悩むべきポイントを大幅に間違ってるような気がする。
やろうとしてることはだいたいわかったが、説明するより直接手加えた方がはやそうなんで
実物の骨組みをここに貼り付けてくれ。或いはソースをまとめて、どっかにウプしてくれ。
307 :
304 :2006/06/28(水) 00:29:21 ID:???
イメージですが、 main.php $resource=InitResource(); // 出力ファイル名、画面テンプレート名、パラメータなどを求めるための何らかのリソース while(($params = GetParameters($resource)) !==false) { StdoutToFileStart($params['outfile']); // 標準出力をファイル化する処理開始(独自関数) include $params['template']; // $param内に設定された様々な値を利用するファイル StdoutToFileEnd(); // ファイル化終了 unset($param); }
308 :
304 :2006/06/28(水) 00:32:47 ID:???
テンプレート側 template1.php <html> <table border="1"> <tr><td>ID</td><td>名前</td></tr> <? foreach($param['data'] as $rec) { ?> <tr><td><?=$rec['id'];?></td><td><?=hoge($rec['name']);?></td></tr> <? } ?> </table> </html> <? // 固有関数定義 function hoge($str) { // 固有処理 return $result; } ?>
309 :
304 :2006/06/28(水) 00:35:16 ID:???
main.php は、DBを引くなどしてパラメータ $params を作り、そのパラメータに基づいて画面テンプレートを include し、ファイル化していきます。 include される画面テンプレートは tenplate1.php のような感じで、ここでは固有関数 hoge を定義しています。 実際はもうちょっと複雑な処理で、しかも画面テンプレート毎に固有で、標準化しづらい内容のものになっています。 で、画面テンプレートはどんどん増えていきます。 どんどん増える都合、関数名をユニークにするなどの処置は管理上の問題が出てきまして、できれば避けたいのです。
>>304 抽象クラス一個作って継承すれば?
インクルードの取り消しとかぜってーごちゃごちゃする気がするんだけど
ちなみに取り消しができるかどうかは俺は知らね
312 :
304 :2006/06/28(水) 01:02:15 ID:???
>>311 クラスにしても二重定義の問題は出るかと思いますが、そんなことないですか?
名前無しの即値クラスみたいなものが使えたりします?
>>302 できない
>>303 関数名にとらわれ過ぎ
parse_ini_file()でもiniファイル以外を開いていいんだよ
>>304 できない
というか、プログラムの基本構造の組み立て方が間違ってる
1.機能が違うのに同名の関数がある→関数名の名付け方がおかしい
2.機能が同じで同名の関数がある→関数の割り振り方がおかしい
1なら素直にリネーム
2ならそういう関数を別ファイルにしてinclude
一番いいのはクラス化すること(PHP4以上)
>>312 なんでクラス作って二重定義になるんだ
同じクラスを2個作る気か
315 :
304 :2006/06/28(水) 01:19:50 ID:???
>>314 同じファイルを二度 include することがあるからです。
>>313 最終的にはリネームすることになると思うのですが、まずは他の方法を模索したいところです。
名前ばダブらないように管理するということを、できればしたくないからです。
スコープがファイル内だけの関数定義ができるとか、Javaの無名クラスみたいのが作れるとかがあればいいんですけどね・・・
多少トリッキーでも、何かいい方法は無いものですかね。
ちなみに関数名って、MakeTree とか MakeTable みたいなありがちな名前で、でもその実装はテンプレートによって微妙に違うという、困った状況になってます。
requierじゃだめなの?
>>304 おまいさんはinclude_onceとかrequire_onceとか知らないの?
言語仕様を無視して、うんこな設計を推し進めるなよ。
319 :
311 :2006/06/28(水) 01:49:58 ID:???
>>304 何で継承してんのに多重定義になるの?そこはクラス名変えろよ。
さっきも言ったけどトリッキーなのはやめといた方が無難な気がする。
>>317 別ファイルに同名関数があるんだってさ
ブラジル猛攻
>>317 include_once は、二度目以降テンプレートの中身が出力されなくなるのでダメです。
・同じファイルを二度以上 include する必要があり、
・その中身は include されるたびに評価される必要がある
という条件になります。
>>319 同じファイルを二度 include する必要があるという点を考慮していただけないでしょうか。
異なるファイルを一度ずつ include するなら、ファイル間でクラス名を変えればいいというのは正解ですが。
321 :
317 :2006/06/28(水) 01:57:06 ID:???
なるほど・・・
基礎というか組み立て方が分かってないのね
把握した
>>304 ファイル毎に機能を振り分けて図に書いて整理してみるといいよ。
プログラムなんて積み木みたいなもんだから、ちゃんと組み立てればそれなりのものができるけど、
全体を把握せずにガンガン積み上げていったら一気に崩壊するよ。
322 :
317 :2006/06/28(水) 02:02:30 ID:???
なんか書込みが増えてた・・・
>>320 自分もinclude_once使ってるけど、
>二度目以降テンプレートの中身が出力されなくなるのでダメです。
こんなコトになったことはないよ。
include_onceでテンプレートファイルをそのまま出力してるクチかな?
323 :
304 :2006/06/28(水) 02:03:41 ID:???
>>320 の発言は自分の発言です。
>>321 関数ライブラリを作って include しようって話ではなく、画面テンプレートを include により出力しよう、というのが今回のテーマです。
画面テンプレートは、プラグインのようなイメージで勝手に追加できる、という感じにしたいのです。
そのため、テンプレートの作者間で意思疎通をしない限りは、関数名がダブるという事態が発生してしまうのです。
命名規則として、テンプレートファイル名に等しいプレフィックスを関数名につける、等のルールを設定することもできますが、
できれば余計なルールを設けないような選択肢があるのならそちらを採りたいと思った次第です。
324 :
304 :2006/06/28(水) 02:06:35 ID:???
>>322 あれ、
>>308 のようなファイルを include_once したとき、二度目の include_once でこの HTML の内容って出ますか?
出ないと思ってたのですが、勘違いかも。
ちょっくら実験してきます。
ちなみに、include で標準出力に出力されるべき内容を、出力バッファハンドラを設定することによりファイルへ書き込む、という処理をやってます。
325 :
304 :2006/06/28(水) 02:10:18 ID:???
実験してみました。 test.inc というファイルに TEST1 という内容を書込み、 <? include_once 'test1.inc'; include_once 'test1.inc'; ?> とやっら、 TEST1 と一行だけ出力されました。 残念ながら、これじゃダメなんです。
>>304 前後の話は読んでない。
そりゃinclude_onceなら一行(一回)しか実行されないよ。
両方実行したいなら普通のincludeでやってみれみれ
>>324 >>322 が
> include_onceでテンプレートファイルをそのまま出力してるクチかな?
って書いてるじゃない。つまり、322は
>>308 みたいなHTMLは使ってない。
多分、関数か変数に代入したデータが書かれてて、それを実行してる。
includeする内容に直にHTMLが書かれてて何度も出力が必要な場合はonceは使わない。
>>315 > スコープがファイル内だけの関数定義ができるとか
こういうのはどう?
template1.php
<? // 固有関数定義
$funcparam = '$str';
$funcbody = '
// 固有処理
return $result;
';
$funcname = create_function($funcparam, $funcbody);
?>
<html>
<table border="1">
<tr><td>ID</td><td>名前</td></tr>
<? foreach($param['data'] as $rec) { ?>
<tr><td><?=$rec['id'];?></td><td><?=$funcname($rec['name']);?></td></tr>
<? } ?>
</table>
</html>
>>304 設計思想がそもそもおかしいのをどうにかしたいと言われてもねぇ。
まぁ、「名前空間」で検索してみたら?
これじゃダメなんです。 一体何様なんだ、こいつはww
>>304 テンプレートファイルに名前ついてるだろ?それが固有の識別子になってるのに、
なんでclass化するなりして名前空間を指定しないでglobalに放り込んでるんだ????
template1.php → class template1 で全部解決するやん
331 :
317 :2006/06/28(水) 02:27:20 ID:???
>>327 フォローありがと
>>325 それ、テンプレートとPHPが1つのファイルに混ざって書いてあるのね。
>>308 の方は見て無かったよ。ゴメン
HTML部分とPHPの関数部分を切り離して、HTMLはincludeで何度も出力、
PHP関数部分はsubroutine.phpとかにでも移してinclude_onceで読み込むのがいいと思うよ。
requireだな
>>330 もうちょい言うなら、それに加えてテンプレートと中で使う固有処理はファイルを分けて、
template1.php
<?php
require_once("template1func.php");
?>
<html>
:
</html>
template1func.php
<?php
function template1() {
固有処理
}
?>
として、template1.phpはrequire()で読み込む、って感じで
require()とrequire_once()をちゃんと使い分けるべきなんだよね。
なんか急に人増えたな
全部同じ人だよ
337 :
304 :2006/06/28(水) 02:36:54 ID:???
>>327 create_functin なんてものがあるんですね!
長い関数になると少々厳しそうですが、名前のダブリを心配しなくていい方法として大変有力ですね!
でもこれ、同じ引数で複数回呼び出したときって、同じ内容の別名の関数がどんどんできていくのでしょうか?
リファレンスをちょっと見た範囲では、特に寿命について書いてあるわけでもなく、また関数を削除するアクションについても
書いてないので、スクリプトの実行が終了するまでメモリに留まるんでしょうね。
戻り値が「関数オブジェクト」みたいなものなら良かったんですけどね・・・
さらに
>>333 runkit_function_redefine なんてのがあるのですか。
というか、runkit_function_remove なんてのがあるんですね!
これが正解な気がしますね!
ただ、runkit の使い方について不勉強なもので、ターゲットの環境で使えるかどうか不明なのがナニです。
とりあえず実験してみます。
なんにしても、新しい材料が手に入ったので、何かいい実装方法があるか検討してみます。
ありがとうございました。
>>337 > これが正解な気がしますね!
だって。
はいはい、終了。
>>これが正解 いや、いいけどね。
ごめん、かぶった
初級者が初心者を輪姦中と聞いてdで来ました!
includeで自動出力させる理由がわからない・・・ template.phpをtemplate.class.phpに書き換えるスクリプト一つ用意すれば何もしなくても解決できる・・・ そもそもtemplateに関数定義とか入ってる時点でtemplateじゃないと思うし、分離すりゃいい・・・ 標準出力使う理由も不明・・・ なんか、ものすごく間違った覚え方したまま成長しちゃって取り返しが付かなくなってる感じ。 手軽さとか利便性とか分かりやすさを重視するため!って思いこんでるだろうけど、 あんたの考え方さえ変わればすぐに手軽で分かりやすいシステムになるよ。 自分がその作業の一番のボトルネックだって認識するところからはじめるべき。
343 :
304 :2006/06/28(水) 02:44:19 ID:27YOZKQj
あー 関数名(あるいはクラス名)がユニークになるようなルールを定めて実践しろというのも正解だとは思いますが、 今回の意図としては、どちらかといえば関数名のダブリを避けるというよりは、関数のプライベート化という方が近いので、 関数エントリの削除という手段が正解だと判断したものです。
>>343 じゃあ、ユーザが「include」って名前の関数を作りたいって言ったらどうするんだ?
>関数のプライベート化という方が近いので、 クラスって聞いたことない? >関数エントリの削除という手段が正解だと判断したものです。 みんなそれが間違ってるって指摘してんのに、一人固執してるから進まないんだよ
>>337 > でもこれ、同じ引数で複数回呼び出したときって、同じ内容の別名の関数がどんどんできていくのでしょうか?
まぁ、そうだね。多重生成を防止する方法はいくらでもあると思うけど。
とんだ頑固者だぜ!
304の同僚?依頼主?が可哀想に思えてきた
もう良いと思うよ。関数削除できるんならそれはそれで動きそうな気もしてきたし。 自分で一から作ったやつじゃなくて他人が作ったのが回ってきたんだろ。 で設計思想はそのまま引き継ぐ必要があるんだよきっと。
いいじゃん、もう解決したらしいんだから。 好きなようにさせてやればいいんだよ。 正しい方法を自分で選べるやつは、あんな方法とらないし 聞く耳持たないバカには何言っても無駄。
気に食わない同名の関数は俺がオーバーライド(正確には違うが)しちゃうぞ ってことを奨励する混沌とした弱肉強食システム。
system()でtemplate動かせばいいだけじゃ
>>350 根拠もなくそのやり方は嫌だという人間に質問する権利はないとおもう
354 :
304 :2006/06/28(水) 03:01:06 ID:???
>>342 その意図は
>>323 にあるとおりです。
データの表現方法を自在にしたいという目的があります。
標準出力を使う理由は、PHP は標準出力にモノを出力するのに都合がよいからです。
include するだけで画面に出ますから。
で、画面と関数定義を分けなさいという意見、至極もっともなわけですが、
関数内のほとんどがコードが HTML 出力をしている(というか、一時 PHPコードを解除して HTMLそのものが書かれている)ような場合、関数だからといってファイルを分けるという選択がしづらいこともあります。
たとえばテーブル中にテーブルを作っていく、なんてコードがありまして、ぱっと見HTMLなのですが、その部分は再帰的に呼び出される関数として構成されているわけです。
その関数を別ファイルにしてしまうと、テーブルの中身のHTMLコードまでそっちのファイルに行ってしまい、画面デザインの変更があると二つのファイルをいじるハメになってしまいます。
なので、最も欲しかった方法は、無名関数や無名クラス、あるいはファイル内にスコープが限定されるなプライベートな関数やクラスだったのです。
>>345 何度も言っていますが、クラスにしても、クラスの二重定義の問題は回避できないです。
関数とかクラスとかそういう問題じゃなくて、「何かの定義」の有効範囲の問題です。
>344、351
テンプレート作る人はPHPを知ってる人が対象なので、そういう無茶は無いという前提です。
>>352 それも考えたのですが、パラメータの引継ぎ方法に難がありました。
単なる文字列とか数値やそれらの配列程度ならなんとかなるのですが、何かのオブジェクトだったりしたときにダメでした。
>>354 しつこいよ。
無茶な要求にみんなイライラしながらも、我慢して解決法や問題点の指摘をしてくれたんだ。
これ以上荒らさず、さっさと消えろ。
>>354 だから「名前空間」言うとるじゃないか。
名前空間が使えない言語は、何かしらのルールで名前の衝突問題を乗り切る。
これ基本。
>>304 救いようの無い馬鹿だな。テンプレートにファイル名はあるんだろ?
クラス名をテンプレートファイル名と同じルールでつければ終わるだろうに。
何?テンプレートにclass{}とか書きたくない?
じゃラッパー書けばいいじゃん。意味わかる?
”あれだとこれができない、あれじゃないとこれはできない”
人様に聞かないと、この程度も解決できないくせに、何考えてんだ。
includeで出力しようとしているところが間違っていたと気づいてほしかったな。
>>357 たぶんね、そのクラスを定義したファイルを何回もインクルードしたいって事だと思うのよ。
最初まさかと思ってたけど、もうそうとしか思えん。
>>358 includeで出力させるんじゃなくて、テンプレート出力を変数に格納し都度echoするようにすればそんなアホなことしなくて良いのに。
って、それすら理由もなく嫌だ嫌だ言うんだからどうしようもないな。
つーわけで304はプログラマ辞めた方がいいとおもう。周りも口にしないだけで大なり小なりそう思ってるとおもうよ。
304は知識不足というより人格不足だな・・・・・
こんなキチガイを誘い込んだ306が一番悪いとおもふ
クラスにしろとかrequireにしろとか_onceにしろとか、もう見てらんない
>>307-309 も理解できないウンコ共は、余計なこと言わないで黙って見てなさいってw
マジメな話、PHPで304の言うようなこと(関数のローカルスコープ化)はできないよ
自分でも言ってるけど、命名規則設けてコンフリクトを避けるのが一番スマートだと思われ
関数定義のオーバーライドとか消去とかやるにしても、結局テンプレートに手を入れなくちゃいけないんだろ?
掲示板のスキンとかblogのテンプレートファイルとかの類かな。
似たような案件は見たことあるからまー気持ちは分からんでもないかも。
>>357 > クラス名をテンプレートファイル名と同じルールでつければ終わるだろうに。
その話はすでに
>>323 で終わってるけどね。
スキンの類だとファイル名からして同じだったり不定だったりして回避策にならんとは思う。
(使う環境に応じてディレクトリ+ファイル名に命名ルールを変更、とかの話が出てくる)
ファイル名変更に合わせてファイルの中身を置換するスクリプトが必要になるな。
まー、その仕組みでincludeで生のままファイルを扱おうって時点でかなりムリのある話だと思う。
364 :
362 :2006/06/28(水) 03:32:20 ID:???
あぁ おれもウンコだった…
関数名のコンフリクトは避けられても、二重インクルードがあるのか
それなら
>>304 の言うような if で function_exists 使う方法かな…
関数定義とテンプレートを分けたくないんでしょ?
>>362 いや、皆いちいちコードの内容なんて見てないって。
質問内容と、そのやり取り(応答)の内容で「こりゃ駄目だ」って思ってるだけ。
require とかそういう話題は、そもそもそういう事で悩まなくていい実装方法を
例示してに過ぎないだけだと思うけど。
ちにかく、設計の仕方がまずい。これに尽きる。
>>364 個人的にはcreate_functionが1番てっとり早いと思うけどね。
多重生成でのメモリの無駄を気にしてるみたいだけど、
同じファイルの多重includeって何回くらいまであるんだろう?
2〜3回くらいなら気にせず生成させちゃった方が話が早くね?
どうしてもつっこみたいから一言だけ言わせて
その後はスルーするから
>>354 >たとえばテーブル中にテーブルを作っていく、なんてコードがありまして、ぱっと見HTMLなのですが、その部分は再帰的に呼び出される関数として構成されているわけです。
>その関数を別ファイルにしてしまうと、テーブルの中身のHTMLコードまでそっちのファイルに行ってしまい、画面デザインの変更があると二つのファイルをいじるハメになってしまいます。
それも構造次第
オレは似たようなことやってるけど、ちゃんと考えてるからテンプレートは弄っても関数が書かれてるファイルは弄らなくて済むように作ってる
ちゃんとMVCも考えて作んなきゃ糞
オマエのやろうとしてるのは他人が読めないコードを量産してるだけに過ぎない
※ココで言う「読めない」とは「読みにくい」「読む気が失せる」という意味
368 :
362 :2006/06/28(水) 03:45:24 ID:???
>>365 プラグ印やらスキンやらをお手軽にやろうと思ったとき、
>>304 のアプローチはそう悪くないと思うぞ?
PHPのテキスト中にコードを埋められるという利点をうまく生かしてると思うが
お前ならどんな設計するんだい?
応答内容の悪さは若干後付気味なくらいで、他に問題あるか?
おれも似たような案件でinclude使ったからよくわかるというか、まぁそんときは関数定義しないで回避できたけど
>>366 画面デザインとPHP(の関数)が溶け合ったコードみたいだから、create_function化するのは苦労しそうだ
ついでに、関数とHTMLが溶け合ってるコードも見たことあるけど、それはそれで読みやすいというか、むしろ分けないほうがいい感じ
HTMLのど真ん中に関数定義があって、関数が終わらないのに再びHTMLになってるようなコードなんだけど、すげー合理的だった
ちょうどそれも再帰処理で、入れ子構造の画面を展開するトコだったんだけどな
369 :
304 :2006/06/28(水) 04:03:35 ID:???
引っ込んでようと思ったのですが、アドバイスをいただけているようなのでお礼がてらに。
結論から言って、runkit 使うとかはやめようと思いました。
>>352 でローカルスコープ関数定義はできないこともわかりましたので、その方面でも踏ん切りがつきました。
create_function も、やはりHTMLが混じった長いの関数もあったため、あまり得策では無さそうです。
というわけで、命名規則の設定と function_exists でいってみようかと思います。
>>363 の言うような、ファイル中の関数を置換するというアプローチ、いい案ですね。
しかしテンプレートをパースするのに苦労しそうなので、今回はお手軽な方法に逃げてしまいます。
>>367 おっしゃること、よく理解できます。
ただその部分は、それはそれでうまい構造になってまして、HTMLの可読性もPHPの可読性もよく両立しているかに見えます。
混じりあったコードを分離して、なおかつお互いの可読性を高めるような構成はなかなか難しそうです。
そして、そういうコーディングスタイルを奪うことも、できればしたくないです。
あと、なんだかんだでダメな理由ばかりを返信することになってしまったこと、申し訳なく思っています。
でもたくさんの書込みを頂いて、みなさんには感謝してます。
ありがとう。
eval
371 :
304 :2006/06/28(水) 04:06:20 ID:???
あちゃー
×
>>352 でローカルスコープ関数定義はできないこともわかりましたので、
○
>>362 でローカルスコープ関数定義はできないこともわかりましたので、
スマソ
372 :
362 :2006/06/28(水) 04:27:32 ID:???
もう済んだみたいだけど、おれの質問
こんな再帰構造BBS展開のコードがあったとして、これを
>>367 だったらどう分ける?
<? hoge($thread); ?>
<? function hoge($data) { ?>
<TABLE BORDER=1>
<? foreach($data['thread'] as $a) { ?>
<TR><TD>
<?=Date('Y/m/d', $a['date'])?> 名前:<?=$a['name']?><BR>
タイトル:<?=$a['title']?><BR>
<?=$a['text'];?>
<P>
<? if(!empty($a['subthread'])) hoge($a['subthread']); ?>
</TD></TR>
<? } ?>
</TABLE>
<? } ?>
コードは簡単なので、説明省略
>>365 include と require って、ファイルが見つからないときに warning になるか fatal error になるかの違い以外に差異ってあるの?
>>374 いや、include でだめって話をしてるのに require を使えって回答がみたいだから。
>>365 の言いぶりにしても、require なら悩まなくてもいいという意見にも見えるし。
376 :
367 :2006/06/28(水) 06:16:15 ID:???
>>376 Smartyについてはよく知らんが、
うpされてるコード読んだけど、それなら
>>372 の方がシンプルで読みやすいし修正も容易そうじゃないか?
subtable.template を関数定義ファイルとしないで main.php に関数を定義してそこから include してる意図は、関数定義とHTMLを完全分離したということなのかな?
だが画面のデザインを変えるときに main.php にまで影響が及ぶ可能性があるのが嫌な感じだな。
ファイルがやたら細分化されていきそうなのも気になる。
>テンプレートは弄っても関数が書かれてるファイルは弄らなくて済む
と言っても、テンプレートファイル自体が分散するようだと、複数のファイルを弄るハメになることに変わりは無くなっちまうわな。
>>372 を function_exists を使って解決するって、関数定義が
<? if( !file_exists( "hoge" ) ) { function hoge($data) { ?>
みたいになるのかな。
試してみたら、確かに二重定義は発生しないみたいだけど、これはこれで面倒だな。
おまじないだと思えなくもないけどな。
create_function の適用は、このケースでは論外かな?
つか、直で画面に出力する場合は二重定義の心配はしなくていいんだよな?
あと、
>>376 がうpしたファイルの main.php の最初の行(ついでに subthread も)は
$tempData['thread'][] = array(
だよな。つまらんツッコミだけど。
あ、おまいさんのやり方を否定してるわけではないぞ。
おれは偉そうなこと言っておきながらうまい方法を提示できんし。
>>378 ココ
>require とかそういう話題は、そもそもそういう事で悩まなくていい実装方法を
>例示してに過ぎないだけだと思うけど。
「そもそもそういう事で悩まなくてもいい」方法として例示されたのが「require」と捉えれば、
include での悩みは require には無い
ととれない?
いや俺的には include と require が一緒ということなら、もうどうでもいいんだけど。
>>379 とれるとれる
オレもそう思って「?」ってなった
くだ質らしい低レベルなレスが続いていて微笑ましいですね^^;;;;;;;;
382 :
nobodyさん :2006/06/28(水) 09:17:01 ID:3gjeaESL
データを別ファイル(*.txt)などに記録していく時、通常 1回目の記録 2回目の記録 3回目の記録 . . . n回目の記録 となりますが、これを「新しいものが上」として記録することはできませんか? 記録量が増えてきた時、新しいものが下だと、 最新の記録を見る時に、延々とスクロールしなければなりません。
>>383 それもいいが、
tmpファイルを作ってまずそれに新しい1レコードを書き、
その後もとのデータファイルから stream_cccopy_to_stream、
そして元のデータファイルをユニークな名前にrenameしたあと、
tmpファイルを元のファイルの名前にrename、
その後元のファイルは消す、または次回のtmpファイルとして使う、
のほうが stream_cccopy_to_stream を1回しか行わずにすむのでスマートかも
日付の比較でstrtotime使ってUNIXタイムスタンプで 比較がよいというTipsサイトをよくみかけるのですが strtotimeのマニュアル見ると上限は2038年とかって記載されてますよね。 UNIXタイムスタンプの関数使いつづけてて問題ないんですかねこれって…
注意: タイムスタンプの有効な範囲は、通常、Fri, 13 Dec 1901 20:45:54 GMT から Tue, 19 Jan 2038 03:14:07 GMT までです (これらは、32 ビット符号付整数の最大及び最小に一致します)。 さらに全てのプラットフォームが負のタイムスタンプをサポートしている わけではありませんので、日付の範囲は Unix エポック以前にはならないかも知れません。 これは、例えば Windows やいくつかの Linux ディストリビューション、 いくつかの他のオペレーティングシステムでは 1970 年 1 月 1 日以前の日付では動作しない事を意味しています。 PHP 5.1.0 以降のバージョンでは、この制限はなくなっています。
>>382 >最新の記録を見る時に、延々とスクロールしなければなりません。
まさか、これだけのために・・・?
>>385 そのスクリプトが2038年以降の日付を扱うのなら、まずいだろう
389 :
nobodyさん :2006/06/28(水) 10:13:37 ID:ZX4kCjMN
数分おきにphpが自発的にメールの確認を行うにはどのような方法がありますでしょうか?
391 :
nobodyさん :2006/06/28(水) 12:44:40 ID:ZX0Dr8Cc
OracleとPHPの接続について質問をここでしてもいいでしょうか?
>>382 新着記事だけのビューファイル作っておけば?
>>392 構わないけど、最近たてつづけに数冊PHP+Oracleな本が出てるから、
そこに書かれてるような程度の話なら後々のことを考えて
早めに買って参考にするのがいいと思うよ。
有り難う御座います お言葉に甘えて一応書かせていただきます Linux RedHat ES3を使用して WEBサーバとDBサーバでサーバーの構築をしています □WEB apache 2.0.55 php 4.4.2 □DB oracle 10g をインストールして WEB側からtnsping,sqlplusでDBに接続することが可能なことを確認した後 <? $iConn = ocilogon("test", "test", "db"); echo $iConn; ?> を実行したところ 下記のエラーが出てしまいました Warning: ocilogon(): _oci_open_server: Error while trying to retrieve text for error ORA-12154 in /var/www/test.php on line 2 この状態でWEB側の設定なのかDB側の設定なのかどちらの設定が悪いかわかりますでしょうか? 他にも何か必要な情報がありました 提出させていただきます よろしくお願いいたします
397 :
nobodyさん :2006/06/28(水) 15:23:59 ID:3gjeaESL
>>393 >>384 最新を上に出すのにも工夫が要るのですね。
その方法をどう考えるかが、面白いところかも。
>>382 file()で取得してarray_reverseは?
質問です。 submitボタンを押して、見た目上ページを移動したところで、ファイルの書き込み、もしくは修正処理をしています。 しかし、何度か試したところブラウザの"更新ボタン"を押すと、再度書き込み処理を行ってしまいます。 現在は同じデータがすでにあった場合には〜、などと条件付けをして排除していますが、少しばかり不安な気がします。 ブラウザの"更新ボタン"などが押された時には処理を実行しない、もしくはsubmitボタンが押された一回のみは処理を行うなどの方法はないのでしょうか? テクニックなどがあれば教えてください。よろしくお願いします。
>>398 有り難う御座います
一読してみて 怪しいところをやってみたところ 問題が解決されました!
環境変数が足りていなく接続できていなかったようです
有り難うございました
402 :
nobodyさん :2006/06/28(水) 16:32:21 ID:3gjeaESL
>>399 厳密には、1回の記録が複数行に渡ります。
-----
1回目の記録A
1回目の記録B
1回目の記録C
2回目の記録A
2回目の記録B
2回目の記録C
...
-----
なので、ABCの上下は入れ替えてはなりません。
>>400 ヘッダでLocationを吐いてフォームデータを送信されたURLから
別のURLに飛ばしてしまうのがよろしいかと。
例えばこんな感じ。
入り口(書き込みフォーム)
↓
↓フォームデータ
↓
完了画面(HTTPヘッダにLocationで表示前に飛ばす)
↓
↓自動的に移動
↓
入り口
これならリロードされても入り口を再表示するだけになるはずです。
携帯だったら、最新のログだけ別ファイルに保存しておいて、 リロードしたら前のデータと比べて同じなら何もしないというのも
>> 403 404 405 まだ試したことがないので一抹の不安はありますが、管理用ページということもあり、セッションで制御するのを試してみたいと思います。 アドバイスありがとうございました。
407 :
nobodyさん :2006/06/28(水) 18:36:08 ID:+uIloqdX
ドコモの端末のユーザーエージェントからUTNを切り出すにはどういうコード書けばいいんだ?
408 :
??? :2006/06/28(水) 18:43:08 ID:4DSWMgzu
最近自分の中傷が掲示板でひどいんです。 管理人じゃなくても個人の特定や削除ができますか?
>>408 管理人に連絡、対処されないなら鯖管へ。
410 :
??? :2006/06/28(水) 18:50:20 ID:4DSWMgzu
パソコンを使い始めたばかりでよくわかりません… どういうことですか?
>>410 世間一般での普通の対応を求めろっつうこと。
ネットだろうが、書き込みが電子データで物理的なものでなかろうが
やることの本質は同じ。しかるべき相手にしかるべき要求をする。
>>410 とりあえず、どの掲示板かURLをお願いします。
私が対処しに行きますので。
414 :
nobodyさん :2006/06/28(水) 20:20:56 ID:+uIloqdX
>>414 つかちょっとくらいは自分で考えれ。それでもどうしても駄目だったら
自分で作ったの持ってきたらその問題点くらいは教えちゃるから。
なんだよおしえてくれたっていーじゃん! なめんじゃねーぞカス
カスにカス呼ばわりされても痛くもねーよ
なぁお前ら様方、ここはPHPスレだけどまぁ気にしないで聞いてくれ。 優れてるとか流行ってるじゃなくて、ただ個人的にお前らが一番好きな言語って何? 俺はやっぱりPHP!
>>418 最近偽者も多いので馬鹿をみればスルーでよろ
422 :
nobodyさん :2006/06/29(木) 00:16:28 ID:wsUQiNip
PC2M というPCサイトを携帯用に変換するスクリプトを利用しています。 _check.php でチェックすると画像変換スクリプトが200でなく、403エラーを返す という注意をされます。 動作としては、pc2m.phpでGDでPC用の画像を変換して、出力するのですが、 画像はちゃんと変換されて表示されます。 表示はちゃんとされているが、403エラーを出す理由をどなたかヒントでもいいので 教えてもらえないですか?
>>422 _check.phpがリファラーを返さない仕様で、
Apacheの設定で画像の直リンクを禁止するためにリファラーチェックしてるとか。
その質問は他のスレの方がいい気がするなぁ…
426 :
nobodyさん :2006/06/29(木) 01:28:02 ID:N7wntj4v
計算結果を見やすくする為、カンマ表示や¥記号表示を出来ないでしょうか? どなたかヨロシクお願い島津。
>>426 カンマ表示はnumber_format()
¥表示はそのまま頭に¥つけて表示するだけじゃ?
ereg("[^\-]","-",$tekito); がtrueになります ereg("[\-]","-",$tekito); もtrueになります どうしてでしょうか… バージョンは5.1.4です
430 :
nobodyさん :2006/06/29(木) 01:58:22 ID:hhtHsz1A
array_searchで、数字だけの配列から文字列をサーチすると、 何故か0が返ってきます。 例) array_search("hoge",array(0,1,2)); 本来ならばfalseが返って来て欲しいのですが… どうすれば正しい値が返ってきますか? バージョンはPHP5.1.1です。
431 :
nobodyさん :2006/06/29(木) 01:58:28 ID:N7wntj4v
初心者質問でスンマセンでした…(汗 でも、大変参考になりました。ありがとです。
>>429 > ereg("[^\-]","-",$tekito);
> がtrueになります
再現しない。
<?php var_dump(ereg("[^\-]", "-", $tekito)); ?>
の結果は
bool(false)
確認方法が間違ってるだけじゃないの?
>>430 array_search("hoge",array(0,1,2), TRUE);
>>430 それ本当に0か?
falseじゃないのか?
falseは出力したら0と表示されるぞ
>>434 確かにstrictにすると正しくなります。
strictにしなくてもfalseになるはずと思うのですが…。
原理が謎です。
>>435 var_dumpしているので確かです。
>>437 ならんよ。
if("hoge" == 0) は真だもの。
if("hoge" === 0) ではじめて偽になるでしょ。
strictってのはそういうことだ。
>>432 実際の正規表現はこれです
ereg("[^0-9a-zA-Z\.\-_@]",$mail,$tekito)
今一度確かめてみたところやっぱり動作が少しおかしいです…
ありがとうございます
>>430 文字と数字比べてるから変なんじゃね?
>>437 array_search("hoge",array("0","1","2"));
これはだめ?
012が変数ならstrval()で変換汁
実際の正規表現はこれです ↓ 実際動作が変だった正規表現はこれです
>>439 問題をシンプルにするのは感心だが、ちゃんと再現するコードで質問しろよなー
ereg("[^\.\-_]",$mail,$tekito)
これって結局 [.-_] になって .〜_ の範囲でチェックされてるだけだと思う。
ereg("[^0-9a-zA-Z-._@]", $mail,$tekito) にしてみ。
>>442 \でエスケープしててもメタ文字として認識されるのか?
444 :
437 :2006/06/29(木) 02:41:30 ID:hhtHsz1A
レスありがとうございました。
>>438 "hoge"==0は何故真になるのでしょうか?
""==0なら真になって当然だと思うのですが…。
>>439 問題は0だけのようですので、
0を探して"0"にしてからサーチすることにしました。
>>442 違うよ。
"[\.\-_]" の正規表現は \ と . と \〜_ の範囲。
>>443 POSIX正規表現のマニュアル読めば分かるけど、[〜]の中にエスケープというのは存在しない。
Perl互換正規表現と混同しないように。
何でereg使うのw つーかメアドかどうか確かめる正規表現としてはいい加減すぎwww
>>445 mjk!!!
目からウロコです
ありがとうございました
>>446 その後別のチェックも加えてるから大丈夫。
エラーメッセージを細かくするために分けた。
>>444 > 問題は0だけのようですので、
array_search("2hoge",array(0,1,2));
はint(2)が返る。
>>448 なるほど!ありがとうございました。
いろいろ試してみた結果、haystackもneedleもすべてstringにキャストした上で
strictにするしかないようでした。
僕はneedleちゃん!
452 :
nobodyさん :2006/06/29(木) 11:11:02 ID:j7oCXco7
PHPでエラーがあるとその内容と行が表示されますが、 表示されないレンタルサーバーがあります。
ニートル乙
>>452 そうか。報告ご苦労様。知ってたけどね。
456 :
軟式PHP :2006/06/29(木) 12:08:15 ID:???
クリックしたら、ディレクトリを圧縮して ブラウザからダウンロードできるようなスクリプトを作りたいのですが、 上手くいきません。 というのもディレクトリの容量がある程度あると サーバー側のメモリを使用しきってサーバーダウンしてしまいます。 大容量ディレクトリのダウンロードでもメモリを占有しないような 上手い方法はないでしょうか?
461 :
nobodyさん :2006/06/29(木) 16:00:58 ID:MDHzuRjB
>>279 有難うございます。
おかげさまでPEARが無事に入りました!
なんとか、1つのブログPINGポータルに反映させることができました。
しかし、大手のPINGポータル(MyBLOGやGOOなど)は未だに反映されません…
これはPHPの問題というより、ポータル側のスパム対策などでしょうか。
こちらのスレッドからずれてしまいそうですので、検証の後、別の所で質問させて頂くかもしれません。
皆様本当に有難うございました!
>>458 shell_exec でtarか何かでアーカイブするシェルを動かす
終了後、できたファイルにへのリンクを生成して出力する
463 :
軟式PHP :2006/06/29(木) 17:58:26 ID:???
質問です。 会員制のシステムで一般的なユーザ認証の方法というのはどのような仕組みですか? 例えば、 ・ログイン時にIDとPASSでDBを検索し、それ以降はセッションにログイン済みフラグ的なものを与える。 ・ログイン後はIDとPASSを暗号化したもの+認証情報でないユーザ番号をセッションIDにしてアクセス毎にユーザ番号を基にDB内を再検索。 とか... あと、MovableType、XOOPS、PLONEなどが使用する認証の仕組みもわかる方いましたら、是非教えてください。 宜しくおねがいします。
>>464 XOOPSは
>・ログイン時にIDとPASSでDBを検索し、それ以降はセッションにログイン済みフラグ的なものを与える。
アクセス毎に認証チェックするというのは珍しいケースだと思うけど?
毎回チェックするならBASICじゃだめなん?
>>464 > MovableType、XOOPS、PLONEなど
なんでソースを読もうとしない?
469 :
379 :2006/06/29(木) 21:49:46 ID:zAm3zlYq
共有メモリを使ってCとPHP間でデータの受け渡しをしたいのですが、 openのタイミングでエラーになります。 どなたか分かりましたら教えてください。お願いします。 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アプリの ユーザーに設定しています。
470 :
469 :2006/06/29(木) 21:52:16 ID:zAm3zlYq
名前379は、このスレの379さんとは関係ありません。残ってました。すみません。
そんなことやったことないからオレは力になれないけど、 エラーが出てるならその内容を書いたほうがいいと思うのデス
472 :
469 :2006/06/29(木) 22:35:58 ID:???
471さん、ありがとうございます。 今確認できる場所にいないので後でもう一度見てみます。 あらかじめC側でメモリを割り当てておいてphpでopenしにいくと エラーではねられるんですが、openモードは "c" "a" ともに一緒でした。
>>425 >
>>422 > _check.phpがリファラーを返さない仕様で、
> Apacheの設定で画像の直リンクを禁止するためにリファラーチェックしてるとか。
apacheではそういう設定をしていないんですけどねぇ…
ちゃんと動作しているようなのですが、どんな可能性があるのかと思いまして。
ただのバグですかね。
>>473 > ただのバグですかね。
自分の思い通りに動かないのをすぐバグ扱いするのは良くない。
telnet なりで自分でリクエストを投げてみて自分の目で確認すべし。
質問ですが、通常のHTLMとほんの1kbぐらいのファイルをincludeさせたPHP。 サーバにかかる負荷って実際どれぐらい違うんでしょうか? 2000ぐらいあるファイルのフッタ部分をいちいち書き換えてられないので includeで表示させたいんですが…。
>>475 サーバーのハードやHTMLの内容やPHPの設定にもよるんじゃないの?
重いのはHTMLを構文解析しなきゃいけなくなる部分なので
includeファイルのサイズは大して問題にならないと思うけど。
(元のHTML自体が巨大だとその分だけ重くなる)
でもせいぜい負荷2%が5%になったとかそんなもんだと思うけどねー
(既存の倍以上には重くなると思う)
>>473 情報の痕跡も探さずに可能性だけ列挙して
その可能性が該当しない=バグだろう
ってのはあまりに短絡的な考え方だろう。
>>473 474 の人ですが、自分も入れて試してみました。
ふつーに、200 になりましたが?
単に pc2m.php のパーミッションの問題のような気がしますが。
>>478 の自己フォロー。パーミッション問題じゃなかった。ごめん。
やっぱり画像の URL だ。となると、やっぱり自分でリクエスト確認だ。
情報少なすぎなので、これ以上はなんとも。
480 :
nobodyさん :2006/06/30(金) 00:14:58 ID:8PS/D42h
パーミッションについて簡単に教えてください。 どんなとき777で、705で、666なのか数字も一緒に教えて下さい。
教える方がミーハーなのは困る
ミーハーって?
ミーチャンハーチャン 親父用語だ
>>458 容量があるならtarとか無圧縮格納可能な形式でoutputは出力したまま逐次ファイルを追加していくとか。
>>475 2kB+include1kBのPHPと3kBのhtmlをabで調べたら1.5倍程度だった。
>>476 PHPってHTMLをパースしてるの?
>476 >487 検証までして頂いてありがとうございます。 2倍までとはいかずとも1.5倍ぐらいにはなってしまうんですね。 かといってJavaScriptで書き出してしまうとSEO的にどうしようもないですし…。 やはり少しでも負荷を減らすには静的ファイルにするしかないですね。。 楽はしたいけどサーバが重過ぎて。。。orz
チャットで、よく現在の入室者というのがありますよね。 それはセッションを使っているのでしょうか? どういう仕組みなのかわからないので、どなたか教えてください。
>>488 htmlの転送ってのは本来屁みたいなもんなんだよ。
それすらきついということは他に改善の余地がありそう。
まあ楽をしたいだけならhtmlを自動で編集するスクリプト書くというのもあるけどPHPから離れてきたのでこのへんで。
テスト
>>475 >>488 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);
}
こんだけですみそーな。
>>492 まちがい
> foreach(file(WORKDIR . "*.html") as $file) {
は
foreach(glob(WORKDIR . "*.html") as $file) {
ね
>493 おおお…ここまでしてくださるとは…。感謝…。 2000もファイルがあるとタイムアウトが怖いですがちょっと試してみたいと思います。 <(_ _)>どもどもです
>>494 set_time_limit(0)した上でコマンドラインから動かせばいいじゃん
>>462 >shell_exec でtarか何かでアーカイブするシェルを動かす
>終了後、できたファイルにへのリンクを生成して出力する
これをワンクリックで処理する方法ないでしょうか?
アーカイブにワンクリック、出てきたリンクにワンクリック、
なら簡単にできそうですが、
ワンクリックで、アーカイブ、ダウンロードまで
こなしたいと思います
そこまでヒント出されてればあとはPHP関係ないよ。少しは自分で考えよう
>>489 精度よくやるならセッション(もしくはそれに類するもの)を使うが、
別になくても出来ないこともない。
やり方はIPアドレス−誰−現在居る/居ないの関係を
どうやって結びつけるかを考えれ。
(IPアドレス−誰の関係はなくても出来る)
現在居る/居ないはHTTPの仕組み上「接続状態」は得られないので、
接続状態の場合に限ってJavascriptなどで周期的にアクセスを繰り返して
接続を通知する。最後の接続後一定時間は接続してると見なす。
などのやりかたをする。
オブジェクト指向についての質問です。 自分一人で開発してることもあって、今までは「手続き型プログラミングで十分。 ベタ書き最高!」なんて思ってスパゲティ化もあまり気にせずにいたのですが、 最近ちょっと規模の大きいWebシステムを作っていて、スクリプト・ファイルが何十個にもなり、 また一つのスクリプトが1000行以上になってきたりしました。 そうすると、もはや自分で作ったプログラムなのに、どこでどう処理してるか収拾がつかなくなって なんかすごく複雑&冗長で無駄な処理をやってる部分も多々あります。 まだオブジェクト指向で作ったことがないし知識もないので、 「一度システムが全部完成してからオブジェクト指向で書き直せばいいや」と思ってたんですが、 このままだとさらに混乱が悪化しそうなので、今すぐオブジェクト指向を勉強して、それで書き直したほうがいいでしょうか? それともとりあえず完成までベタ書きで続けるべきでしょうか?
500 :
nobodyさん :2006/06/30(金) 09:10:31 ID:Y/YT1xaC
switch ($XXX) { case "aaa": include = "aaa.php" ; break; case "bbb": include = "bbb.php" ; break; } のようにして読み込みファイルを変えているのですが、 これが100も200もとなってくると管理が大変ですし、 「〜の場合」というチェックを上から順番にしていくでしょうから、 それが上にあった時は良いですが、後の方に存在していたとすると、 それまでのマッチに負荷がかかるというか、 何か(精神的に)スッキリしません。
>>499 設計からやり直せ
ちゃんとした設計であれば、オブジェクト指向でも手続き型でもどっちでも大差はない
オブジェクト指向を学ぶにしても、そんなスパゲティコードは捨てて、小さいシンプルな題目から始めた方がよい
502 :
軟式PHP :2006/06/30(金) 09:14:02 ID:???
>>499 俺は可視性が高ければいい、必ずしもOOPをしなければならないとは思わないなぁ。
複雑・冗長で無駄な処理が多いということは、自分の中でルールをキチンと決めてプログラミングを
作ってないような気がする。
でも一度勉強してみたほうがいいかもね。あと、完成後にOOPに書き直すのは手間がかかりまくるのでやめたがいい。
>>500 ファイル名を配列化したら?
$fileList = array( "aaa" => "aaa.php",
"bbb" => "bbb.php");
if( isset( $fileList[$XXX] ) ){
include( $fileList[$XXX] );
}
>>500 include("{$XXX}.php");
>>500 おまいは何をやっとるんだ・・・
もっともプログラミングらしからぬ思考法だな・・・
505 :
489 :2006/06/30(金) 10:03:51 ID:???
>>498 ログファイルと、入室者ファイルを作ったほうが良いのでしょうか?
>>505 REMOTE_ADDR,timestamp
のログファイルを作って、タイムスタンプが5分以内なら入室中、5分越えたらログから削除、
みたいにつくりたいところだな。
(5分は、10分でも15分でもお好みに)
同一IP者が複数人いても一人と扱われるが、そんなのは知らん。
507 :
489 :2006/06/30(金) 10:22:00 ID:???
>>506 入室者ファイルは別で作ったほうが処理がしやすいのですね。
有難うございます。
$_SESSION['abc'] ←この中にはどれくらいのデータが入るのでしょうか?
509 :
nobodyさん :2006/06/30(金) 11:33:58 ID: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(); 配列で受け取ってループさせれば出来そうだと思ったのですが、 できればループは使用したくありません。。。
getFromArray($key, $data) {
書きかけで送信しちまった 動かして確認してないけど、こんな感じで再帰使えばいい 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; } };
セッションについて質問です。 セッションの中身を定期的に消さないと鯖に負担がかかると聞いたのですが、 自動的には消されないのでしょうか?
513 :
509 :2006/06/30(金) 13:28:14 ID:???
>>511 ありがとうございます。再帰で無事取得できました。
>>512 自動的に消すような設定をしているディレクトリに
セッション情報を保存するなら勝手に消される。
(だから自分の予期せぬ結果にならんこともないのだが)
つかセッション機能には一応ガーベージコレクトもあるんだから
それで処理できる範囲ぐらいは自分で後始末ぐらい汁
515 :
nobodyさん :2006/06/30(金) 15:09:11 ID:4l4GYYpW
FLASHのメールフォームにと探してて見つけたんですけど
answe.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";
?>
516 :
nobodyさん :2006/06/30(金) 15:53:37 ID:Y/YT1xaC
>>502-503 >>504 >おまいは何をやっとるんだ・・・
HTMLしか知らなかった時はページの分だけ作らねばならず大変でしたが、
>>500 でかなり楽になりました。
というのを、継続していた状態です。
今後、効率的な管理ができるようにしていきます。
存在しない「sss.php」が指定された時のことも考えます。
(switchの場合はdefaultで処理できたので)
>>516 if (!eregi ('[0-9a-zA-Z]', $str)) or die ('不正な要求ですわ');
if (file_exists ('./' . $str . '.php') or die ('Not Found');
include ('./' . $str . '.php');
PHPというかHTMLの質問です。 tableで、widthを指定しているのですが.(ドット)があると改行されません。 ドットがあっても改行させることってできないのでしょうか? スレ違いなのは十分わかってますがなにとぞよろしくお願いします。
できないっ!
ドットどころか、半角英字をスペースを空けずに入力すると改行されずにテーブルの巾がどんどん延びる。 対策は、自分で改行されない文字列長を判別し、必要な長さで改行を挿入するとかだろうね。
先頭にドットが付いてるとスペース空けても改行されないんですよね たとえばこんな感じだと.aaaは改行されずbbbは改行される <table border=1><tr> <td width="5">.aaa .aaa .aaa</td> <td width="5">bbb bbb bbb</td> </tr></table>
widthなんか指定しなければいいじゃん。
最近流れが早いね
527 :
nobodyさん :2006/06/30(金) 17:28:13 ID:Y/YT1xaC
>>502-505 >>517 >>500 です。
ご指導により、以下のようになりました。
気分的にはかなりスッキリしましたが、
実効果として
>>500 よりも処理は早くなるのでしょうか。
・$PAGE_IDと同名のファイルを作成しておき、読ませる。
・$PAGE_IDが空の時はtop.php(トップページ)を読ませる。
・$PAGE_IDに相当するファイルがない時はcaution.php(警告)を読ませる。
528 :
nobodyさん :2006/06/30(金) 17:29:18 ID:Y/YT1xaC
(
>>527 の続き)
$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を使わねばならない?
>>528 >$PAGE_IDにより選択されるファイルは、全て1つのディレクトリ(files)に入れておくことになり、整理しにくい。
$PAGE_IDの文字列にスラッシュがあっちゃだめなん?
つーかこれは何がしたいんだ?
>>528 なんか頭が固いね。固定観念?ディレクトリ一つにって決め付けちゃだめでしょ。
531 :
nobodyさん :2006/06/30(金) 18:14:17 ID:Y/YT1xaC
>>527 <?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]);
>>531 逆に面倒じゃないか?それ...
初心者がよく使いたがるんだけど。
「テクニックにおぼれない」
↑これ、次スレからテンプレに追加したいw
534 :
nobodyさん :2006/06/30(金) 18:36:24 ID:Y/YT1xaC
>>534 > test.php?$PAGE_ID=foo%2Fhoge
> しかし上記URLだと長いのでmod_rewriteを使って
こうする理由がわからねー
> 但し"%2F"を使うには、
> rawurldecodeというのを使わないとならない?
デコードしないとディレクトリを指定できないだろが。
「foo%2Fhoge.php」というファイル名になってもいいなら別だが。
つーかもっと基礎から勉強した方がいいんじゃないか?
もう寝るか。
<? $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\";"); } ?>
あらかじめ設定したフォーマットに従って出力しようと思い
>>537 のようにしてみましたが、もっとスマートな方法があるような
気がするんですがどうでしょうか。
おまいらMVCって知ってるか?
>>538 ファイル名が、1〜5固定ならば、
for ($i = 1; $i <= 5
echo "<p>$i.php - <a href=$.php title=$i.php>$i.php</a></p>";
でいいとおもうんだが
>>538 今意味がわかった。
$tp = '<p>%LINK% - <a href=%LINK% title=%LINK%>%LINK%</a></p>';
echo str_replace('%LINK', $ato, $tp);
がよい。
そんなところで evalなんか使うな。
echo str_replace('%LINK%', $ato, $tp); な
ミス。 foreach ($ato as $link) { echo str_replace('%LINK%', $link, $tp); } な
>>540-542 なるほど勉強になります。
>そんなところで evalなんか使うな。
自分もそこが気になってました。
>>545 アフォか 日本電気株式会社 に決まってるだろ
>537-538です
>>543 この方法だと変数が多い場合は全部置き換えるしかないですかね?
550 :
nobodyさん :2006/06/30(金) 21:03:30 ID:+rz/Zfiq
unlinkやchmodが使えない場合、phpからファイルを削除する方法ってありますか
>>546 sprintfのフォーマットの方がいいと思う
$format = '<a href="%s">%s</a>';
printf($format, $url, $text);
>>553 >537-538です。うまいことできました。
ありがとう。
<?
$tp = <<<__HTML
<p>%1\$s - <a href="%1\$s" title="%2\$s">%1\$s</a></p>
__HTML;
$ato = array (
"1.php" => "1.phpへ",
"2.php" => "2.phpへ",
"3.php" => "3.phpへ",
"4.php" => "4.phpへ",
"5.php" => "5.phpへ"
);
foreach ($ato as $link => $title) {
printf ($tp, $link, $title);
}
?>
>>544 名機ではあるが京セラの血が濃いPC-100を挙げるのは...
CentOS 4.3 に yum で PHP php-4.3.9-3.12 をインストールしています。 PHP Extension をインストールしたいのですが、php-config と mecab-config がない状態です。phpize は php-devel のインストールでできました。 php-config と mecab-config はどうしたらできるのでしょうか。 よろしくお願いします。
ソースから入れれば?
フォームでPOSTしてきた人の$_SERVER['REMOTE_ADDR']を取得したところ、 毎回「192.168.1.xxx」が返ってきてしまいます。(全国のいろんな人がやっても同じ) でもこれって自分(鯖)の側のネットワーク内部のIPアドレスですよね? どうして$_SERVER['REMOTE_ADDR']でこんな戻り値になっちゃうのでしょう?? ちなみに鯖はXREAです。
phpinfo
>>559 サーバー(自分自信)のリモートアドレスを取得してきている。
$REMOTE_ADDR = getenv("REMOTE_ADDR");
>>566 普通はクライアント側のIPアドレスを返す筈なのに、なんで?って話だと思うが。
まぁ、xreaはそういうものなのかも試練。
>サーバー(自分自信)のリモートアドレスを取得してきている。 嘘こくな
うそつき・・・(by 緒川たまき)
PHP+JavaScriptはここで聞いても大丈夫なのでしょうか?
572 :
571 :2006/07/01(土) 20:33:45 ID:???
すみません、どなたかお答えいただければ嬉しいです。 チャットを作っているのですが、発言/リロードを押すと下のフレームもリロードさせたいのですが どのようにすればうまく動作しますか? 上はtopFramem下はmainFrameです。 <script type="text/javascript"> <!-- function reload(){ parent.mainFrame.location.href='logpage.php'; } --> </script> <input name="Submit" type="submit" id="Submit" value="発言/更新" onclick="reload()" /> PHPで、 if($_POST['Submit'] == "発言/更新"){ 書き込み処理 } このように記述しています。 テキスト欄に入力して発言をすると、ファイルにログが書き込まれフレームは更新されず、 空白の状態でボタンを押すと更新されます。 発言したうえで更新したいのですが、どのようにすれば良いのでしょうか?
>>572 普通そういう場合はformタグのtaeget属性を下側フレームにして
書き込み処理とログ表示を一括して下側のフレームで行い、
送信押されたらフォームに入力されたテキストをJavaScriptで消すってもんじゃないの?
その書き方だと発言時は書き込み処理が終わる前にリロードしてしまう気がする。
574 :
572 :2006/07/01(土) 20:46:32 ID:???
>>573 上の書き込みしたデータを下のフレームに持ってくるのはできるのですか?
>>574 スネーク、まずはどこでもいいからその辺のフレームチャットを見てくるんだ。
あんまり変な質問をしていたら回答者が呆れて晩御飯に出かけてしまうぞ。
>>576 スネーク、問題はPHP以前のところにあるようだ。このままでは板違いになってしまうぞ。
早急にHTMLをしっかり勉強し直してPHPに関する質問に切り替えるんだ。
578 :
559 :2006/07/01(土) 21:24:54 ID:???
>>567 誰かXREAでアカウント持ってる人、実験してみてもらえませんかね??
ちなみに他の鯖(XREA以外)で同じスクリプトを走らせたところ、
当然ながら問題なくリモートアドレスを取得できました。
>>580 の追記。
https だったらプライベート IP アドレスでした。
これで納得かい?
$_SERVER["REMOTE_HOST"] は空みたい。
gethostbyaddr($_SERVER['REMOTE_ADDR']は?
$_SERVER["SERVER_ADDR"],
$_SERVER["REMOTE_ADDR"],
$_SERVER["REMOTE_HOST"],
getenv("REMOTE_ADDR"),
gethostbyaddr($_SERVER["REMOTE_ADDR"])
で
$_SERVER["REMOTE_HOST"]
以外は期待通りの動作
>>559 か使ってるサーバ固有の問題
>>584 > $_SERVER["REMOTE_HOST"]
> 以外は期待通りの動作
期待通りも何も、REMOTE_HOST は必ずしもセットされるとは限らないから
別に期待通りじゃない、とは思わない。
負荷軽減のために逆引きしてないサーバは腐るほどある。
REMOTE_HOST が未定義だったら REMOTE_ADDR を resolve するのは
ネットワークプログラミングでは基本ですが?
なんで俺が揚げ足とられてんの??
ループ処理で配列に要素を追加しているのですが、希望通りの動作をしません。 具体的には、array('key1' => 'value1', 'key2' => 'value2') という配列を作成したいのですが、 array(array('key1' => 'value1'), array('key2' => 'value2')) という配列になってしまいます。 追加処理はこんな感じです。 for ($i = 0;$i < $count;$i++) { $add[] = array("key{$i}" => "value{$i}"); } よろしくお願いします。
>>589 通過処理どおりの動作をしているようにみえるが
>>587 お前はわざとやってるのか?
add["key{$i}"] = "value{$i}";
だろうが。
$add["key{$i}"] = "value{$i}"; な
>>588 /(^|[^=;])(https?:\/\/[!#\$%&'()*+,\-.\/:;=\?@_~\w]+)/
訂正 (https?:\/\/[!#\$%&'()*+,\-.\/:;=\?@_~\w]+)
preg_replace("/(http\:\/\/[\w\.\~\-\/\?\&\=\;\#\:\%]+)/", "<a href=\"\\1\" target=\"_blank\">\\1</a>", $url)
>>596 はぁ?これくらいはできて平民なんだよ。
600 :
nobodyさん :2006/07/02(日) 00:41:34 ID:oZjla2sM
txtファイルの空行を探して削除したいのですが どうすればいいのでしょうか
ループとかでチェックしていくしかないんじゃ? 知らないけど。
>>600 正規表現で改行が2個以上連続してるのを見つけ出してジェノサイド。
文字列から@〜@でくくられている部分を探して、@〜@の「〜」の部分.gifに置き換えたいのですが どのようにすれば良いのでしょうか? @a@⇒<img src=a.gif> @phpkamo@⇒<img src=phpkamo.gif>
preg_replace('/\@([a-zA-Z0-9\-_~]*)?\@/', '<img src="$1.gif">', $str);
606 :
nobodyさん :2006/07/02(日) 01:18:43 ID:oZjla2sM
>>603 正規表現で改行2個は
ereg("^$", $var)
でよいでしょうか。
607 :
nobodyさん :2006/07/02(日) 01:22:56 ID:W09rfuPj
$_FILESでファイルのアップロード処理をしているのですが、ファイルタイプを調べてセキュリティ上危険だと 考えられるファイル(例えばCGI)の拡張子を「txt」にしたいと思います。 アップロードするファイルの種類を調べるにはどうしたら良いでしょうか? ユーザが偽装できてしまうようではセキュリティ的にマズいですし・・・ やはりアップロードファイルの拡張子を調べるのが一番なのでしょうか? それから、圧縮ファイルを展開する関数ってあります?
609 :
nobodyさん :2006/07/02(日) 01:41:16 ID:W09rfuPj
>>608 >ファイルの MIME 型。ただし、ブラウザがこの情報を提供する場合。 例えば、"image/gif" のようになります。
>この MIME 型は PHP 側ではチェックされません。
>そのため、 この値は信用できません。
これでも大丈夫かな?
>>606 $nl = "\r\n";
ereg_replace("$nl($nl)+", $nl, $text);
preg_replace("/^$nl/m", "", $text);
^$はマッチ幅ナシね。
>>609 大丈夫なのか否かってのは何を作りたいかによるから何とも言えない。
確かに、hidden パラメータとかと同じで、改竄はありうる。
しかし、そのファイルが例えば JPEG か否かをちゃんと判断するには
プログラマがそのファイルの内容・構造をチェックして判断しなければならない。
その為には、そのファイルのフォーマットの仕様・特徴(SOI APP …など)
を知っていないと判断のプログラムが書けませんが
それが出来るなら、自分でチェックすれば良い話です。
簡易に済ませたかったら system で file を呼ぶとかも考えられますけど…
612 :
nobodyさん :2006/07/02(日) 01:58:42 ID:oZjla2sM
>>610 ありがとうございます
$text = 'log.txt';
$nl = "\r\n";
for($i = 0; $i < count($line); $i++){
if( ereg_replace("$nl($nl)+", $nl, $text) ){
preg_replace("/^$nl/m", "", $text);
break;
}
}
こう作ってみたんですけど、改行抜けません
おかしい所教えてもらえませんでしょうか
あ
サンプル■1234 サンプル■1234■5678 の場合、最初の■以降の文字を消したいのですが、 preg_replace('/■?', '', $str); こうしたのですがうまくいきません。 どこが間違っているのでしょうか
>>612 preg_replace("/^$nl/m", "", $text);
↓
$text = preg_replace("/^$nl/m", "", $text);
つーか、せっかくpreg使ってるのに何でeregもつ買ってるの?
pregだけでいいんでない?
$text = file_get_contents("test.txt");
$nl = "\r\n";
$text = preg_replace("/^$nl/m", "", $text);
print($text); //確認
616 :
614 :2006/07/02(日) 02:19:55 ID:J/w8BCAt
すみません、追記です。 方向が変わってしまって^^; サンプル■1234■5678 これを、最初の■で区切ることはできますか? サンプル ■1234■5678 こうわけたいのですが
>>616 俺初心者だからかなり馬鹿っぽいやり方かもしれないけど
$sample = "サンプル■1234■5678";
$line = explode("■", $sample);
foreach($line as $key => $value)
if ($key == 0) $hoge = ($value."\n");
else $hoge .= ("■".$value);
print($hoge);
こんなんはどうかな。
>>612 もし配列で持ってるなら "" な項を捨てりゃいいだけだよ
>>616 都合のいい方使って好きなように。
$text = "サンプル■1234■5678";
list($mae, $usiro) = explode("■",$text,2);
$usiro = "■".$usiro;
echo "explode: $mae, $usiro\n";
preg_match("/^(.*?)(■.*)$/", $text, $capture);
echo "preg_match: $capture[1], $capture[2]\n";
619 :
617 :2006/07/02(日) 02:34:46 ID:???
うおやっぱ馬鹿丸出しやん・・・
>>618 参考になります!
<frameset rows="100,*" cols="*" framespacing="1" frameborder="yes" border="1"> <frame src="top.php?id=<? echo $_GET['id'];?>" name="topFrame" scrolling="Yes" id="topFrame" title="topFrame" /> <frame src="logpage.php?id=<? echo $_GET['id'];?>" name="mainFrame" id="mainFrame" title="mainFrame" /> </frameset> この場合で各フレームのURLを見たところ、?id=がなかったのですが これでは無理なのでしょうか?
621 :
620 :2006/07/02(日) 04:05:08 ID:???
ちなみに、index.php?id=1でためした場合です
PHPでの数値をJavaSfcriptで出力ってできませんか? $abs = 30; setTimeout("location.href='abc.php'",1000*<? echo $abc;?>);
>>620 それでできるよ。
他に問題があるんでしょ。
>>622 PHP は HTML を出力するに過ぎない。
その出力する HTML に変数の値が埋め込まれた JavaScript が書かれれば良いだけ。
言っている意味分かる?
626 :
622 :2006/07/02(日) 09:39:02 ID:???
>>624 つまり、一気にJavaScriptを書き出せば良いのでしょうか?
>>625 すみません、両方$abcでお願いします
627 :
622 :2006/07/02(日) 09:44:38 ID:???
とりあえず <? echo "<SCRIPT LANGUAGE=\"JavaScript\">"; echo "<!--"; echo "setTimeout(\"location.href=logpage.php?id".$id."\",1000*10)"; echo "parent.topFrame.document.form.com.value=\'\'"; echo "-->"; echo "</SCRIPT>"; ?> としてみたところ、結果は同じでした・・・ どうすれば良いのでしょうか
628 :
622 :2006/07/02(日) 09:57:28 ID:???
すみません、解決しました。
>>627 そもそも「何と同じ」で、期待していたそれと異なる結果とは何?
出力されたJavaScriptをよく見ろ
サイテー
$_SESSION['var'] = "aaa"; echo $_SESSION['var']; これって携帯でも表示される?
cookieダメならSID足したら?
$str='サーバサイド技術'; print(mb_convert_kana($str,'KV')); ↑の結果が「サーバサイド技術」のままで、全角に変換されないのですが PHPはFC5のVersion 5.1.4です。
またお前か。
>>635 文字コードを指定してやって。
print(mb_convert_kana($str,'KV','euc-jp'));
みたいに。
>637 ありがとうございます。うまくいきました。 >636 そんなこと言わずにおつきあい下さいな
636は俺と付き合ってるからダメだ
おかしいな。俺と付き合ってるはずなんだが・・・?
まてまて、俺だ
643 :
636 :2006/07/02(日) 15:19:45 ID:???
あらら、3つ又がばれちゃったみたいね。
>>642 そのサイトにUTF-8なら問題ないと書かれているのに何故そうしない?
下手にUTF使ったら別の状況で問題が発生するだけ
646 :
nobodyさん :2006/07/02(日) 17:31:55 ID:YHlCRRoc
掲示板などのデータを楽をしてシリアライズ保存しまう人って多いいのでしょうか? シリアライズは便利で高速そうですが一度に全ての変数をメモリに乗せてしまう事になるなど 多少のデメリットもあるようですが、みなさんはどう考えられてますか?
>>646 多いかどうかはわからないけどシリアライズはかなり便利。
俺もよく使ってる。
掲示板のログ全部とかはさすがに入れないけども
要は工夫次第。
テキストファイルから任意の行だけ読み込む事はできますか? ファイルポインタとかをどのように指定して良いのか分かりません。
何行目でやれば?
file関数で配列にぶち込んで行指定
レスありがとうございます。
>>649 すいません。よく分かりません。orz
>>650 負荷が気になるのですが、そうするのが一般的なのでしょうか。
データ量にもよるし。 任意ってのが例えばランダムで選択されるのか ある文字列がある場合なのか どのような条件かにもよると思う。
>>651 ていうか
具体的に何をやりたいのか
いっちゃいなよYOU!
具体的に、特定行を読みたいんだろうよ。
一般的かどうかは分からんが、 fopenして、任意の行までスキップすればいいんじゃない? てか、データの検索でシコシコやりたいならDB使うのが定石だとおもうよ。
656 :
nobodyさん :2006/07/02(日) 20:48:11 ID:YHlCRRoc
多次元配列の次元数?を調べる方法はありますでしょうか? $a[1][2] ← これなら2個とかです
count($a[1])
もしかしたら、$a[1][2][3]なら3とか深度の事?だったらない。自分で関数作るしか。
多分ないな。再帰とかで調べるしか無いと思う。そもそも array(1, 2, array(3, array(4, 5)), array(6), 7) は3次元配列とは呼べないと思うし
>>658 深度というのですね。ありがとうございます。
再帰的関数?を狙ってこんな事な感じで試してみるのですが深度を上手く拾う事が出来ません。
$dに深度を入れようとしているのですが合わないのです。
function box($ary,$d = 0){
foreach(array_keys($ary) as $t){
if (is_array($ary[$t])) box($ary[$t],++$d);
}
}
660です $dに加算する場所が悪かった事がわかりました(−−;
そうですか(−−;
ローカルサーバーでは正常に動いたのですが、 サーバーに上げると変数に入れた文字が文字化けしてしまいます。 ちなみにland.toなんですが。。。 これはサーバーの方で設定しなければ直らないのでしょうか?
EUC
「あああ」⇒「、「、「、「」
>>663 land.toのサポートの過去ログを探してみな。
667 :
nobodyさん :2006/07/03(月) 10:58:30 ID:TaHjD2Gv
PHPからHTMLに出力する際に全ての改行を除いてしまう (つまり、出力後のページのソースを見ると改行がない)ようにするには、 どうすればよろしいですか。
たまには改行コードがCR+LFじゃない環境のことも思い出してあげてください
>>667 trim ($str, "\r\n")
あぁ、\rと\nを削除したら良いよ そういうつもりで書いたのですが言葉足りなかったですね
str_replaceで、 \r\n \r \n の順に ""に置き換えればいいとおもうよ。
>>672 改行コードを<br>に置き換えるんじゃなくて削除するだけなら\rと\nの二回で済むと思われる。
preg_replace("/\r\n|\n|\r/", "", $text);
676 :
nobodyさん :2006/07/03(月) 13:06:15 ID:TaHjD2Gv
改行削除は秀丸の置換でもできるので、 PHPでもそんな感じで何とかなるとは思うのですが、 問題はHTMLを含めて改行を削除するということなのです。 現状は、よくある「HTMLの中にPHPを書いている」という状況なのですが、 この場合のHTMLの内容さえも、改行を除いて出す必要があります。 通常の出力内容を$html_beforeとし、 $html_after = 改行処理($html_before)でとして $html_afterを出力すれば良いのですが、 そう簡単にもいかないような。 要は、出力内容を$html_beforeに格納する方法ですね。
設定にもよるけど output_buffering 使えば良いかと
680 :
nobodyさん :2006/07/03(月) 13:45:12 ID:TaHjD2Gv
小数点を含むの数値を比較するときはどうするのがスマートなんでしょう? 例) <?php $a = 1.8; $b = 0.15 * 12.0; echo ($a == $b ? "equivalence" : "not equivalence"); ?> 桁数合わせて(キャストして)文字列として比較する? 有効桁以下を切り落とし、整数化して比較する?
誰が浮動少数点のまま比較すると言ったよ池沼が。
誰が浮動少数点のままでは比較しないと言ったよ池沼が。
池沼 ←これなんて読むんだよ知障が。
>>686 スレ違いだけど一応質問には答えとこう
「ちしょう」だよ
>>686 分からないで書いていたのかw
ほんとレベル下がったなこのスレ
689 :
nobodyさん :2006/07/03(月) 16:14:55 ID:33zQh45+
有効桁って書いただろうよ。 罵倒するだけなら失せろ。 お前には聞いてねーよ。絡んでくるな。
ネタだろwww
まあ「これなんて読むんだよ知障が」って言ってるし、ネタなんだろうな。
>>681 質問の意図がわからないから答えようがない
そしてオレは浮動小数点数を比較したことがない
有効桁以下を切り落として整数化したら両方1になって誤差がありすぎると思うんだけど、それはそれで問題ない処理なわけ?
自己フォロー乙
こんにちは。 PHPで、方程式を提示すればそれをグラフにしてくれるようなモ・・なんとかってありますか? たとえば、 y = 2x + 1 とか、 y = 2(x+3)^2 - 5 とかいう方程式のグラフを書いてくれる感じのやつです。
>>692 キミはアホですか。
有効桁を切り落として整数化=有効桁の分だけ100なり1000なりを掛け算して整数化って意味でしょ。
その程度の意図も読めないなら回答なんてしようと思うなよ〜
で、大小の判定まではともかく、有効桁内での等しいかどうかの比較は整数化が必須じゃないかな。
文字列にしちゃうと12.1と110.1みたいのがまともに比較できなくなるから基本は整数化じゃない?
$file=fopen('guest.dat','a'); このように書いても、サーバーにguest.datが作成されません。 find / -name "guest.dat" しても引っかかりませんでした。(sudoしています) そこで $file=fopen('/guest.dat','a'); としたところ、/にguest.datが作成されました。 一番上のようにディレクトリを指定しない場合はファイルは作成されないのでしょうか?
698 :
697 :2006/07/03(月) 19:23:16 ID:???
サーバはFedoraCore5 PHP5.1.4です。
ログファイルの区切り文字って何がいいかな? 「,」はエンドユーザが入力したらマズいし、「<>」はだとちょっと面倒? おまいらはどーしてるん?
<>
>>701 「<>」をエンドユーザが入力したらどうするんだよ?
それは置換するから大丈夫って言うなら「,」だって同じことなんじゃないかと。
>>703 <> は <> にすればいいし、 , は ? だっけ?忘れた。
個人的な好みじゃないか?
<> は <> にすればいいし、 , は , だっけ?忘れた。 個人的な好みじゃないか?
>>704 テキストをデリミタにすると、結局はエンドユーザが入力し得るものなんだから
どうでも好きにすればいいんじゃないってこと。
自分なら \t かバイナリにするけどね。\t でも入力し得るから注意ね。
>699 ディレクトリのパーミッションを777にしたらできました!! ありがとうございます! >700 実行時のパスが分かるんですね。これも丁度知りたかった事です。 ありがとうございます!
>>707 えぇ!?
/ にファイルを作成出来ていることから、パーミッションの問題じゃないと思っていたんだが…
>>701 DB使えば?
ファイルにこだわるならTABとか改ページとかのコントロールコード系とか。
>>705 メールデータとかのログも&lt;なんて変換かけてんの?
あ、掲示板くらいしか作ったことないしょぼプログラマでしたか、失礼。
くだらない煽りなんてしてないで、好きな文字に変えればいいじゃないか。
>>710 なんでそんな攻撃的な物言いするの?
PHP+PostgreSQLのシステムを官公庁に納めたことあるよ。
>>709 じゃあ区切り文字は「\t」にして、ユーザが入力する TAB は、
trim($str, "\t")
で桶かな。
$moji = "abc"; という変数の「後ろ」に文字列を追加するには「.=」だから簡単です。 $moji .= "def"; //この時点で$mojiには「abcdef」が入っている) でも、変数の「先頭」に文字列を追加するのに簡単な方法ってありますでしょうか? つまり$mojiに「defabc」と入ってる状態にしたいのですが・・・。 今はわざわざ、 $moji2 = "def"; $moji = $moji2.$moji; などと連結しています。
>>712 2ちゃんでキモヲタの捨てゼリフにいちいちマジレスカコワルイ。
キモヲタは放っておけ。
>>715 $moji = "def" . $moji;
じゃあかんの?
>708 phpファイルの置いているフォルダのパーミッションを775から 777にしたらファイルが作成できました。 /のパーミッションも調べてみようとしましたがどうやって見るのか 分からないので、つっ込んだことはわからないままですが・・・ ともあれ疑問は解決できました。 これからもちょくちょく質問すると思うのでそのときはお手ほどき ください。
>>696 遅くなったけどありがとう。
有効桁がそれ程大きくないので整数化がよさそうですね。
>>692 例が適切ではなかったも。スマソ
$moji .= "def"; って $moji = $moji . "def"; じゃないの?
php初めて一年目くらい。ひとまず、自分で考えられる程度のものは一通り作れるようになった(動いてるというだけですが)くらいのレベルです。 一般的な話を聞きたいのですが html部分はごっそりヒアドキュメントにして、それより前に分岐処理とか自作関数で生成した変数を <input type='text' name='hoge' value='{$hoge}'> ってな感じで埋め込んでる感じなんですが ヒアドキュメントにしないで、 <input type='text' name='hoge' value='<?php echo $hoge; ?>'> って書き方とどっちが正しいのでしょうか? 後者のほうの書き方は流れは分かりやすいけど、なんだかごちゃごちゃしてどうも好きになれないんですが。
<?=$hoge?>
>>726 両方試して処理時間や負荷の差を教えてくれたらとってもうれしい。
730 :
726 :2006/07/04(火) 02:00:44 ID:???
>>727 あ、省略形の書き方ですね。
>>729 1000くらいとかループさせてみたんですが、少なくともブラウザのレンダリングされるという体感的な時間は変わらないみたいです。
前者の方が見やすいのは間違いないとは思うんだけど。
俺は外部に書き出してincludeしてるよ そっちのほうが見やすい
チャットで退室するんじゃなくって、ブラウザを閉じるとサーバーに変数が送られるようにするにはどうすればいいですか?
JSでも使っとけ
<?php echo $hoge; ?> <? echo $hoge; ?> <?=$hoge?> これの差を教えてください。
お前の心に聞いてみろ!
返事がありませんでした。教えてください。 困ってるんです!!(><)
"あいうえお" から "あ" があるとTRUE これを、"あいうえお" から "あ"または"う" があるとTRUE という風にはできませんか?
>>737 > "あいうえお" から "あ" があるとTRUE
まずこれをどういう風に書いてるのか示せ。話はそれからだ。
>>739 $str = "あいうえお";
if(strstr($str,"あ")){
echo "TRUE";
}
$str = "あいうえお"; if(strstr($str,"あ")||strstr($str,"う")){ echo "TRUE"; }
>>741 arrayを使った感じでできないのでしょうか
まず条件を全て提示しやがれですわ
発言文字から、 array(バカアホ死ねだの悪口) の文字が入っている場合にTRUEを返したい
>>734 下2つは設定によっては使えない
・・・だけだな。動作は同じだが
>>744 あぼーんされてて見えないからレスアンカーしてみる
あまり変な事書くなよ
これで単なる煽りとかだったら凹むぜ
>>720 質問者はそんなこと承知の上で聞いていると思うが?
わざわざ蒸し返すな。
お前のレスはなんの解決にも結びつかないんだから。
748 :
746 :2006/07/04(火) 05:22:30 ID:???
('A`)アサッパラカラコレカヨ
まだぜんぜん夜中じゃんw海外在住ですか?(笑)
>>745 ∧_∧
( ><) < ありがとう
‐=≡t─‐/ヽ、_つ) __s)
‐=≡(ニニ( ) /\\-.\
‐=≡( (ニ:( /悲| (O)T
‐=≡ヽ、__,ノ ̄ ヽ、_,ノ
ちなみにマニュアルで言うとどのへんでしょうか?
>>742 $needle = array("あ", "う");
foreach($needle as $nd) {
if(strpos($str, $nd) !== FALSE) {
echo "TRUE";
}
}
ってことかいな?
>>752 またちょっとだけ賢くなりました。
, - ,----、
(U( )
| |∨T∨
(__)_)
756 :
nobodyさん :2006/07/04(火) 08:45:47 ID:C7rNd6pP
フォームのアクションをgetにすると $_GET変数に値が入りますが $_GETの値をURLに戻す関数ってありますか?
>>756 v5以降でならある。あとはマニュアル嫁
foreachって使い方や使う場面がよく分からないので、 今まで一度も使ったこと無い・・・・orz 使わなくても困ったことないし・・・ でももしかしたら知らないうちに無駄な苦労してるのかも。。。
漏れは逆に何でもforeachで回しちゃうな 使用頻度で言えば、foreach>while>for
Perlの時は foreach を愛用してたけど、 PHPでは for もそこそこ使ってるな。 たとえば Perlでは、 foreach (0..5){ echo $_; } という感じのパターンは便利だった。
使い方覚えるとforeachは凄い便利。 多次元配列なんかの場合だとかなりスッキリするし。 俺はループ処理はforeachかwhile。 forは殆ど使わなくなった。
>>763 同じく。
配列の初期化とかもarray_pad使うようになってforを使うことは
めったに無くなった。
PHP4の場合、配列を中身を書き換えるようなことをしようとすると foreach だとめんどうなので for を使うね
>>765 ん?久しくPHP4使ってないし環境無いんで試せないけど
foreach ($hoge as $key => $vl) {
$hoge[$key] = $vl * 100;
}
見たいな書き方できないんだっけ?
事前にとっておいた別の配列とあわせてごにょごにょするときは$iが必要になるけどforeachの中でforを使ってやると、入れ子のsqlをたったの2回で実現出来る。 最近のお気に入りの技
>>766 その書き方で問題ない
foreach ($hoge as $vl) {
$vl = $vl * 100;
}
これは無理だけど
ところで、藻前ら、webアプリ作る時特に指定がない場合はフロントコントローラー型で作りますか?ばらばらで作りますか?
>>768 うーん個人的には後々混乱しそうだから、そんな書き方できなくてもいいやw
for ($i = 1; $i < 50; $i++){ $list[$i] = $int * $i + 3; } みたいなときは for がいいと思うよ。
>>769 今採用しているフレームワークはフロントコントローラ型ですな。
foreachは全く使わない、 whileも限られた場面だけ、 95%以上をforで処理してる俺って、いったい・・・・ だってforeach、使い方が理解できないんだもん。。。
>>773 PHPではforeachが非常に高機能だから使い分けが出来ると強い。
>>774 $hoge as $key =>
↑もうこの時点で意味が分からないorz
これをどのように、どんな場面で便利に使えるのか、サッパリ分からない・・・
俺ってアホだ。。。
foreach(配列 as 値の一時変数) foreach(配列 as 添え字の一時変数 => 値の一時変数)
日付のデータを整形しようとしてこうしたんだが、Use of undefined constant mday - assumed のエラーがどしても消えん、変数の取り扱い方が悪い? $today = getdate(); $str_mon = strlen("$today[mon]"); $str_day = strlen("$today[mday]"); if($str_mon == 1) { $today[mon] = "0"."$today[mon]";}; if($str_day == 1) { $today[mday] = "0"."$today[mday]";};
>>777 $today[mon] → $today['mon']
つか、変数だけなのにダブルクォートで括るなよ。気持ち悪いし無駄。
>>781 THX 涼しくなしました!
$today = getdate();
$str_mon = strlen($today['mon']);
$str_day = strlen($today['mday']);
if($str_mon == 1) { $today['mon'] = "0".$today['mon'];};
if($str_day == 1) { $today['mday'] = "0".$today['mday'];};
>>784 str_padという専用関数があったり
>>785 へぇ、こんな関数あったんだ
私はSQL渡しする時にsprintfばかり使ってたから気づかなかった-;
どういうシチュエーションで利用するのかわからんが、単に月とか日付が 欲しいだけならdateでいいような・・・
>>784 PHPらしくなってまいりました。サンクス!
$today['mon'] = sprintf("0", $today['mon']);
>>785 ハァハァ...!
$today['mon'] = str_pad($today['mon'], 2, 0, STR_PAD_LEFT);
>>786 日付の表示を "20060704" とかにして既にファイル内にある日付と比較したいんす
現在の時刻を?だったら、 $date = date("Ymd"); でおk。
substr("00."$todat['mon"], -1, 2); というのがすきだった。 でも str_pad はまさにそのための関数だからそれがあるならそれがいいね。
まじですか! でも勉強になったので皆さん ありがとうでした!
>>789 たしかに。
m :月。数字。先頭にゼロをつける。
うはリロード忘れた・・
796 :
nobodyさん :2006/07/04(火) 15:01:12 ID:BWAomZFI
掲示板を作ったのですが、英語の荒らしが頻繁に来て困ります。 (自動で書き込んでいるのでしょうが) そこで、よくあるような、画像中の文字を正しく入力しないと投稿できなくしたいのですが、 それに関し、役に立ちそうなサイトはございませんか。 検索で調べようにも、どのようなキーワードで調べればよいか...
つGD 俺はユーザの手間増やすのは抵抗あるから、海外からのスパムは もっと別の方法取ってるよ。 あと偶然かもしれないが、俺の知り合いがブログで「〜を作る」とか 宣言した後、それに関連する質問がこのスレに投げかけられるんだよなぁ。
英語だけなら[\x80-\xff]があるかどうかで撲滅できね?
>>796 つ PHP-usersに入会
最近そんな話題が出てた。
使うのに手間が増えるので掲示板にそういう認証を用いるのはどうかと思うけどね やはり入力文字で弾くのが良いかも
>>796 名前タイトルメッセージで、
mb_strlen == strlen
なら投稿をはじく
>>796 リファラをチェックして本来の投稿フォームからでなければ弾く。
803 :
796 :2006/07/04(火) 15:58:59 ID:BWAomZFI
>>797 >>800 認証のようなことは、確かにしたくはありません。
もちろん、今まで何も手を打たなかったわけではなく、
NGワード(COOLとかNICEとか)を設定して、それがあればerror()で止めていたのですが、
このところ毎日20件以上も来るようになり、毎回投稿内容が異なるので、NGワードも無力化してしまいました。
>>802 IPは当然その度に異なるので弾けませんし、リファラも世紀のものを引き下げてくることが大半です。
>>803 例えば、JavaScriptでフォームの一部を出力するようにすれば大分はじけると思うけど?
画像認証はダルイからほんとおすすめできない。
805 :
801 :2006/07/04(火) 16:52:19 ID:???
ちなみに漏れのサイトは、この方法で英語のURL書きまくった書き込みはピタリとなくなった。 韓国系?や、日本語入ったのはだめだけどな。
なるほど。 ctype_alnumでやってたけど,そっちの方が簡単っぽいな。
807 :
nobodyさん :2006/07/04(火) 17:42:10 ID:pNwfONld
php初心者なんですけど、くだらねぇ質問ですが、 phpはhtmlベースにかいて、<?php ?>で囲みまくるのか、 <?php ?>の中でechoとかprint使いまくって、html出力するのか どっちが書きやすいですか?
じゃーどっちが見やすいですか?
>>809 周りの人間10人にアンケートを取ったところ奇麗に5:5となりますた。
とでも答えれば満足?
どういう書き方が良いかなんて書き手の趣味にもスクリプトの内容にもよるんだから、
自分の主観で見やすいと思った書き方で好きに書けばいいじゃん。
ってか、テンプレートエンジン使え
>>811 テンプレートエンジンですか。調べてみます。
ありがとうございます。
PHPとCronでMySQLのデータベースのバックアップを丸ごとやりたいんですが バックアップの部分をどうやって書いたらいいかわかりません お願いします
>>814 MySQL Administratorでも使っとけ
>>815 phpでは無理なんですかね?
そして、どのスレならOKなんですか?
名前忘れてました お世話になります
>>817 Cronって言ってる時点で犬とかでしょ
PHPでも無理ではないが結局はシェル投げた方が早い
>>817 *で全部拾ってフィールド名とテーブル定義拾って
INSERT文にするなりすればいいのよ。
とりあえずmysqlの標準関数全部見たよね???
>>817 MySQLスレ。
MySQLから提供されてるツールを利用するのを、俺も薦める。
MyISAMだけならデータベース"ファイル"をそのまま
コピーしておくだけというのも結構良いぞ。
822 :
nobodyさん :2006/07/04(火) 21:14:44 ID:n70oEdEe
form actionで、phpのfunctionを指定することはできますか?
意味がわからん
825 :
nobodyさん :2006/07/04(火) 21:21:00 ID:n70oEdEe
form action="hoge.php" はできます。 hoge.php内のfunction varがあるとして form action="hoge.php var()"みたいにできないかなと思いまして。
$str = preg_replace("/(<(\w+)[^>]*>)([^<]*)/","\\1\\3</\\2>",$str); タグの閉じ忘れをやろうとしているのですが これ以外にスマートな方法はありますでしょうか? また、<!--の閉じ忘れはどうすればよいでしょうか?
>>825 hiddenなりでパラメータ渡して、hoge.phpの中でif文使って該当の関数を呼び出す。
829 :
nobodyさん :2006/07/04(火) 23:40:50 ID:9/r1waWb
ブラウザで、 ボタン1を押したら aaaa.txt ボタン2を押したら bbbb.bmp ボタン3を押したら aaaa.pdf を印刷するような事をしたいんですが、どうするのが妥当でしょうか。 HTMLだけじゃ無理ですよね?PHPでこーいうのできますか?
YYYY/MM/DDの形式で入力された日付が現在と比べて、 現在か過去か未来かを判定するにはどうしたらいいのでしょうか。
>>829 サーバー、プリンタが手元にあるイントラネットなら印刷用のtmpファイルを作って、
system("lpr tmpファイル");等として、バッチ的に出すのが手かと。
>>830 if(date("Y/m/d") > 'YYYY/MM/DD'){
過去
「\t\t\t\thogehoge\t\t\thogehoge\t\t\t」 となっているテキストの重複タブ部分をひとつの_に置換したいのですが、 $hoge = $ereg_replace("\t","_",$hoge) だと、「___hogehoge__hogehoge___」となってしまいます。 「_hogehoge_hogehoge_」にするにはどうすればいいのでしょうか?
当たり前のことを書いていました……。 $hoge = $ereg_replace("\t+","_",$hoge) でもだめです。
>>834 $hoge = preg_replace('/\t+/', '_', $hoge);
因みにスレ違いな。次からは正規表現スレで。
837 :
826 :2006/07/05(水) 00:39:11 ID:???
>>837 それ以前の問題で、その方法は全くお勧めできない。
HTMLタグを許可するなら予めhtmlspecialcharsをかけてから許可するタグ・属性だけを元に戻すのが最善。
管理者専用であってもCSRFの可能性があるから全タグの無条件許可は止めとけ。
839 :
834 :2006/07/05(水) 00:45:51 ID:???
>>836 ありがとうございます。実際には \t が 10-20 個ほどついているテキストだったのですが、
数は減ったもののすべて置換はできませんでした。正規表現板に行ってきます。
$hoge = implode('\t', explode('\t', $hoge)) という手法はどうだろう。
841 :
830 :2006/07/05(水) 00:56:17 ID:???
>>832 >>833 最初YYYY/MM/DDの/を除いた後に比較しようと思ったのですが、
どうも煩雑になってしまったのでして。
ありがとうございます。
pregで\t+はどうよ?
PHP4.4.2で
$contents = file_get_contents("
http://www.yahoo.co.jp/ ");
print $contents;
てやると強制終了しちゃうんですが、なんか設定がおかしいんでしょうか?
4.3.9だと問題ないのに…
散々既出
846 :
844 :2006/07/05(水) 01:42:02 ID:???
そうでしたか… 一年ぶりにphpさわったんで全然事情を知りませんでした。 どうも失礼しました。
USE hoge; -- -------------------------------------------------------- -- -- テーブルの構造 `hoge_hoge` -- という内容をsql.txt に書き込んで、 $sql = file_get_contents("sql.txt"); mysql_query($sql, $conn); すると以下のエラーが出ます、 phpmyadminなんかでこのsql文打っても問題ないのに 何が原因でしょうか? mysql_escape_string($sql)とか色々やってみたけど だめぽです。 数時間苦しんでます。へるぷみー You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '; -- -----------------------------------------------------
>>847 SQL文の末尾に余計な空白か改行が入ってるんじゃないかな。
MySQLの古いバージョンだとエラーになるんだよね、それ。
>>849 の自己フォロー
エラーメッセージに sql.txt の最初の数行が表示されてましたね。
じゃあ、2 だね。
851 :
nobodyさん :2006/07/05(水) 03:46:59 ID:pohb5aTE
質問させて下さい。 PHP5.1.4 WindowsXPsp2 apache2.2 と言う構成で運用しています。 PHPの構文についての質問なのですが、 大ループのような言う構文はあるのでしょうか。 Perlでは下記の構文です。 ROOP: { 〜 〜 } 私は「大ループ」と記憶しているのですが正式な名前が分からず PHPマニュアルからもgoogleからも見つけることが出来ませんでした。 お力添えして頂けませんでしょうか。
>>847 PHPから実行するときはuse hogeの部分は事前にmysql_select_db("hoge")じゃないの?
そんなんmysql_queryで発行できないんじゃないか?
>>851 制御構造での「ラベル」かな。PHP ではないと思うけど
ネスとしたループ構造を抜けるためとかに使いたいなら
break に引数を付ければ実現できますよ。
ちなみに、ループは LOOP ね。
>>851 Perlはとりあえず置いといて、それがどういう動きをする構文なのか示した方がいいよ。
ちなみにPerlのそれは構文じゃなくて、ラベル+ブロックの組み合わせだと思う。
多重のループブロックの1番上に戻ったり抜けたりしたい場合、PHPではbreak 3;みたいに
ネスト数を指定したbreakやcontinueを使うようになってる。
855 :
851 :2006/07/05(水) 04:49:55 ID:???
レス有り難う御座います。
>>853 ラベルと言うんですね、初めて知りました。LOOPのご指摘有り難うございます。
恥ずかシィ。
>>854 目的は2通りありまして、どちらも通常のループ制御用途ではないのです。
1:見易くする為(セパレータやインデックス的用途)
メールフォームの入力データ妥当性チェックを例にしますと、
ルーチン:送信者名妥当性チェック
ルーチン:メールアドレス妥当性チェック
ルーチン:本文妥当性チェック
etc
と書きます。
ここで幾らサブファンクションに細かくわけても、ものによっては
if else 等の構文が複数入って大きなルーチンになるとゴチャゴチャします。
このような場合に、ラベルを使って、ココからココまでは、何のブロックか
と言うことを明示的に解りやすく書きたいのです。
コメント文は各構文の補足説明として使いたいと思っています。
856 :
851 :2006/07/05(水) 04:50:30 ID:???
連書き失礼します。 2:指定箇所まで処理を飛ばす。 if 〜 if 〜 if 〜 ルーチンA 1番目のifで真なら2番目以降は飛ばして ルーチンAの行以降を読み込む。 if () { if () { if () { } } } このようにしても実現できますが可読性を 損ねてしまいますのでラベルを使えば解決できると考えました。
>>856 こんな風に書けば多少は見やすくなるかな?
try
{
// 送信者名妥当性チェック
if ($you == $hage) {
throw new exception ($hage);
}
// メールアドレス妥当性チェック
if ($omae == $hage) {
throw new exception ($hage);
}
// 本文妥当性チェック
if ($anata == $hage) {
throw new exception ($hage);
}
/* ルーチンA */
}
catch
{
/* エラー時の処理 */
}
phpmyadminでローマ数字(T・U)などを含む値をインポートすると ?に文字化けしてしまうのですが、どうすれば回避できますか? dumpファイルやmysql、phpmyadminの文字コードは全てUTF-8に統一しているのですが。
860 :
847 :2006/07/05(水) 10:58:49 ID:???
>>849 おっしゃるとおりっぽいですね。
となると解決策は、mysql_queryを行数文発行する、などが
あると思いますが、さすがにこれは厳しいです
phpからある程度のsqlを実行させる場合によい方法はないでしょうか?
>>860 > となると解決策は、mysql_queryを行数文発行する、などが
> あると思いますが、さすがにこれは厳しいです
なんで?
> phpからある程度のsqlを実行させる場合によい方法はないでしょうか?
system
PHPのCGIとPHPのApacheモジュールの違いって何ですか?
>>862 ネットスケープナビゲーターとインタネットエクスプローラーの違い
>>860 ループで回せばいいだけだろ
while($sql=fgets($fp)
{
mysql_query($sql, $conn);
}
>>862 ApacheがPHPのスクリプトを実行するプロセスを起動して、その結果を受けって
処理する、というのと
Apache自身がPHPのスクリプトを読み込んで実行するという違い
用済みのセッションについて教えてください。 session_start(); $name = $_SESSION['name']; // ここで用済み if (isset($_COOKIE[session_name()])) { // マニュアルから拝借 setcookie(session_name(), '', time()-86400, '/'); } session_unset(); session_destroy(); session_write_close(); // この後もいろいろ続くので こんな感じでさっぱりできますでしょうか
デストローイだとゴミが残るんだよね
869 :
860 :2006/07/05(水) 14:02:44 ID:???
>>864 その場合、改行を意識的に指定したSQL文でないと厳しくないですか?
(1行毎に内容が完結するSQL文を準備しなければならない)
system関数以外でよい方法はないでしょうか?
869は釣りだと思うんですが・・・w
871 :
867 :2006/07/05(水) 14:29:29 ID:???
2ch系掲示板サイトを運営してるんですが、 各板の上位5件のスレッドのリンクを生成、出力 というPHPを作りたいんですが、どうすれば良いでしょうか? PHP ファイル 取得 リンク生成 等思いつく範囲の単語を入れてグーグルで調べてみましたが 答えは見つかりません
873 :
867 :2006/07/05(水) 17:13:30 ID:???
>872 2chでいうsubbback.htmlから5行読んだら?
PHPとApacheを一通りインストールして #!D:\php\php.exe <?php echo("test"); ?> が成功して、そのあとファイルを書き換えたら 急に動かずダウンロードをするようになった。 仕方ないからもう一度↑の内容に戻したら以下ずっと 実行せずにDLをするようになった。 どうやったら実行するようになりますか?
エスパーさん。お呼びですよ。
>>867 無駄な行が多いな。以下で十分だぞ。
ちなみに
>>868 の情報はウソ。もしゴミが残るというなら、具体的に実例を見せてみろ。
session_start();
$_SESSION = array();
session_unset();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
SW板から誘導されました
subject.txt → 特定スレの抽出 → datを数時間おきに取得
というような2ちゃんのdatを自動的に取得してくれる
過去ログ倉庫をブラウザではなくWeb上でやりたいんですが
スクリプトはありますでしょうか?もしくはヒントを下さい
特定スレの抽出は以下のようなスクリプトで出来ました
datを数時間おきに取得という部分で悩んでおります
<?
$fp=@fopen("
http://鯖/板/subject.txt ","r") or die("error");
$lines = file("
http://鯖/板/subject.txt ");
for ($i=0; $i<count($lines); $i++) {
if(stristr($lines[$i],"特定スレのスレタイ")){
list ($dat, $subject) = explode (".dat<>", $lines[$i]);
print "<a href=\"
http://鯖/test/read.cgi/板/$dat/l50\ " target=\"_blank\">$subject</a><br>";
}}
fclose($fp);
?>
>>879 ヒント 数時間に一度だけ回るアクセスカウンター
>>876 ダウンロードになるのはMIMEタイプが間違ってる可能性が高い。
php.iniの設定や置き場所は大丈夫?
ちゃんとしててそうなるなら
header('Content-Type: text/html; charset=Shift_JIS');
とか実行してみるとか
>>880 dat取得のヒントも頂けないでしょうか
884 :
867 :2006/07/05(水) 20:19:29 ID:???
>>878 ファイルが残るって意味だと思う。
>871参照
ところで
$_SESSION = array();
session_unset();
これは等価じゃないんですか?
>>884 空のファイルが残るくらいなら、別に問題は何もないよね。
PHPって何ですか?教えてください!
以下のような感じで$this->aに値を追加したいのですが、参照は出来ても書き込む事が できません。どうしたら良いのでしょうか?。 class abc{ var $a; function abc(){ $p =& $this->a; return $p; } function main(){ $p = $this->abc(); $p[] = 1; ← こんな感じで$this->aに値を追加したい } }
$p[] = 1; というのが非常に意味不明。 $p がクラス abc であるならば、 $p->a = 1; みたいな形になるのでは?
しかも、 function main()に、 $thisがあるのも意味不明だ
>>890 function main() はメンバ関数
>>888 メンバ変数に直接値を代入するのはあまりオススメしない
895 :
869 :2006/07/05(水) 21:30:03 ID:???
>>875 サンクス、それ使って実際のsql.txtの半分くらいは実行できました。
しかし、「{」が含まれる行でエラーが発生しました。
エスケープしてもエラーは変わらず、です。
あと一歩、どうかお助けを
896 :
888 :2006/07/05(水) 21:31:04 ID:???
・・・・・・・・・・まあいいや('A`)
>>895 エラーになる SQL 文と、エラーの内容は?
参照について質問なのですが、PHP4や5で違いってあるでしょうか? なんだかPHP4だと参照が崩れて、5だとうまくいくような・・・ ※長くてすみません。 class E { var $keyName; var $value = ""; function E( $keyName ) { $this->keyName = $keyName; } }// ↑要素のクラス class C { var $array; function C(){ $this->array = array(); } function getE( $code ) { return $this->array["$code"]; } function setE( $e ) { $this->array[$e->keyName] = $e; } }// ↑要素を集めるクラス $e = new E( "test" ); $c = new C(); $c->setE( $e ); // 要素を収集する $e->value = "hello"; // オリジナル要素の値変更 $test = $c->getE( "test" ); if( $test->value == "hello" ) // 参照先の値を確認 // ここで参照しない場合がありました。 // 設定や何か環境でしょうか。アドバイスなどありましたら、お願いします。
>>899 むしろ、PHP4で動いたことがあったことが不思議だ
>>899 PHP4の詳しい実装はおいておくとして
PHP4では基本的に、引数はすべて値渡しだよ
だから、
function setE( $e ) {
$this->array[$e->keyName] = $e;
}
で、セットされたものと $e は違う内容になると考えて問題ない
なので、いくら
$e->value = "hello";
ってやっても、C のメンバ変数の中身は変化しない
902 :
nobodyさん :2006/07/05(水) 22:47:19 ID:Am3fYGCA
PHP4で動かそうと思ったら、こうだろうな class C { var $array; function C() { $this->array = array(); } function &getE( $code ) { return $this->array["$code"]; } function setE( &$e ) { $this->array[$e->keyName] =& $e; } }// ↑要素を集めるクラス
>>900-903 ありがとうございます。PHP5からはじめまして
PHP5からオブジェクト指向的な改定が入ったのは知っていたのですが、
PHP4でもクラスなどが存在していた為、当然参照だろうと考えており、
環境か何かが原因なのかな、コードミスかなといろいろ悩んでしまいました。
本当に助かりました。ありがとう。
ちょっと怖いので値渡し前提でやっていこうと思います。
リンク遷移ではセッションの値を渡すことは出来ないのでしょうか? リンクだとどうしても上手くいかないので無理やりクエリに値を付けているのですが、 もっとうまいやり方がないものかと思いまして。
いや、まったく問題ないはずだ
初歩的な質問すみません。 function()を使うのには何か設定が必要なのでしょうか? Warning: array_reverse() [function.array-reverse]: The argument should be an array in E:\Web\Chat2\chat\function.php on line 12 Warning: array_reverse() [function.array-reverse]: The argument should be an array in E:\Web\Chat2\chat\function.php on line 13 Warning: array_reverse() [function.array-reverse]: The argument should be an array in E:\Web\Chat2\chat\function.php on line 43 Warning: flock() expects parameter 1 to be resource, boolean given in E:\Web\Chat2\chat\function.php on line 46 Warning: fputs(): supplied argument is not a valid stream resource in E:\Web\Chat2\chat\function.php on line 53 Warning: flock() expects parameter 1 to be resource, boolean given in E:\Web\Chat2\chat\function.php on line 54 Warning: fclose(): supplied argument is not a valid stream resource in E:\Web\Chat2\chat\function.php on line 55 など、エラーが出すぎて困っています。
910 :
907 :2006/07/06(木) 01:28:56 ID:???
すみません、マジで分かりません・・・
>>910 ちゃんと答えは
>>907 に書いてある。
たしかに英語だが、それは
>>909 で解決できるはずだ。
その上で何が分からないのかを説明してくれ。
>>909 大丈夫。お前は多分テンパッてるだけだ。
おちちつついて改めて見てみろ。きっと大丈夫
>>910 警告文ぐらい読めないなら中学校の英語からやり直したほうがいい
読む気が無いならプログラミングなんて今すぐ止めたまえ
915 :
907 :2006/07/06(木) 03:51:57 ID:???
最初のは、array_reverseする変数に何も格納されていない 下のは、さっぱりです・・・ というか、普通に実行できたのにfunctionにもってきたらエラーとかorz
916 :
907 :2006/07/06(木) 05:14:35 ID:???
ああ、もしかしてfunctionではarrayやファイル系関数は使えないのですか?
>>915 ヒント:変数のスコープ
・・・って言っても喪前さんのレベルだと多分分からないだろうから('A`)
とりあえず、警告が出ているarray_reverse()の()内の変数を、その前の行でglobal宣言をする
ex. array_reverse($foo)の行で警告が出たなら
global $foo; // 追加
$bar=array_reverse($foo);
:
:続く
上3つはこれで無理矢理解決できると思うが、
下4つは警告の出た行のもっと前に要因があるので
これ以上はわかんね。つか元に戻した方が多分早い
>>915 動かんでもしらんが、最強コマンド
error_reporting(0);
919 :
907 :2006/07/06(木) 05:35:19 ID:04g4jMNg
function reload(){ $imput_member = implode(",",array($_SESSION['name'][$_GET['id']],$_SESSION['name_color'][$_GET['id']],time(),$host)); $member_file = array_reverse(file($member_data)); $fp = fopen($member_data,"w"); flock($fp,LOCK_EX); for($i=0;$i<count($member_file);$i++){ list($get_name,$get_color,$get_time,$get_host) = split(",",$member_file[$i]); if(((time()-$get_time)<=300)&&(trim($host) != trim($get_host))){ fputs($fp,$member_file[$i]); } } fputs($fp,$imput_member."\n"); flock($fp,LOCK_UN); fclose($fp); } まんまコピーして、function.phpで保存 require()でfunction.phpで読み込んで、上の文があった場所へreload(); エラー・・・
917でせっかく教えてもらってるのに
function reload($member_data){ にして呼び出し側で reload($hoge); か 917のいうとおり function reload(){ global $member_data;
警告:array_reverseに与えられる引数は配列であるべき(12行目) 警告:array_reverseに与えられる引数は配列であるべき(13行目) 警告:array_reverseに与えられる引数は配列であるべき(43行目) 警告:flock関数は第一引数がresource型であることを期待しているが、boolean型が渡されている(46行目) 警告:fputs関数に渡された引数は有効なリソースではない(53行目) 警告:flock関数は第一引数がresource型であることを期待しているが、boolean型が渡されている(54行目) 警告:fputs関数に渡された引数は有効なリソースではない(55行目) ファイルオープンに失敗してるとかそんなんじゃねーの?
>>882 みんなからスルーされてるので答えよう。そもそもローマ数字って機種依存文字でしょ?携帯の絵文字とかと一緒。
単純に $member_data が無いだけだろう
解決方法は
>>921
926 :
876 :2006/07/06(木) 11:13:07 ID:???
>>881 >php.iniの設定や置き場所は大丈夫?
PHP5.1.4 + Apache2.2.x を使ってまして、
php.ini は php.ini-recommanded をリネームしただけです。
Apache の設定で PHPIntDir を指定しているので
php5ts.dll も移動していません。
Apache2.2.x系に対応するために php5ts.dll も更新して
その他の設定も済ませています。
>header('Content-Type: text/html; charset=Shift_JIS');
もDLが始まってしまいます。
むぅ〜。。。
>Apache2.2.x系に対応するために php5ts.dll も更新して >その他の設定も済ませています。 php5ts.dll じゃなくて php5apache2.dll でした。
そもそもダウンロードになるのはPHP側の問題ではないと思われ
929 :
nobodyさん :2006/07/06(木) 11:38:14 ID:zFo6kcDc
bbsみたいのを作っていて、書き込まれた内容を表示するときにhtmlspecialcharsをかけているのですが、<img src="">だけ有効にしたいです。 ちなみにMTのように、画像をアップロードすると、urlが表示されて、任意の場所にペーストして投稿みたいな設計です。 よろしくおねがいします。
個別に対応したいのならpreg_replace使えばいいんじゃないかな
932 :
nobodyさん :2006/07/06(木) 12:22:56 ID:zFo6kcDc
>930,931 レスありがとうございます。 検討した結果、931さんの方法でやることにしました。 htmlspecialcharsをかけた後に[img][/img]みたいな独自タグを str_repraceで置き換えたら、<img>タグだけが有効になりました。 ありがとうございました。
933 :
nobodyさん :2006/07/06(木) 12:45:14 ID:H7bF4zaH
スクリプトの<?phpと?>を省略することは出来ないでしょうか。 通常、HTML中にphpを埋め込むなんてやらない(Smartyを使用)ので、 できたら省略したいのですが。 #逆に<?php ?>の外に無駄な改行とかを間違えていれてしまい #エラーの原因にしかなっていません。。
(V)o\o(V)
PHPってHTMLに埋め込む言語なんだけど。 PHPで何も出力しないなら最初にincludeでもすれば?
937 :
nobodyさん :2006/07/06(木) 13:43:40 ID:MTxFU3hJ
printする時に"を'に変えないとなりませんが、それは何故でしょうか。 HTMLでは「WIDTH="500" HEIGHT="600"」としているので、いちいち変えるのは面倒です。
>>937 print "あ"いう"えお";
さてprintの中の人はどこまでを出力すればいいでしょうか?
↓
print "あ\"いう\"えお";
>>938 出力「あ"いう"えお」
何か、クイズ形式で作ってほしいよな
940 :
nobodyさん :2006/07/06(木) 14:55:34 ID:EMi/9a6Q
>>937 echo '「WIDTH="500" HEIGHT="600"」';
でいけると思われマす
?>WIDTH="500" HEIGHT="600"<? print <<<__BAKA__ WIDTH="500" HEIGHT="600" __BAKA__;
すいません、 #abc:a# これを abc/a.gif に置き換えたいのですが、どうすれば良いのでしょうか
>>943 str_replace("c","","cbakca");
>>944 文の途中にある「#abc:a#」 を変換させたいのですよ
あいうえお#abc:a#aiueo#ymc:e#えええ
あいうえお<img src="abc/a.gif">aiueo<img src="ymc/e.gif">えええ
>>946 条件を後出しするな。正規表現を自分で考えろ。
>>946 >>944 に加えて
-1. 「#○×#」という部分があったら
あとはもう少し自分で考えよう。
つか、正規表現で置換すれば一発だけどな。
>>943 そもそも正規表現はスレ違い
まぁこの程度の正規表現なんぞ相手にしてもらえんがな
950 :
946 :2006/07/06(木) 16:20:20 ID:???
$str = preg_replace('/\@([a-zA-Z0-9\-_~]*)?\@/','$1',$str); $str = preg_replace('/:/','/',$str);
951 :
946 :2006/07/06(木) 16:24:43 ID:???
if(preg_replace('/\@([a-zA-Z0-9\-_~:]*)?\@/','$1',$str)){ $str = preg_replace('/\@([a-zA-Z0-9\-_~:]*)?\@/','$1',$str); $str = preg_replace('/:/','/',$str); } ここまでできたのですが、肝心な<IMG src=""> にする方法がわかりません
>>951 なんだこの奇怪な正規表現。
したいことを素直に書けば preg_replace 一回で IMG の件も併せて解決ですが。
$str = preg_replace('/#(\w+):(\w+)#/', '<img src="$1/$2.gif">', $str); もう二度と来るなよ
まぁ、落ち着けよ。「下らねぇ」ことこそが、このスレの魅力じゃないか。 「下らねぇ」というフレーズがあってこそ気軽に質問ができる。
>>955 内容が下らないのはいいが条件後出しは許せん。
気軽にって言っても質問の手抜きは許されない。
下らねぇ質問はいいが、同じ質問は過去ログ嫁 条件の後出しは同じ質問が来るのと同義だ
過去ログ嫁なんて言ってたら殆どの質問がそれで終わってしまうんだが。
前スレ前々スレとまでは言わずとも、 せめて同じスレの中くらいは検索してはくれまいかとは思わないでもない。
昨日お世話になりました
>>899 です。不便でやっぱりオブジェクトの参照が必須です。
検索をかけて調べてみたのですが、ちょっと心細いので確認などさせてください。
(1) 参照代入は、 $a =& $b;
(2) 引数の参照渡しは、
function Set( & $obujet ) {
$this->object =& $object; }
(3) 参照返しは、
function & Get() {
return $this->object; }
(2) へ代入する際は、
$instance->Set( & $sample );// 引数に & つけなくてもいけました。
// 今後廃止予定だそうで、付けない方がいいのかな
(3)を受け取る際は、
$sample =& $instance->Get();
注意点として、オブジェクトを参照した場合
class A { var $value; }
$a = new A();
$b =& $a; $b = null;// ここで $a にも NULL が入る。
// & は参照アドレス値を示すのかな?と思って、
$a =& new A();// 上記処理は別として新規に。
$b =& $a; $b = null;// してみましたが、$a も一緒に死にました。
関係を断ち切るさいには、unset() を使用する。
それと foreach で列挙したオブジェクトも当然別物で、
foreach( $objArray as $obj )
$obj->setNewValue("newValue"); //列挙もとの $objArray は変化なし。
厚かましいとは思うのですが、ちょっと心細いのでアドバイスや
誘導などありましたらお願いしたします。 長文でごめんなさい。
PHPでウェイトってかけれますか?
藻前ら、自身のファイル名を取得するときは何をつかってますか? $_SERVER['PHP_SELF']とかいろいろあるけど 漏れは、 basename($_SERVER['SCRIPT_FILENAME']); ってやってるけど。
>>960 > (2) へ代入する際は、
>$instance->Set( & $sample );// 引数に & つけなくてもいけました。
>// 今後廃止予定だそうで、付けない方がいいのかな
渡す側で参照渡しするとPHP5だと怒られなかったっけか。
>>962 basename(__FILE__);
自身のファイル名自体あんまり使わないからな・・・・・・ カレントの絶対パスとかは使いたいと思うことが良くあるが。
>>963 ご指摘ありがとうございます。
多分5だと警告が出ると記述されていたと思います。
4ではつけてもつけなくてもいけるようなのですが、
付ける利点が余りないと思いますので、常にはずしておきたいと思います。
条件後出し厨は氏ね。
質問です。
<form id="form1" name="form1" method="post" action="top.php">
<label>
<input name="min" type="text" id="min" size="10" />番〜<input name="max" type="text" id="max" size="10" />
番までを<input name="sleep" type="text" id="sleep" size="10" />秒ごとに
<input type="submit" name="Submit" value="送信" /><input type="hidden" name="action" value="a" />
</label>
</form>
<?
if($_POST['action'] == "a"){
$max= $_POST['min'];
$min= $_POST['max'];
$sleep= $_POST['sleep'];
for($i=$min;$i<=$max;$i++){
?>
<SCRIPT LANGUAGE="JavaScript">
<!--
mainFrame.location.href='
http://<? echo $i; ?>/';
-->
</SCRIPT>
<?
echo "
http://mixi.jp/show_friend.pl?id=$i を表示<BR>";
sleep($sleep);
}
}
?>
として、下のフレームに1秒ごとにページを切り替えさせようと思ったのですがうまくいきません。
どの辺りを修正したほうが良いか教えていただけませんか?
>>967 すみませんでした。厳密に言えばPHP4の参照についてです。
5ではもともとオブジェクトの代入は参照渡しが前提である為、
それを前提で進めてしまいました。
でも
>>963 さんのような4と5の相違点のご指摘も非常にありがたいです。
混乱させてしまい申し訳ありません。以後気をつけたいと思います。
>>965 カレントの絶対パスって、スクリプトから取得できるの!?
define("DBNAME", "postgres"); //pontaサーバー define("USER", "php"); define("DBPASSWORD", "hoge"); define("DBHOST", "localhost"); define("DBPORT", "5432"); $dbHandle = pg_connect("host=DBHOST port=DBPORT dbname=DBNAME user=DBUSER password=DBPASSWORD"); としたのですが、Unable to connect to PostgreSQL server: could not translate host name "DBHOST" to address: Unknown hostとでます。 なぜでしょうか。
ヒント: print("host=DBHOST port=DBPORT dbname=DBNAME user=DBUSER password=DBPASSWORD");
ヒント2: PostgreSQLサーバに接続できません: ホスト名 "DBHOST"はアドレスに変換できませんでした。: 知らんホスト
ああ、解決しました。 ほんとくだらなくてすみません。すべて文字列として見られていては、 置き換えなんてしないですよね、すみません。ありがとうございます。