【PHP】くだらねぇ質問はここに書き込みやがれpart9
1 :
nobodyさん :
2005/09/03(土) 11:53:32 ID:7OO4C5e5
1乙2ゲト
レンタルツールを提供するサイトを運営しているのですが、ユーザーが編集したHTMLを元にPHPを作成してオリジナルのデザインを使えるようにしたいと考えています。 作成にあたりセキュリティ面に不安があり、皆様のご意見を聞かせていただけたらと思います。 例えばユーザーが編集したページデザインが <html><head><head><body> 名前:#namae<br> タイトル:#title<br> </body></html> だったとしてこれを元に <?php echo '<html><head><head><body>名前:'.$namae.'<br>タイトル:'.$title.'<br></body></html>'; ?> (↑#namaeを '.$namae.' に#titleを '.$title.' に変換しただけ) このようなincludeファイルを作って表示された場合に、シングルクウォートの入力を許可するとPHPの関数が実行可能となってしまいますが、 シングルクウォート以外を使って関数の実行は可能でしょうか?デザインの編集はフォームで行います。 ソース中の記号が読みにくいかと思いますがよろしくお願い致します。
4 :
nobodyさん :2005/09/03(土) 14:11:34 ID:7K8wd7Ia
よくわからんが #namaeを <?php echo $namae; ?>に 置き換えればいいんじゃね?あとは普通のHTML。
5 :
3 :2005/09/03(土) 14:37:13 ID:???
説明で下手で申し訳ありません
ユーザーが
>>2 のようなデザインをフォームから投稿すると
str_replace("#namae","'.\$namae.'")
といったように書き換えて
>>2 のようなincludeファイルを作成します。
掲示板のPHPは記事データ($namaeや$title)を読みこんだ後で
作成された
>>2 のincludeファイルを読み込んでincludeされたファイルがデータを表示します
ユーザーが作成するデザインでシングルクウォートが使えると
<html><head><head><body>
名前:#namae<br>';
$fp = ("./bbs.php");
$txt = fread($fp,filesize($file));
echo $txt;
echo '
タイトル:#title<br>
</body></html>
といった感じに書かれてしまうと、自由にPHPを実行されてしまいます。
シングルクウォート以外に禁止したほうがいい文字列なんかありますでしょうか?
わかりづらい文章ですみません。
まわりくどいことしてるみたいだけど。 #name → $nameという処理を特定のものだけに制限すれば、あとは、HTML内のただの文字にしかならないと思うけど。
>>5 お前が「レンタルールを提供するサイトを運営している」事が驚きだね。
ついでに言っとくが、この結果はどうなると思う?
$data = "'A';print 'TEST';";
echo $data
8 :
7 :2005/09/03(土) 20:22:22 ID:???
あふぅ!なぜコピペしただけのはずなのに「ツ」が抜けてるのだ・・・。
PHP初心者の便乗質問ですみません。 よくわからんが、 $namaeにPHPコードがあると echo $namae でPHPコードが実行されるもんなのか? includeファイルだからなるの? includeだとPHPを実行しちゃうの? じゃincludeしなければいいんだ。 ファイル読み込みとechoでinclude代用
>>9 まず自分で試されましたか?
質問する前に、自分で試してみましょう。
11 :
nobodyさん :2005/09/03(土) 23:15:45 ID:/h7Yu57r
ユーザー定義関数を作るときに、その関数の内部で使用するための関数を以下のように作ったところ、 ひとつのPHPファイルの中で2回以上使用するとredeclareできないというエラーが出てきます。 function hoge($data) { function hogege($data) { $data .= "-hogege"; return $data; } $data = hogege($data); $data .= "-hoge"; return $data; } 上記のような関数を2度以上使うとエラーがでました。 これはまずPHPファイル読み込み時にhoge()が宣言され、 内部のhogege()はhoge()が呼び出されるたびに宣言することになるからだと理解したのですが、 対処としてはhogege()をhoge()の外で宣言するしかないのでしょうか? ある関数について宣言されていなければ宣言する、といったようなことは可能なのでしょうか?
12 :
11 :2005/09/03(土) 23:39:37 ID:???
function_exists関数を使うことで解決しました。
13 :
nobodyさん :2005/09/03(土) 23:40:32 ID:6exF3kaw
PHPからシェルスクリプトを動作させるにはどうすればいいでしょうか? ヒントだけでもキボンヌです
14 :
3 :2005/09/04(日) 00:00:45 ID:???
>>6 ご意見ありがとうございます。
7>>
シングルクウォートの入力は許可してないのでそのコード自体書き込めません。
ためしにシングルクウォートのチェックはずして
$data = "'A';print 'TEST';";
echo $data ;
と入れてみましたが parser errorでした。
すべてダブルクウォートにしてもHTMLで出力されるだけでした。
すみません質問の仕方かえます。
$a='かきくけこ';
echo 'あい'.$a.'うえお';
↑これだと$aが展開されると思いますが、''内でシングルクウォートを使わずに$aを展開することは技術的に可能でしょうか?
>>11 私はそのような内部関数を作ろうと思ったことは無いのですが、
本当にそれが必要なのでしょうか?
OOPの内部クラスとも違いますよね。
展開してしまえば、関数定義も、関数呼び出しも要りません。
function_exists() でテストするコストも減らすことができます。
言語で出来ることをいろいろ試すという目的なら分かるのですが。
16 :
nobodyさん :2005/09/04(日) 00:25:14 ID:KQPE/gyz
>>やったことないけど exec shell_exec というなんかできそうなのがあるよ
17 :
11 :2005/09/04(日) 00:27:47 ID:???
オブジェクトは使っておらず、通常のユーザー定義関数です。 定義した関数の中で複数箇所で実行したい処理をその関数内でのみ関数として定義したいのです。 具体的には、フォームで受け取った値を種別にチェックする関数を作っているのですが、 (「年」「月」「日」「ユーザーID」その他DBに設定した項目にあわせてチェック) その中で、たとえば整数かどうかのチェックを行う関数や、 SQLでIN句に使用する('data1','data2',,,)という文字列を作成する関数を作っています。 「展開してしまえば」というのは、関数で定義もせず、その都度処理を全部記述するということでしょうか? あまり効率的でないように思えるのですが、どうなんでしょうか?
18 :
nobodyさん :2005/09/04(日) 00:33:18 ID:KQPE/gyz
自宅鯖管理者です。 現在サーバーの設定ファイルを弄るPHPを作っているのですが、 「権限」の面で非常に困っています。 単純にApache権限では各種設定ファイルへアクセスすることは できないわけですが、 通常どのような手段を用いるものなのでしょうか? (PHPというよりはむしろ鯖管理の知識になるのでしょうか?)
>>17 個人的には、素直に外に出した方が良いと思います。
整数かどうか、というチェックなら頻繁に使われるでしょうし、標準の関数もありますよね。
私は、PHPで内部関数を作ること自体に(見た目的にも)違和感があります。
その関数内でしか使わないような関数であっても、外に出しています。
もちろん個人の好みなのかも知れませんが。
21 :
11 :2005/09/04(日) 01:20:25 ID:???
>>20 中身は整数だけど文字列になってたりするので標準の関数が使えなかったりするんですよ。
他にも多数のPHPファイルにその都度全部一連の処理を繰り返し記述するのは苦痛にしか感じないのですが
そうでない人もいるということなのかな?
まぁ、極力手抜きをしたい、ということなんですけどね。
この様子では PHPでは匿名内部クラスも実装することができないのだろうか。 メソッド内クラスも。
>>17 だったら、
function func1(){
function func2(){
}
}
とせず
ただ
function func1(){
}
function func2(){
}
と分けるだけでいいんでない?
オブジェクト指向を使えば
もっと便利なこともできるけど。
25 :
17 :2005/09/04(日) 01:36:37 ID:???
>>24 それだとfunction_existsを使わずに済むのですが、
そもそもfunc2を単独で利用するつもりが全くないので、
見た目的にどうもすっきりしないんですよね。
パーツにしかすぎない関数を同列に並べるのがどうも違和感があるんです。
オブジェクト指向も気になってはいるもののマニュアル等を読んでもいまいちメリットが分かりにくいので
さしあたって関数をガシガシ作って参照するようにしています。
>>21 自作関数の作り方本当にわかってる?
何か勘違いしているような気がしてならないんだけど。
>>11 で示されるような
内部関数hogege($data)というのは
関数hoge($data)の中でしか使わない、
だから、内部関数として定義したい
という意味だとおもったけど。
内部クラスのように。
けど
>>21 をみるとやりたいことはそうじゃないみたいだね。
関数を作っているんだからその作った関数をcallするだけで
その都度同じ重複する処理を書く必要は無い筈なんだけど。
関数は一度作ったら、その関数が定義されているファイルを
include(), include_once(), require(), require_once()で呼び出すだけで
$x = hogege('何か');
のようにすぐ使えるんだけど。
毎回PHPファイルを新たに作成する対に
function hogege($data) {
$data .= "-hogege";
return $data;
}
とか無駄に書く必要は無いよ。
>>25 オブジェクト指向を理解したければ
結城浩の「Java言語で学ぶデザインパターン入門」を
読むことをおすすめするよ。超初心者向けで非常にわかりやすいよ。
>>25 require_once()を使えば、
わざわざ何度もfunction_exists()を呼び出す必要はないと思うんだけど。
require()ってわかる?
require()とrequire_once()との違いもわかる?
>>25 >
>>24 > それだとfunction_existsを使わずに済むのですが、
> そもそもfunc2を単独で利用するつもりが全くないので、
> 見た目的にどうもすっきりしないんですよね。
> パーツにしかすぎない関数を同列に並べるのがどうも違和感があるんです。
それなら、もうオブジェクト指向を学ぶしかないでしょ。
そのまえに、まず関数の作り方、使い方くらいおぼえたほうがいいね。
それからrequire()の使い方も。
a.php 関数a()が定義されいている
b.php 関数b()が定義されている
require.incの中身
<?php
require_once('a.php');
require_once('b.php');
//定義された関数を実行
a();
b();
?>
top.phpの中身
<?php
require_once('require.inc');
//定義された関数を実行
a();
b();
?>
>>11 がやりたいことはこれを参考にすれば問題なく実現できるかと思われ。
32 :
11 :2005/09/04(日) 02:11:46 ID:???
なんかすごく誤解を招いたようでいっぱいレスが・・・。
>>21 の「多数のPHPファイルにその都度全部一連の処理を繰り返し記述」というのは
>>20 をなぜか「関数を使わずその都度処理を全部書く」と誤解してしまったがゆえの発言なので、
全ファイルにて同じ関数を定義しているわけではありません。
外部にまとめて定義してあり、各ファイルにてrequire_once()でインクルードしています。
また、function_exists()については、関数を定義しているファイルにて
funtion hoge($data) {
if (!function_exists("hogege") {
function hogege($data) { ....... }
} }
としています。
この時点でrequire_onceや定義した関数の使い方に間違いがあったりするのでしょうか・・・?
>>27 の本は以前いろいろ本を調べていたときにも見かけたのですが、
Javaがわからなくてもなんとかなるものなのでしょうか?
33 :
nobodyさん :2005/09/04(日) 02:26:36 ID:gvZ6YCw+
$hoge1 = $data1; $hoge2 = $data2; $hoge3 = $data3; 続く こんなのをforを使って一気に書くときに連番の部分に$iとかって 変数を使ったりする訳ですが、文字列として吐き出すのではなく この連番を含んだ変数名を、変数として実際につくるeval以外の方法はないでしょうか?
>>33 俺なら多くの場合配列で済ませられるから、そっち使うが
そのままで書きたいなら可変変数使ってみれば。
「文字列として吐き出すのではなく」ってのがよくわからんけど 前スレに同じような話題があったような。 これ?でいいのかな? ${'hoge'.$i}
「$$変数名」で出来るはず。こんな感じ↓ for ($i=0;$i<10;$i++) { $hoge_str = "hoge$i"; $data_str = "data$i"; $$hoge_str = $$data_str; }
>>33 配列やハッシュを使わずになんでわざわざスパゲティコードすれすれになりそうな
そんなことをするのだろうか不思議だ。
一体何をしたいんだい?
>>32 質問の仕方が悪いか、関数のことをわかっているようで
実はわかっていないから誤解されるんだろうが。
だからさ、hogege()はすでに外部に定義してあってrequire_once()で
hogege()関数が定義されたファイルを呼び出していて、
いつでもhogege()を呼び出せるようになっているんだろ?
なのになんでhogege()を再定義しているんだ?
一体何をやりたいんだい?
>>32 >
>>27 の本は以前いろいろ本を調べていたときにも見かけたのですが、
> Javaがわからなくてもなんとかなるものなのでしょうか?
お前がよほどバカじゃなきゃ、なる。
40 :
nobodyさん :2005/09/04(日) 07:49:16 ID:mRWx0KoE
>>14 要するにシングルクォートでかこまれた
echo '他人が入力';
で「他人が入力」の部分はシングルクォート以外のどんな文字列にしても
PHPのセキュリティ上問題ないかって事?
42 :
nobodyさん :2005/09/04(日) 08:53:16 ID:MGvOYzOb
GDでビットマップファイルを扱うにはどうしたらいいですか?
>>43 ImageCreateFromWBMP
ImageWBMP
45 :
11=32 :2005/09/04(日) 11:17:27 ID:???
>>38 再定義というか、定義されていない場合にのみ宣言しているつもりなのですが、何か問題があるのでしょうか?
hogege()はhoge()の中でしか定義していません。
>>39 早速買ってみます。
phpをユーザ権限で動作させるのって CGI化してSuexec使うしか無理でしょうか?
47 :
43 :2005/09/04(日) 13:00:39 ID:???
>>44 すみません。死ぬほど言葉足らずでした。
WBMPに限らず、一般のビットマップ(例えば24ビット)をGDで扱うにはどうしたらいいですか?
>>47 GDではwindowsbitmapは扱えないんじゃなかったっけ??
50 :
43 :2005/09/04(日) 16:32:47 ID:???
>>48 >>49 なんとかGDで「操作」できるリソースの形に持っていくことはできないものでしょうか?
ImageMagickやCJPEGのような外部ツールを使ってJPEGとかPNGとかに変換してしまうと質落ち(というか少なくとも色の変化)は免れないようです。
やったことないですが、ビットマップファイルをPHPのfopenとかで直接読んで解析するのはアホですか?
51 :
33 :2005/09/04(日) 16:34:46 ID:gvZ6YCw+
>>34 可変変数っていまいちわからんです。
>>35-36 まさにこれです。サンクス。
>>37 mysql_fetch_arrayをループの外であとから値を取り出したいのです。
そうすればコードもすっきりするので。
だれか、カレンダー表示クラスつくらねーか?
だれか、カレンダー表示クラスつくらねーか?
PEAR::Caneldar, PEAR::Dateじゃだめなの?
おれが使いやすいクラスを作れっていってんだよ
おれが使いやすいクラスを作れっていってんだよ
表示を含めたクラスがいいんだよ。
表示を含めたクラスがいいんだよ。
PEAR::Calendarのどのあたりが使いにくいの?
すみません、質問させてください。
POSTで受け取ったデータ(XXXXX)を元にクライアント毎に表示するページを変えたいのですが、
例:
http://aaa.aaa/aaa/XXXXX/ こんな感じで
どのようにすればいいのですか?
今は、こんな感じで書いてるのですが、
<a href="
http://aaa.aaa/aaa/ <?php
print $_POST['XXXXX'];
?>
/">URL</a>
リンクをクリックさせず、直にリンク先のページを表示させる(1段階作業を減らしたい)方法がありましたら
ご享受ください。お願いします。
おまいら配列のインデックス書くときに1文字あけてますか?
$a[ '
>>60 aho' ]
$a['
>>60 aho']
どち?
おー、ありがとう。試してみるね。
65 :
nobodyさん :2005/09/04(日) 19:06:23 ID:w7mb+cHO
本当に下らない質問ですいません。 ------------ 〜PHPプログラム ?> <HTML><HEAD> <?php 〜PHPプログラム ------------ このような記述になってる場合、 ------------ 〜PHPプログラム echo "<HTML><HEAD>"; 〜PHPプログラム ------------ このようにphp呼び出しをなくしてしまった方が早くなるのでしょうか? 詳しい方がいたら教えてください。
ずばり言うわよ!
まだ(・ε・)?
68 :
nobodyさん :2005/09/04(日) 20:03:12 ID:iLr51HFA
自作の掲示板作りたいんですけどどのプログラミング言語で作るのが 一番いいんでしょうか?
Array Array ( ( [0] => Array [0] => hoge ( → [1] => hage [0] => hoge ... ) ) [1] => Array ( [0] => hage ) ... ) 左の配列を右の配列のように変換してくれる関数ってありませんか? 一応マニュアルは読んだんですが、自分で書く前に質問しておきます;
自分で作れ
>>63 面倒くさいから自力ではあけない。
ctrl + shift + F と押せば
オートフォーマッタが発動しPHPEclipseがツールで自動的にスペースをあけてくれるように
設定することもできたかと。
72 :
69 :2005/09/04(日) 20:58:57 ID:???
PHPの質問ではありませんが、PHPで作成していて、適切なスレが見当たらないので質問させてください。 ウェブログのスクリプトを自作しているのですが、トラックバックの部分がどういう決まりになっているか分かりません。 どのようにして相手にトラックバックが知らされるのですか?どのURLに、どのような情報を送信すればよいですか? RDFに出力する部分は完成しています。
>>73 MovableTypeのソースコードを覗いて研究汁!
pingだけならpostするだけだろ
ログイン中のユーザーを把握する方法について質問です。 MySQLに登録したユーザー名とパスワードを利用してログインし、 セッションを使ってサイト内にアクセスできるようなサイトを作っているのですが、 現在ログインしているユーザーを把握するにはどのような方法があるのでしょうか? ログイン時にログインユーザー管理用テーブルにログイン日時・最新アクセス日時・ログアウトフラグ・ユーザー名を格納し、 各ページにアクセスするたびに最新アクセス日時を更新し、 設定したタイムアウト時間(30分くらい?)以内のユーザーをログイン中のユーザーと判定すればいいかと思ったのですが、 これだと最大30分の誤差が生じてしまいます。 極力誤差を小さくし、なおかつブラウザを開いたまま放置した場合のタイムアウト時間をできるだけ長く取るような方法はあるのでしょうか? よろしくお願いします。
CGIのプログラムを作成し、サーバーにアップロードして実行すると以下のような メッセージが表示されました。 Server error! The server encountered an internal error and was unable to complete your request. Error message: Premature end of script headers: school_blog.cgi If you think this is a server error, please contact the webmaster Error 500 これはどのようなエラーなのでしょうか。
http ステータス でググる。
>>78 一定時間毎に見えないサイズのiframeを更新させれば
ブラウザを閉じてしまった人間は把握できる。
開いたままの放置についてはどうしようもないけど。
83 :
79 :2005/09/05(月) 01:41:54 ID:???
実は元のCGIプログラムを改造したときにエラーが発生したものです。 メモ帳でCGIのデータを改造したのがいけなかったのかな・・・ ちゃんと上書き保存で保存したんですけど
>>83 実は、とかじゃなくてそれPHPと関係あんの?
85 :
79 :2005/09/05(月) 01:47:32 ID:???
すみません・・・PHPと関係ない質問をしてしまいました・・・ 今すぐ回線切って首吊ってきます・・・
>>78 「誤差」の意味がわからん。ブラウザを閉じてるか開いてるかを見分けたいってこと?
それだったら
>>81 のiframeか、もしくはユーザーに気づかれずにやるならAjaxで、短めな一定時間ごとにサーバーにリクエストを送信。
その上でブラウザ放置を見分けるのに「30分」など長めの時間を設けるのもいいし、JavaScriptでキーボードやマウスのイベント発生に関して適宜リクエスト送るっていう荒業でもよいかと。
あとはWeb製作板などの関連スレへ。
87 :
78 :2005/09/05(月) 02:25:50 ID:???
>>81 ,86
レスありがとうございます。
iframeを埋め込んでおくのが簡単そうなので試してみることにします。
「誤差」というのは、「ブラウザが閉じられてからログアウト判定されるまでの時間」ということです。
「開いたまま放置」はログインしていると判定して問題ないのでiframeで解決しそうです。
88 :
3 :2005/09/05(月) 05:56:36 ID:???
>>40 まさにそれです。
日本語下手ですみません。
危険はあるでしょうか?
質問です クライアントから送信されるcookieの有効期限を取得する方法はないでしょうか?
>>89 無いですね。
どうしても有効期限を取得したければ、値の一つとしてcookieに入れておくしかないです。
91 :
89 :2005/09/05(月) 09:28:45 ID:???
やはりそうですか わかりましたありがとうございました
echoとprintの違いはなんでしょうか?
94 :
nobodyさん :2005/09/05(月) 12:06:30 ID:REUncSgb
会員制サイトを作ろうと思っています。 で、セッションを勉強したいのですけどわかりやすい解説サイトありますか? (PHP公式マニュアル以外で)
PEAR::Logってログローテーションできるのかな
96 :
nobodyさん :2005/09/05(月) 14:10:36 ID:CxM3rFfK
SELECT * FROM (テーブル名) WHERE (変数) =\"".$(☆)."\""; ↑のSQLの☆の部分にGETで値を引き渡す時に#が入っていると(例:ABC#DE)、 #以降の値が送られないんですが、どうすればいいんでしょうか?
\#
>>96 そのSQL文というより、$_GET['〜'] 自体の#DE部分が削られているんじゃないの?
<a href="〜.php?hoge=ABC#DE">link</a>とかになっている場合は、
ブラウザが #DEを削って 〜.php?hoge=ABC とするのは、正しい動作だよ。
どうしても#を入れたい場合は、#の代わりに%23を使って hoge=ABC%23DE のようにする。
system関数で出力される内容が強制表示されてしまうのですが消す方法はありませんか?
FTPについて $upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY); の$destination_fileと$destination_fileの書き方がよくわかりません。 何度やってもサイズ0のファイルが作成されるだけでうまくいかんのです。
102 :
nobodyさん :2005/09/05(月) 14:54:24 ID:RuKSzRaH
phpで、ある習い事の申し込みをWEBでできるようなプログラムを作りたいと考えています。 どのようなサイトを参考にすればよいでしょうか? ちなみに、メールフォームのような形にするのではなく、申し込みの内容をデータベースで保存したいと思っています。 なにかサンプルプログラムなどが置いてあるサイトなどはありませんでしょうか? アンケートフォームなどを参考にしたらいいんでしょうか?
外注すればいいと思うよ
PHP+MySQLとか書いてある本を買って読むといいよ。 プログラミングの分野に明るければ(それなら質問しないだろうけど)ネットのリファレンスとか見れば作れるだろうけど 分からないならネットで調べていちいち質問するよりも、一通り本を読んで分からなかったところを聞いた方がいい。 その習い事の申し込みで会員だけ予約出来る、みたいな事がしたいなら アカウントの認証とかいう内容にも触れられてる本を選ぶといい。
105 :
99 :2005/09/05(月) 15:21:19 ID:???
事故解決しました
質問です。 なにも規則性のない数字を一文字ずつ区切るには どのようにすればできますか?
>>106 $a = '12316579843654654987354';
for($i=0;$i<strlen($a);$i++){
$b = substr($i,1);
$c .= "".$b." ";
}
echo $c;
初心者です。こんな感じでできませんか?
テストしてません。
preg_replaceとかでもできるかも?
プロの方より良い方法あったら教えてあげてください。
自己解決したらしたで、後続のためにヒントだけでも欲しいもんだ
>>106 数字の入った文字列であれば、数字を数字+区切り文字に置き換えればいい。
<?
$string = '0123456789'; //置換対象文字列
echo preg_replace('/(\d)(?=\d)/', '${1},', $string); // "後に数字が続く"数字の後に,(カンマ)を挿入
?>
こんなもんでどう?
>>106 php5ならstr_splitで一文字ずつの配列に出来る
>>106 まず「区切る」の意味がわからない。
とりあえずPHP5ならstr_splitで、PHP5でないなら、
$array = array_splice(preg_split('//', $numbers), 1, -1);
で1文字ずつ取り出して配列にできるから、
あとはスペースだのコンマだの何かを挿入したいならimplode($separator, $array);で。
$numbersに数字以外が含まれる可能性もある場合に、数字だけを取り出すなら
preg_match_all('/\\d/', $numbers, $matches);
$array = $matches[0];
あとはスペースだのコンマだの(ry
111 :
106 :2005/09/05(月) 17:23:30 ID:???
結局、
>>106 では、どんな事がしたかったんだろう……。
具体的に言っても貰わんと、どう書いていいのか迷うよな。
せめて、入力データと期待する出力例を言ってくれれば迷わずに済むのに。
文字列にマルチバイト文字が含まれるかどうかを判定するにはどうすればよいのでしょうか? パスワードを登録する際の文字列の判定をしたいのですが、 半角英数字のみを受け付けるにはどうすればよいのでしょうか? ctype_alnumを試したところ半角の記号でも全角ひらがなでもfalseが返ってくるので これでいいのかとも思うのですが確信がもてません。
>>113 シングルバイト(a-Zと0-9ぐらいでいいと思うけど)以外の有無で
判定すればどうか。
116 :
113 :2005/09/05(月) 18:04:23 ID:???
>>115 レスありがとうございます。
「以外の有無」の判定はどうすればよいのでしょうか?
1文字ずつ分割してそれぞれチェックし、a-Z・0-9と一致しなければエラー、と考えればよいのでしょうか?
正規表現で「任意の文字以外」という条件の設定が分かりませんでした。
>>112 >>106 からはどう頑張っても配列に格納なんて事は汲み取れないような・・・
>>116 [abc]っていう文字クラスでabcのいずれか、ってのは分かるべ?
んで、[^abc]でabc以外の文字って意味になる。
^[許可する文字クラス]*$ // 許可する文字が最初から最後まで続く = 許可する文字以外が存在しない
[^許可する文字クラス] // 許可する文字以外が存在する
のどっちかが一番手っ取り早いかと。
長さ0の文字列を拒否したいなら[許可する文字クラス]* の * を + に。
>>107 ヌルーされてるけど一応…
× $b = substr($i,1);
◯ $b = substr($a,$i,1);
119 :
113 :2005/09/05(月) 18:33:01 ID:???
>>117 どうもありがとうございます。
^で否定できるのは知りませんでした。
ereg("[^a-z|A-Z|0-9]",$_POST["password"])
とすれば半角英数字のみに対応できているようなのですがこれで正しいでしょうか?
|で区切った場合、^が[]の全体に作用するのか|で区切られた部分のみに作用するのかいずれなのでしょうか?
>>113 あんまり好きな方法じゃないけど、
mb_convert_kana で半角に変換して元の文字列と長さを比較
違ってたらマルチバイトがあるって判定法を昔やったな。
>>119 それは | 無しで [^0-9a-zA-Z] だけでいいよ。
-を含める時は [^0-9a-zA-Z-] って最後につければよかったはず。
>>114 にはこれがお似合い
$a = '12316579843654654987354';
for($i=0;$i<strlen($a);$i++){
echo $a[$i]."\n";
}
123 :
113 :2005/09/05(月) 18:48:46 ID:???
>>120 ,121
うまくいきました。
とりあえずマルチバイト文字があるかどうかというよりは
指定した文字のみを許可する方向で行きたいので
121の方法でやってみます。
どうもありがとうございました。
phpのプログラムを作成して実行したときに 『Fatal error: Call to undefined function: form() in /var/www/html/vivid/school/pre.php on line 14』 というエラーメッセージが表示されました。 下がそのエラーが発生するプログラムです。 FORM("pl_info","./insert.php"); echo "<B>入 力 情 報</B><BR>\n"; TABLE("500","1","#AAEEFF","CELLSPACING=0"); echo "<TR>\n";TD("150","#CCEEFF","LEFT","COLSPAN=2","タイトル");TD("350","#FFFFFF","LEFT","",$title);echo "</TR>\n"; echo "<TR>\n";TD("150","#CCEEFF","LEFT","COLSPAN=2","文章");TD("350","#FFFFFF","LEFT","",$text01);echo "</TR>\n"; echo "<TR>\n";TD("150","#CCEEFF","LEFT","COLSPAN=2","画像選択");TD("350","#FFFFFF","LEFT","",$upfile);echo "</TR>\n"; echo "<TR>\n";TD("150","#CCEEFF","LEFT","COLSPAN=2","経歴");TD("350","#FFFFFF","LEFT","",$text02);echo "</TR>\n"; echo "</TABLE>\n"; echo "<BR>\n"; TABLE("500"); echo "<TR>\n"; SUBMIT("INSERT_DB","登録する"); TD("250","#FFFFFF","CENTER","",$TEXTVALUE); HIDDEN(); HIDDENDATA_ALL(); echo "</FORM>\n"; これは14行目の 『FORM("pl_info","./insert.php");』 が間違っているというのは分かるのですが、「pl_info」が間違っているのか「insert.php」のプログラムが 間違っているのかあるいはFORMの囲み方が間違っているのかがさっぱり分かりません。 どうか回答の程よろしくお願いします。
ちなみに、文字クラス内で|を使うと、orではなく、"|"という文字として扱われる。 文字クラス内では、文字クラス内の全ての文字が対等にorの関係になる。
こりゃまたえらくでかい釣り針がぶら下がってるな 大きすぎて口に入らんぞこれは
127 :
107 :2005/09/05(月) 19:05:56 ID:???
超ハズい
>>124 >Call to undefined function: form()
エラーメッセージが読めていないことだけは確かだよな。
131 :
nobodyさん :2005/09/05(月) 19:56:57 ID:??? BE:702416399-
>>96 そんのやり方はソースが読みにくくなるので
俺だったら、JavaのPreparedStatementに相当する、
PEAR::DBのpreapare系使ってプレースホルダ?を設定して
使っちゃうな。
132 :
nobodyさん :2005/09/05(月) 19:58:04 ID:??? BE:485621478-
>>101 PEAR::FTPは使い心地が悪いですか?
133 :
nobodyさん :2005/09/05(月) 20:02:23 ID:??? BE:52031232-
>>124 そのソースコード、
可読性としてちょっとねえ。
とりあえずHTMLタグは小文字で、
関数も小文字のほうがいいんでない?
それ以前に、オブジェクト指向化して
設計を見直したほうがよさそう。
あと、テンプレート使ったほうがいいと思う。
自鯖が不安定なので、別に鯖を借りて、そこに自鯖が落ちてなかったら自鯖のサイトを読み込んで表示し、落ちてたら、その鯖にあるサイトを読み込んで表示するようなものを作りたいのですが、どうしたらいいのでしょうか? php5でお願いします。
135 :
nobodyさん :2005/09/05(月) 21:43:36 ID:2xvv82Xw
質問があります。 自分の管理外のホームページに、 フォームから情報を入力して、Submitボタンを押すと その関連情報結果が表示される・・・といったPHPが設置されています。 そこで、自分のサイトにPHPを置いて、その情報を 自分のPHPから呼び出す事は出来るんでしょうか? そのページ(自分の管理外のホームページ)へアクセスし、 情報を表示すれば良いだけなのですが、その手間を省きたいです。 セキュリティ的にも、やれてもやってはいけない事でしょうか?
>>134 自鯖の方に判別プログラムをおいて新しい鯖からそれを呼ぶ。
値が得られた場合と得られなかった場合とで呼び出すファイルを変えれば良い。
エラー回避を忘れずに。
137 :
nobodyさん :2005/09/05(月) 21:57:36 ID:CGyYRIw9
>>135 その関連情報ってのが何かしらんけど、そのサイトにおいてあるデータベースから何か取得してるとかなら、
データベースの権限無いだろうし無理だろうな
>>134 phpじゃなくて、もっと下の層で二重化するような方向の方が自然な流れな気がする。
ちゃんとした奴はそれなりの金が必要だけど。
あと、どういうシステムを動かしてるのか知らないけど、どういう方法で二重化するにしても、
物によってはデータの同期の問題やら何やらでややこしくなるかもしれないんで気をつけて。
それより、不安定な鯖なんて鯖にあらずな気がするというか、
>>134 の要件だと、別鯖が常に動いて自鯖と同じ動作してくれるという前提みたいだから、
素直に別鯖に移行して、自鯖をテスト環境にするとかした方がいいと思うんだけど……。
>>135 可能。技術的には特に問題なし。
規約とか著作権の上でNGっぽいけど。
>>134 そんな馬鹿げたな設計はやめて鯖を安定させるんだ。
>>135 自分のサイトでsubmit->そのサイトに移動して結果を表示、というだけなら
がっちりセキュリティ対策してなければ出来る可能性が高い。
しかし、セキュリティ的にもマナー、モラル的にも不味い。
自分のサイトにフレームとかでなく通常の方法で結果を埋め込みたい、というのなら
DBなりデータファイルなりへのアクセス権限が必要。
管理者がアホなら出来るかもしれないけど、可能性は低い。
下手にやるとマナーどころか法的にも不味いことになりそうな予感。
どっちの方法にしろ、人様の作ったフリーでない物を使いたければ、まずは管理者・作成者に連絡するべき。
人によってはソースツリー+データのコピーを提供とか、読み込み専用のDBアカウントを発行してくれるかも知れない。
141 :
134 :2005/09/05(月) 22:26:41 ID:???
ご返事ありがとうございます。
>>136 そこまでは分かるのですが、具体的にどのようにして、鯖の読み込みの可否を判定できるのかが分かりません。
>>138 別鯖(レンタル鯖)ではphpのsimplexmlなどの関数が使えないため、自鯖をメインとしています。
142 :
nobodyさん :2005/09/05(月) 22:27:53 ID:lQwp6BJc
よく一部の携帯サイトで見受けられるリンクを分けずにワンクリック(一つのコンテンツのみ)で機種ごとに対応させるにはどうしたらできる?例えば着メロとかはキャリアごとに形式違いますよね。 知ってる人はよろしく
各キャリアのUser-AgentかIPの範囲を調べて出力を変えれいいよ。
144 :
135 :2005/09/05(月) 22:40:40 ID:???
皆様レスありがとうございます! 技術的に可能なことだけでも知れてよかったです。 つーか、よく分からないし、倫理的に問題あるとのは 間違いないと自分でも思うので諦めます。
>>142 マルチスレッドご苦労様です。
>>144 基本的なとこだと、formパクってきて、action属性でリモートにあるこっそり使いたいphpのurlを指定してやればいいだけ。
Google検索を自サイトに置くのと技術的には一緒。
>>142 糞マルチ死ねよ
糞マルチ死ねよ
糞マルチ死ねよ
糞マルチ死ねよ
>>141 ping飛ばして見るとかどうでしょうか。
simplexmlの使えるサーバに鞍替えするか
自分のサーバを安定させるかした方がいい気がしますが。
149 :
134 :2005/09/05(月) 23:12:19 ID:???
あぁ、php pingtと検索してやっと見つけることができました。 鯖の安定化も頑張ってみたいと思います。 色々とありがとうございました。
$_SESSIONに画像格納しちゃだめですか
phpで確認画面を作成しているのですが上手くいきません。 inputのデータを別のページで反映させるにはどのようにすればよいのでしょうか。 CGIは難しい上にプログラムするのに時間がかかってしまうのでなるべくPHPで作成したいのです。 もし他に効率の良い方法がございましたらぜひ教えて下さい。 どうかよろしくお願いします。
>>151 の人は確認画面だけ作って何をするつもりなんだろうか
っていうかCGIって
<!-- 送信側 hoge.html -->
<form action="./hage.php" method="post>
<input id="hoge" name="hoge" type="text" value="">
<input id="submit" name="submit" type="submit" value="送信">
</form>
<!-- 受信側 hage.php -->
echo $_POST['hoge']; // submitしたformの子要素のname
最近セッションに挑戦して、いままでhiddenで値を持ち回していて、「こりゃ楽だ」と感動してるのですが、このセッションを使って値を持ち続けるのってどの程度信頼性があるのですか? なんかの拍子に消えたりとかしないですか?
$arr = array("alpha", "beta", "gamma", "delta", "epsilon"); foreach ($arr as $key => $val) { echo "キー:$key 値:$val\n"; } このようなforeach文で、値が「beta」の時、前後の値である「alpha」、「gamma」も 表示したいのですが、どのようにして実現すればいいのでしょうか?
155 :
151 :2005/09/06(火) 01:12:43 ID:???
>>152 説明が足りなくて申し訳ございません。
実はメール送信フォームの確認画面ではなくインターネット回線を通して
どこからでも文章の入力や画像データの貼り付けを行うことができる
画像掲示板のようなデータベースを作成しております。
入力フォームのphpデータは完成したのですがphpデータのinputの情報を
別のページに反映させることが出来ません。
(例えばphpデータAのinputの情報を確認画面のphpデータBに反映させ、
それで登録しても良いのであればphpデータCで登録の処理を行うといった
流れのデータを作成したいのです。)
>>155 data_a.phpで、
<form action="./data_b.php" method="post>
data_b.phpで、
<form action="./data_c.php" method="post>
ってことか?
>>152 は、メール送信フォームじゃないけど?
>>153 クライアント側のCookieが消えるとか、セッションタイムアウトとか可能性はある。
>>154 前戻りだけなら、読んだ時に前のデータを変数に格納しておけばいいけど、
前後とも表示したいならforeachよりもfor使った方が簡単。
配列の端での動作によってソース変わってくるけど、
端でも前後あわせて3つずつ表示する場合は
for($i = 1; $i < (count($arr)-1); $i++);
で無条件に $i-1, $i, $+1 を表示。
端では2つずつ表示する場合は
for($i = 0; $i < count($arr); $i++);
で、基本は上と一緒だけど、$i <= 0 の時は $-1 の部分を、 $i >= count($arr) の時は $+1 の部分を表示しないようにする。
158 :
151 :2005/09/06(火) 01:33:00 ID:???
>>156 例えば「data_a.php」に
<input type="text" name="title" size="30">
というプログラムがあるとしますと、titleに入力した文字を「data_b.php」
に表示させたいのですが「data_b.php」に「data_a.php」のtitleをどうやって
反映させるのかがわからないのです。
>>156 あ!画像データがあるのか。
じゃ俺にはわかんね。
画像を二度送信させるのは無駄っぽいし。
>>155 入力フォーム->確認画面->DB登録って流れだろ?
>>152 でいいじゃないか。
あとは、確認画面のformの中にhiddenで値埋め込むなり
確認画面を表示するphpで$_POSTで受け取ったデータをセッションに格納して
DB登録のphpでセッションから引っ張ってくるなり好きにすればいい。
<!--
>>152 の改良版 受信側 hage.php -->
お名前 : <?=$_POST['hoge']?>
<form action="./db_insert.php" method="post">
<input id="hoge" name="hoge" type="hidden" value="<?=$_POST['hoge']?>">
<input id="submit" name="submit" type="submit" value="送信">
</form>
<!-- っていうか、入力側のphpってただのHTMLな気がするんだけど…… -->
えっと、FORMでの値の受け渡しが分からないってことなのか? #まずは入門書を読みませう。
162 :
160 :2005/09/06(火) 01:38:54 ID:???
あ、俺も画像忘れてた。 画像あるんだったらセッションにバイナリごと入れちゃうのが一番楽かな。 OKだったらファイルに書き込むなり、DBのBLOB型カラムに入れるなり。
163 :
154 :2005/09/06(火) 01:46:32 ID:???
>>157 ありがとうございます
やはりforを使うしかないのですね
$arr = array("one"=>"alpha", "two"=>"beta", "three"=>"gamma","four"=> "five", ""=>"epsilon");
例えば上記の場合、for文では限界があると思うのですが、この場合は
どのようにして実現するのでしょうか?
164 :
154 :2005/09/06(火) 01:47:57 ID:???
間違えました。。 $arr = array("one"=>"alpha", "two"=>"beta", "three"=>"gamma","four"=> "delta", "five"=>"epsilon"); に修正です
165 :
157 :2005/09/06(火) 01:55:32 ID:???
166 :
154 :2005/09/06(火) 02:13:14 ID:???
>>165 その関数を使うことでなんとかなりそうな気がしてきました
本当にありがとうございます
IEのスタイルシートのバグの多さから、 UA取得して、IEで閲覧時にはIE用のスタイルシート。 といった感じに、スタイルシートをブラウザごとで使い分けるために PHPを使用しようと考えているのですが、 そういうことはPHPでできそうでしょうか?
MDB使ってんだけど、 DBに登録するときにエラーチェックしてる? 漏れ、最近べつに必要ねぇんじゃねーか? と思い始めた。 $result = $db->query($sql); if (MDB::isError($result)) { die ($result->getMessage()); }
>>167 可能だけどphpを使わずに
ブラウザバグを回避する方法も色々開発されている。
170 :
167 :2005/09/06(火) 02:35:48 ID:???
>>169 レスどうもありがとうございます。
回避する方法も開発されているのですかー。
それは知りませんでした。
少し回避する方法を探してみてだめそうならPHPでやってみたいと思います。
>>167 サーバサイドでやるなら、HTML内に各ブラウザ用のCSSを埋め込むか、
各ブラウザ用のCSSを予め用意しといて、外部CSSを読み込ませる部分の記述を動的に変えるとか。
あと、サーバサイドでやらんでも、クライアントサイドで各UAのバグ・実装不足などを突付いて
CSSの特定の部分を特定の部分だけ読めないように記述するCSSハックという手法もある。
>>168 sql投げたら勝手にquery送ってdieまでやってくれるメソッドを実装しちゃえば気にしなくて済む。
172 :
167 :2005/09/06(火) 02:42:23 ID:???
>>171 レスどうもありがとうございます。
クライアントサイドでやるならJSかと思ってたのですが、
CSSハックというやり方もあるんですね。
聞いたことがない言葉なので早速調べてみたいと思います。
>>164 俺ならeach(),prev(),next()使う
174 :
151 :2005/09/06(火) 11:29:55 ID:???
>>159-162 皆様のおかげでinputのテキストのデータを反映させることが出来るようになりました。
しかし同じ方法で画像データを反映させると画像のある場所が文字データとなって反映されてしまうのですが・・・
ちゃんと画像データとして反映させる方法があったら教えて下さい。
phpマニュアルのファイルアップロードのとこを目玉かっぽじってよーく読め
176 :
101 :2005/09/06(火) 12:10:17 ID:???
自己解決しますた。 ふつうにfopenでftpすればできますた。便利だなぁ。
いままで、画像のアップロードなんかする場合は一度tempディレクトリに
アップしておいて確認画面でtemp内の画像を表示、登録時には
tempディレクトリから正式なディレクトリへ移動っていう方法をつかってたんだけど、
>>162 のレス読んで画像ファイル自体をセッションファイルへ入れちゃうって
方法があるのを知って目から鱗なんだけど、実際にセッションファイルへ
バイナリファイルを入れるのはバイナリを一度文字列に変えなくちゃ駄目だよね?
serialize()かなんかを使うのかな?
178 :
nobodyさん :2005/09/06(火) 12:35:36 ID:3UvZ8ZqB
すみません、既存のブログにcsv読み込みができ、読み込んだcsvを自動でテーブルタグ化 って機能を追加するのって、現実的ですか? プログラムは素人なんですが、どのくらいの値段なんでしょうか?
>>178 読み込んでテーブルタグ化するだけなら簡単。
これだけだと2〜3万かな。
1万でもやる奴がいそうだが。
ブログに追加という部分が厄介で、多分可能だろうが
使っているブログシステムが何か分からないことには確答しかねる。
180 :
178 :2005/09/06(火) 13:02:06 ID:???
ありがとうございます。 ブログはblognです。データベースが使えないので。
どういう仕様なんだ。 blogの記事投稿画面でアップロードした画像を挿入するのと同じような感じで csvファイルをアップロードして、記事投稿のフォームにテーブル化したcsvを挿入、ということ?
182 :
nobodyさん :2005/09/06(火) 13:24:16 ID:5K+uGMJD
userのIDとパスワードをMySQLで管理してまつ。 会員サイトで、「パスワードを忘れた方はこちら」というのがあります。 よくあるのは、 登録時のメールアドレスを入力して ・パスワードが直接メルアドに届く ・パスワード再設定用のURLが届く サイト上で秘密の質問に答えるとその場でパスワード表示 などがあると思います。 セキュリティの面と、作成の手間を考え、どの方法が手っ取り早いかアドバイスお願いします。 メールアドレス宛にパスワード送るのならめっちゃ簡単だけど、それじゃセキュリティが甘いだろうし。 パスワード再設定用のURLが届く方法というのも具体的にどういう手法を使っているのか分からない。 助けてください。
>>183 メールアドレス+その他の情報との照合で
メールアドレスに送るのが良いのでは?
>>183 どっちもまずい
・メールアドレス(場合によって+ID)を入力->パスワード送信
他人がなりすまして送信しまくりなスパムが簡単に出来る。
共用メールアドレスなんて可能性もなきにしもあらず。
・リマインダでパスワード表示
偶然にでも画面見ちゃった第三者が、ユーザがパスワード変更するためにアクセス出来るし、
同じパスワードを複数サイトで使いまわす人がいるってのもあるし、テキストとして表示しちゃうのはまずい。
メールアドレスな方法だと、ワンタイムな変更用urlを発行してメールを送るとか。
システム側では、DBなりに変更用urlに使うランダム文字列とユーザID、発行日時(もしくは有効期限)を格納。
リマインダな方法だと、パスワードをそのまま表示でなくて、パスワード変更用のフォームを表示するとか。
>>184 メールで直接パスワードが届くのはどう思いますか?
俺個人としては「別にいいんじゃね?」って感じなんだけど、
神経質な友人は「漏洩したらどうすんの!」って言ってます。
ユーザー名は記述しないし、最初に登録したアドレスに送るわけだし、
仮にメールがバレタとしても特に問題はないような気はするんだけど。
187 :
185 :2005/09/06(火) 13:47:23 ID:???
よく分からない日本語に orz ×第三者が、ユーザがパスワード変更するためにアクセス出来るし、 ○第三者が、ユーザがパスワード変更する前にアクセス出来るし、
>>185 >メールアドレスな方法だと、ワンタイムな変更用urlを発行してメールを送るとか。
>システム側では、DBなりに変更用urlに使うランダム文字列とユーザID、発行日時(もしくは有効期限)を格納。
>リマインダな方法だと、パスワードをそのまま表示でなくて、パスワード変更用のフォームを表示するとか。
あー、この返かなり参考になります。
ランダム文字列を発行してユーザー情報に格納、
その文字列をフォームに入力する(もしくはURLクリックする)ことによって
パスワード変更のフォームが登場。
こんな感じでよいでしょうか。
>>183 パスワードをそのままサーバ側で記憶しているのは、セキュリティ(というかプライバシー)上望ましくない。
であるから、1、3番目は、無い。
191 :
178 :2005/09/06(火) 13:55:28 ID:???
>>181 まったくその通りです。わかりにくくてすみません。
mb_send_mailが遅いんだけどなんで? 10秒くらい関数から帰ってこない コマンドラインでsendmailを使っても遅いわけじゃないから なにかPHP側でやってるのか
193 :
190 :2005/09/06(火) 13:58:10 ID:???
最後ダブルクォート抜けてた・・・
メールの送受信は暗号化されない場合が多いし、メールのログにパスワードが残るのを嫌う人もいるだろう。
まぁ、それにしたってメールが暗号化云々というのは根本的にアレだし、ログの問題もログ消して、パスワードとっとと変更しちゃえばいい話なんだけど。
サイトで扱う情報の重要性、機密性とかサイトの規模考えつつ、適当なとこで妥協すればいいと思う。
>>188 それでもいいし、メール送信する時に
http://www.hoge.gov/password_change.php?code=変更用ワンタイムコード みたいなurlを本文に入れてあげれば、ユーザが入力する手間もなくなる。
んで、ワンタイムコードは変更用フォームにアクセスした時点か、フォームからサブミット掛かった段階で無効にする。
有効期限を発行から数時間くらいに設定して、フォームアクセス時にワンタイムコードを無効にすれば
セキュリティ的にも割とまともな物が出来るんじゃないかなぁ。
>>194 サイトで扱う個人情報はメアドくらいなものなのですが、
個人情報保護法がなんだかんだとうるさいご時世なので、
ある程度はしっかりとしないとと思った次第です。
194さんの方法を参考にあれこれと試行錯誤してみたいと思います!
196 :
182 :2005/09/06(火) 15:57:21 ID:5K+uGMJD
>>192 特に特別なことはやってないけどね。
普通のmail関数だとどう?
MD5でハッシュ化した文字列を解読することって可能?
>>198 解読って・・ハッシュは暗号化じゃないぞ?
ハッシュに該当する文字列を求めることは可能かもしれないが。
>>199 解読というか復元?
つまり、「93c92ee0505ea7c5ee8f6d92dc21114f」このハッシュから
元の文字列が何か分かりますか?と言うことでつ。
分かるとすれば、そう言う関数があるのか、
もしくはどのような方法を使ってどのくらいの時間がかかるのか知りたいのです。
>速度重視で4文字は約0.2秒でクラックできます すげぇなぁ…。んー、セキュリティ的に良いと思ったんだけどな…。
2ちゃんのトリップからキーを捜すようなもんだろ まず無理だろう
PHP+MySQLで顧客管理のサイトを作っています。 たとえば、 名前:年収:勤務地 aaaa:600:埼玉 bbbb:700:東京 cccc:550:千葉 dddd:500:神奈川 eeee:800:北海道 というデータを、年収を「600万以上」で検索しても 550万のデータも「条件90%合致」ということで表示したいのです。 検索条件に100%合致しなくても、ある程度は表示(100%から順にソートして表示)したいんですが、 どういう仕組みでそれを実現すればいいか思い浮かびません。 いい方法ありましたらご教授願います。
>>205 年収だけなら、540万円以上のデータを抽出して
600万円未満に90%合致フラグを立てれば良いだけ。
それ以外のデータは一致度の基準を立ててくれないと何ともいえない。
>>205 年収の600にたいする割合を計算して0.9以上で検索、ソート
WHERE 年収 >= 条件*0.9 ORDER BY 年収 DESC でいいんじゃないの? 合致度を出したければSELECTで (年収 / 条件) AS 合致度 って感じで出して表示すればいいかと。 100%以上は等しく100%と表示したければ、合致度 > 1 の場合は等しく 100 としてphp側で扱えばいい。 つか完全にSQLの話だわな
>>206 レスどうもです。
実は年収だけじゃなくて、勤務地も東京を指定しても
埼玉、神奈川といった近辺も合致させたいんです。
基準としては、年収-50万で合致率からマイナス10%、
近県ならマイナス10%といった減算方式で、80%までなら
抽出したい、といった具合です。
勤務地に関しては、名称ではなく数値で格納してあるので
埼玉:10
東京:11
神奈川:12
千葉:13
北海道:50
検索値の前後±1の地域をマイナス10%で抽出する、といった感じです。
どうやって抽出すべきか、どうやってソートしたらいいか全く見当がつきません。
よろしくお願いします。
>>207-208 なるほど、合致率もSQLで取得するんですね。
年収オンリーでの考え方は把握しました。どうもです。
条件が複合したときがさらに厄介です。
ヒント(っつか答え)はいただいたので、自分でも考えてみます。
>>211 スミマセン。
向こうでマルチになってしまいますがご勘弁を。
お邪魔しました&ありがとうございます。
なんでこう、仕様を小出しにしやがる奴が多いんだ
PHPをピーエッチピーと呼んでもいいですか?
せくせ、です。
>>203 ブルートフォースって四文字限定なら8^4でたった4096回試行するだけだよ?
そもそもどんなアルゴリズムでも4文字のハッシュが破られないなんてありえねぇよ。
でもまぁ、君のそのよりよいセキュリティを求める姿勢はすばらしい。
ぜひ強固なシステムを作ってください。
あ、ごめん4294967296だね。 でも4文字なら破れるのはいっしょ。
218 :
nobodyさん :2005/09/06(火) 20:40:43 ID:vNTyf3ur
これからPHP勉強しようとおもってまつ 開発環境で悩んでて今使ってる windows XP home にapache,php等をインストールするのがいいのか fedoraあたりのディストリをインストールしたlinuxPCのがいいのか 置き場所の問題もさることながらlinuxPC予定機がAMD550MHzなんでつ windowsは2.8GHzなんでちと迷ってます 開発は主にwindowsでやって、まとまってきたのをレン鯖にうpするのがいいのか 開発からlinuxのがいいのか ご意見お待ちしてます。
Windows環境で開発、Linuxの鯖へアップって方法でやってるけど それほど困ったことは無い。 メール関係だけは本鯖使ってテストするけど。 両方環境用意できるならLinux鯖の方が良いんでない?
220 :
nobodyさん :2005/09/06(火) 21:22:55 ID:oQLGoVGc
作りたいものが何も無いときって、どうやって作りたいものを探しますか?
>>218 Linux環境作れるんならlinux環境の方が良いんでは?
レンサバだと制限があるから、同じ設定にしたりも出来るだろうし。
よほどシビアなもの作るんで無ければ、取りあえずWinで作っても
十分大丈夫だろうけど
>>220 「探す」つーのと「作りたい」つーのは相容れない気がするが、
ネタを探しているのなら、web制作板かwebprog板の
作ってくれスレや探してますスレあたりをウロウロしてれば見つかるかと。
>>219 情報thx
ちなみにどの位の物を作ってるのかちょっと知りたいです
>>221 linux環境は作り難い、が正確なところでして
winで作ってレン鯖にうpで問題ないならそれに越した事がないのが現状でして
>>222 そうっすよねぇ。作りたいものを探すのは難しい・・・
>>223 レンサバ借りてるんなら、レンサバにアップして動作確認するのは
駄目なんですか?
俺はいつもそうやってます。
>>224 レンサバでも専用ならいいけど、共用なら何かあった時に他の人の迷惑になる可能性も
あるんでローカルでできる動作確認はなるべくローカルでやったほうがいいよ。
どんなアプリを書くかは知らないけど、レンサバと同じOSが用意できるのなら、
それに越したことはないと思うけど。
226 :
219 :2005/09/06(火) 22:07:57 ID:???
>>223 どの位のものって規模とかのことかな?
小さな企業サイトのCMSやオンラインショップとかがメインかな。
大抵そういうところは月額1万以下の共用レンサバって感じだし、
出来ることも限られるのであんまり環境を変えることなくWinで開発できる。
この規模だと複数人で開発することもないし、自分の環境だけで
完結できるってのも大きいかもしれない。
GDライブラリが入っているかいないかtelnetで調べる方法を 教えてください m(_ _)m
>>223 鯖構築経験がなくて、とっとと開発したいなら素直にWinでいい気がする。
スペック的には鯖にする予定のマシンがAMD(K6-3?)550MHzって話だけど、それだけあれば十分かと。
(ファイルゴリゴリ動かしたりするなら、逆にWin機より早いくらいかもしれない)
Win機の方が、鯖に上げて…って部分がなくなるから、開発は楽。
(リモートからでも、ローカルにあるような感じ編集出来る開発環境はあるけども)
鯖の勉強もしたいなら、Win機で開発しながら暇見て鯖構築していけばいい。
>>227 なんでわざわざtelnetで?
GD使うソースをアップして実際に動かして動くかどうかで見ればいいんじゃ?
>>223 参考程度に、私は WindowsXP + XAMPP + PHPEclipse って環境で勉強中
手元にLinux鯖もあるけど経験が浅くて躓く事が多いから、馴れてるWin環境を選んだ。
>>228 で出てるけど、自分が使い慣れてる環境で始めるのが余計な事を考えなくて済んで良いと思う。
MySQLのtextフィールドに、30KBのデータが入ったレコードが100件あるとします。 このとき、それらを全部取り出すと無駄だし負荷も高いので、 データのアタマの一部分だけ(たとえば3KBだけ)を全レコード抜き出したいのですが、 どういうSQLを発行すればいいのでしょうか・・・。 いろいろリファレンス見ましたが、抜き出すデータサイズを指定できるSQL命令は 無いようでした。PHPにもそういう関数はありませんよね・・・??
>>231 マルチバイトが含まれているときっちりサイズは合わないが
SELECT SUBSTRING(カラム名, 1, 3072)
ではダメ?
ereg()を使って文字列を比較したいのですが、検索したい対象語が多く あるので配列($word)にしたいと思っています。 この場合、ereg($word,$strings)で動作するのでしょうか? 試しているのですが動いてくれません。foreach文か何かで片っ端から やるしか無い?
>>232 ありがとうございます!
SUBSTRINGというのは初めて知りました。
サイズは厳密に合わなくてもいいのですが、
今回のtextフィールドには日本語の文章が格納されていまして、
その場合だとどこか(最後の一文字?)で文字化けが発生するのでしょうか、、、
>>233 >検索したい対象語が多くあるので配列($word)
この日本語だと「検索を実行する対象の文字列」が複数あるように読めるのに
>ereg($word,$strings)
これを見ると、「検索条件」が複数が複数あるように読めるんだけど、どっちだ?
つか、phpマニュアルくらい読もうや
http://php.s3.to/man/function.ereg.html bool ereg ( string pattern, string string, array [regs] )
どっちにしろ、stringってなってるから配列は無理な事はわかるだろ。
んで、検索条件が複数という事であれば、正規表現にはorに該当する表現がある。
(abc|zyx)
>>235 「検索条件」が複数あります。分かり難くてすいません。
csvのデータファイルから条件に合致する項目を抜き出すプログラムを
書いているんですが、その条件が頻繁に変わる可能性があるので、
できれば外部ファイルに、
$word = array('abc','def',・・・)といった形で持っていたかったんです。
>マニュアル
以後気を付けます。
phpの正規表現とperlの正規表現の違いを載せたサイトを教えてください。
PHPの正規表現のpregはPerl互換なので大体同じものです。
あながち間違いとも言えん罠
間違いとは言えないなぁ、確かに。 言葉は悪いけどその通りな部分も多少なり。 でも、言及してるASP厨、PHP厨とやらにオブジェクト指向を理解してない人が多いのは確かだろうけど 理解してないことが致命的になるような言語でもないしなぁ、別にいいじゃんって気も。 というか、WebProg上がりじゃないマ板の人間がそんなすげぇかって言うと 似たようなのがゴロゴロしてるような気がするけど(自分はマ板住人でWebProgも覗きに来る)。
どうでもいいよ。意図した通りにプログラムが動きさえすれば。
最近の厳しい個人情報保護うんたらかんたらのせいで、 もうWebサービスなんてやれないじゃないか!って思ってるのは漏れだけ? 100%のセキュリティなんて存在しないし、限りなくそれに近づけようとすれば莫大なコストがかかる。 それで何か情報が漏れでもしたら運営者が叩かれる。 あー、やってらんねぇ。 せっかくの革新チャンスなのに、つまらない世の中になってきたもんだ。
逆に、上手いことやって信用を得られれば他と差をつけることが出来る、とプラスに考えようぜ。 というか、個人情報保護法で困るようなセキュリティポリシだとそれはそれで不味い気が。
>>244 >個人情報保護法で困るようなセキュリティポリシだとそれはそれで不味い
そういうことを言ってるのではなくて。
どんな立派なポリシーを持とうが、どんなに気をつけてようが、被害に遭うときは遭う。
そうなったときの、運営者(開発者)が負わなければならない責任が大きすぎるのが問題。
それだけのリスクに見合うだけのコストを料金に上乗せできればいいが、そうもいかない。
そもそも、世間的に高セキュリティが簡単に構築できるもんだと思われてるんのが難点。
悪意ある犯罪者のせいで個人情報漏洩でもしたら、「セキュリティ対策をしてないほうが悪い」と
いうのが当たり前のような風潮になってるのが恐ろしい。
おまいさんはなんかズレてる。 なにがあったか知らんが茶でも飲め。
以下のようなプログラムで画像を送信するフォームを作成しているのですが 画像ファイルのある位置が文字ファイルで表示されるだけで画像を表示させることが出来ません。 例えばCドライブにある『Sunset.jpg』というファイルを送信しようとしても 確認画面では『C:\Sunset.jpg』と文章で表示されるだけで画像が表示されません。 画像をうまく送信できるようにするにはどうしたらよいのでしょうか。 <!-- 送信画面 db_form.php --> <FORM enctype="./image" name="pl_info" action="./db_pre.php" method="post"> <INPUT TYPE="hidden" NAME="_template_confirm" VALUE="./db_pre.php"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <input type="file" id="upfile" name="upfile"> <INPUT type="button" name="SUBMITBUTTON" value="確認画面へ" onClick="NEXT()">< </FORM> <!-- 確認画面 db_pre.php --> <?=$_POST['upfile']?> <form name="pl_info" action="./db_insert.php" method="post"> <INPUT TYPE="hidden" NAME="_template_confirm" VALUE="./db_insert.php"> <INPUT type="submit" name="INSERT_DB" value="登録する" onClick="next()"> </form>
249 :
nobodyさん :2005/09/07(水) 09:50:03 ID:npPFuG98
なんとなく解決はしてるんですが、いまいちスッキリしないので ( ゚д゚)ノ ハイ!質問! FORMからの変数受け渡しについて、 #test1.php <form action="test2.php" method="POST"> <input type="text" name="Test" size="10"> <input type="submit" value="送信"> </form> #test2.php <? print "Test ==> " . $Test; ?> →何も表示されない <? print "Test ==> " . $_POST['Test']; ?> →入力された値が表示される test2.php内で、上の$Testのように書けばOKとどこかで見たのですが、 下の$_POST['Test']としないとダメっぽいのはなぜでしょう。 勝手に上がPHP3X、下がPHP4以降用、とか考えているのですが。(今の環境は5.0.4 さらに、この$_POSTを使うとして、checkboxから1つまたは複数の値が渡される場合は、 普通に配列使って受け渡しできます? $_POST['chk[$i]'] とかでループ、表示するのかなぁと。 初歩的なことですが、どなたかお願いします。
>>249 変数の受け取り
<? print "Test ==> " . $Test; ?> → PHP4.1以前の書式
<? print "Test ==> " . $_POST['Test']; ?> → PHP4.2以降の書式
4.2以降でも、php.iniのregister_globalsをOnに設定すれば使用可能だけど、セキュリティ面を
考慮して下記のように変更されたので、特別な理由がなければ下の書式を使用すべし。
要素の配列
HTML側はname属性に [] を付ける
<input type='checkbox' name='chk[]' value='1'>
<input type='checkbox' name='chk[]' value='2'>
PHP側は下記のような形式で受け取る
for ($i = 0; $i < count($_POST['chk']); $i++)
echo $_POST['chk'][$i]
[$i]は直接の値(0や1)でも良い。
こんなのでいい?
>>247 確認画面で
<?php var_dump($_FILES); ?>
または
<?php print_r($_FILES); ?>
をやってみな。
ついでに$_POSTもやってみたほうがよいかも。
あと、送信画面のフォームタグを
<FORM enctype="multipart/form-data" (ry
に直す。
252 :
249 :2005/09/07(水) 10:41:32 ID:npPFuG98
>>250 うわぁ、完璧っす。(TдT) アリガトウ
for ($i = 0; $i < count($_POST['chk']); $i++)
echo $_POST['chk'][$i]
これで配列MAXまでループ・表示すね。
がんばります〜
PHP : 5.0.4
Apache : 1.3.33
の環境でエラーが出ます
if(hoge){
//変数代入処理がちょこっと
header("Location:
http://hoge.hoge ");
break; <-何故かココでエラー
}
原因は何が考えられますか?
ヒント下さい
255 :
254 :2005/09/07(水) 11:12:08 ID:pxwqcsIm
エラーメッセージ忘れました。 Fatal error: Cannot break/continue 1 level in /hoge〜 ようは駄目なのか・・・
>>254 breakで何をしたいんだ?breakってforループとかswitchの中で使うんだが。。。
単にそこで処理を抜けたいのならexitだと思う。
257 :
nobodyさん :2005/09/07(水) 11:36:30 ID:wV2Se0T2
PHP:4.3.10 Apache: 1.3.31 OS: Win XP の環境で、変数つきでincludeできません。 #test.php <?php print $_GET['name']; ?> #test2.php <a href="test10.php?name=aaa">アンカーから呼び出し</a> <?php include("test10.php?name=aaa"); ?> とすると、アンカーから呼び出すとaaaがprintされるのですが includeすると Warning: main(test10.php?name=aaa): failed to open stream: No such file or directory in c:\apache\users\xxx\home\test2.php on line 10 とエラーが出ます。 原因としてなにを疑えばいいのでしょうか?
258 :
254 :2005/09/07(水) 11:39:47 ID:???
>>256 ありがとう
マニュアル見たらそうでした。
どっかのスクリプトで使ってたんでこれで良いのかとオモテタ。。。
>>257 includeはそのように使用するものではありません
無理矢理やるとすると、以下のようになります
#test.php
<?php
print $name;
?>
#test2.php
<?php
$name = $_GET['name'];
include("test.php");
?>
>原因としてなにを疑えばいいのでしょうか?
includeに対する貴殿の知識不足が原因です
>>260 PHPで無理ならスレ違いだと思うんだが?
263 :
260 :2005/09/07(水) 12:21:31 ID:???
本音を言えば今後更新が極力楽になればどれでも良いんですorz 鯖がせっかくSSI、PHPに対応しているので出来ればやってみたいんですが、触った事が無いので・・・
>>260 JavaScript使うならDreamWeaver使ったほうが楽じゃね?
ブラウザによってまだ挙動がことなることもあり
コードが煩雑になりやすいから
PHPなどのサーバサイド言語つかったほうが楽と言えば楽だけど。
>>263 俺もPHPに触ったこと何て無いぞ。
>>257 include てのは外部ファイルを読み込み時に使うモンだ。
266 :
257 :2005/09/07(水) 12:37:00 ID:???
>>259 わ、そうだったんですか!
勉強になりました。
精進します。ありがとうございました。
267 :
260 :2005/09/07(水) 12:52:01 ID:???
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>テスト</title> </head> <body> <table width="800"><tr> <td> <?php include_once("○○.txt"); ?> </td> </tr></table> <table><tr> <td width="200"> <?php include_once("menu.txt"); ?> //左メニュー用の内容タグだけのテキスト </td> <td width="588"> 内容 </td> </tr> </table> </body> </html> ↑これで表示はされましたけど大丈夫ですか?
>>267 大丈夫っちゃ大丈夫だけど、.txt(おそらくテキストファイル?)を読み込むならreadfileで。
includeをする対象は基本的に「他のPHPファイル」。
まあ頑張ってくれい。
すみません、質問させていただきます。 ページ間を移動させるための、以下の様な形のリンクを 作りたいと考えております。 << 1 | TOP | 2 >> 移動するというか、includeするような形が望ましいとは 思っております。例えば index.php 001.php 002.php 上記のような構成になっているとして、これから先 【***.txt】ファイルは追加することになるのですが それを見越した上で、自動で数字の部分を読み込ませる 機能も備え付けておきたいのです。 どのような考え方で作成すれば宜しいでしょうか? もしくは参考となるHP等はございますか?
PATH INFO使えば?
仕事のふりのし過ぎで眠い
>>269 index.php?page=n てな感じにして、
・呼び出すファイルはindex.phpのみ(page.phpとかでもおk)
・page=nでページ番号指定
・ページ番号 n、n-1、n+1 の存在チェック。file_exists関数を使う。
(00nの形式にするためにsprintf辺りを使う)
・include関数(readfileの方がいいかも?)を使って、該当テキストを出力。
・前後のページが存在すればそれぞれリンクを作成。
こんな感じでいいんじゃないかな。
デメリットとしては、
・表示の度にfile_existsとかするので若干負荷がかかる
・ページのどれかが歯抜けになっていると、えらいことになる
・一覧表を作るときに一工夫が必要
>>271 「俺、いま仕事のふりしてます!!」って大声で叫べ。
一気に眠気さめるぞ。
>>269 まずいくつか不明瞭な点。
・どこにそのページングリンクをつけたいのか?(index.phpかな)
・***.txtはページングに関係あるのか?(ただ同じ階層に入るだけかな)
・ページングさせるのは、[0-9]{3}.phpになるのか?(そうなんだろな)
上記の括弧内の条件として考えると、
paging.phpなどを作って、そこでページング部分だけをechoし、それをinclude(必要ならrequire)。
で、paging.phpはこんな形になるかと。
・その階層のファイルリストを引っ張り出す
・その中から^[0-9]{3}\.php$でmatchしたものだけをページングリンクの対象に
・現在の表示ページから前後のページ数などを計算してリンクとして出力
どーでしょ。
>>272 それならPATH INFOを使ってページ番号を取得
本文のデータはデータベースに格納
という仕様の方がSEO的にもサーバ負荷的に良くないか?
ページの有無はDBで判別できるし
SELECT文を工夫すれば番号に抜けがあっても前後が表示できる。
>>270 >PATH INFO使えば?
具体的にどんな感じででしょうか?あ、すみません、調べます。
>>272 さん
有難うございます。とても参考になりました!
というか、そのような感じで作ってみまふ。
ちなみに・・・参考までになのですが、デメリットの
一覧表を作るときに一工夫が必要とあるのですが
例えばどういったものですか?
用途としてはFAQのようなものです。
一覧表が必要ならなおさらデータベースの方がよさそうだが。
オレなら
>>275 でやるな。
>>272 の言う、一覧表の一工夫もいらないし。
SEO考えたらPATHINFOと織り交ぜてやれば完璧かね。
DB使えるんなら
>>276 だろうけど。
>>275 さん
書き込んでから、気付きました。申し訳ありません。
まったく其の通りの条件です。不明点が多く、すみません。
>>276 さん
DBですか!うーん、もしかするとそれも1つの手かもしれません。
ただ、私自身の能力が追いつかないです・・・。
>>270 さん
さん付け抜けててすみません。故意ではないです(゜o゜;
ん〜、272さんと275さんの考え方は同じですかね?
もしかして、私にはできない?
>>276 実行環境が許せばそれもありかと。
>>277 一覧表の表示の仕方は、次のような感じになると思うけど、
[ページ番号] [タイトル] ([必要に応じて、作成日とか他の項目])
タイトルや他の項目をどうやって取得するかの辺りに一工夫が必要。
***.txtにその情報を入れてみたり、別ファイルにしてみたり等々。
(ページが歯抜けした時の心配事じゃないです。)
283 :
260 :2005/09/07(水) 17:56:14 ID:???
<td width="588" valign="top"> <?php readfile("menu.txt"); ?> </td> これで良いでしょうか? サーバーUPしないと見れないんですねぇ 色々と難しい・・orz
>>281 >>272 は、page.php が ***.txt を読み込む形。txt を追加Upしていく。
>>275 は、リンクを表示するpaging.phpを、001.php 002.php 003.php 004.php...に
includeする形。php を追加Upする。
>>269 をどう解釈したかの違いかと。
>>283 それでええよええよ。
285 :
nobodyさん :2005/09/07(水) 19:28:36 ID:npPFuG98
Apacheのmod_auth_mysqlを使用し、BASIC認証からDB認証を行い、 その後、$_SERVER['PHP_AUTH_USER']、$_SERVER['PHP_AUTH_PASSWD']を使用してアクセス制御しています。 現状、ログアウト=ブラウザを閉じる、でキャッシュクリアしています。 今回まともなログアウトボタンをつけたいと思っていますが可能でしょうか。 軽くsession_destroy();でいいのかと思いきや、できなかったので・・・。 PHPでBASIC認証(header()使って云々)という方法以外のやり方で何かありましたらご教授くださいませ。 要は今のままのDB認証で、それにログアウトボタンをつけ、 押すと再プロンプト経由でトップ画面に戻る、みたいな感じです。 お願いします。
>>251 入力するプログラムはこんな感じでしょうか?
<!-- 送信画面 db_form.php -->
<FORM enctype="multipart/form-data" name="pl_info" action="./db_pre.php" method="post">
<INPUT TYPE="hidden" NAME="_template_confirm" VALUE="./db_pre.php">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<input type="file" id="upfile" name="upfile">
<INPUT type="button" name="SUBMITBUTTON" value="確認画面へ" onClick="NEXT()"><
</FORM>
<!-- 確認画面 db_pre.php -->
<?php print_r($_FILES);?>
<?php print_r($_POST);?>
<http>
(ry
<?=$_POST['upfile']?>
<form enctype="multipart/form-data" name="pl_info" action="./db_insert.php" method="post">
<INPUT TYPE="hidden" NAME="_template_confirm" VALUE="./db_insert.php">
<INPUT type="submit" name="INSERT_DB" value="登録する" onClick="next()">
</form>
(ry
</html>
こんな感じにしたらどんな感じになりましたか?
>>287 アドレスバーに
『
http:// (サーバーのアドレス)/pre2.php?_template_confirm=.%2Fpre2.php&MAX_FILE_SIZE=30000&upfile=C%3A%5Ctop.JPG&page=pre』
と表示され、ページには貼り付けた画像はおろか文字さえも表示されませんでした。
>>288 <form action="./db_insert.php" method="post"> (関係ない部分を略)
としているのに、
pre2.phpを呼び出していたり(db_insert.phpの筈)、
GET扱いになっていたり(method="post"の筈)、変ですね。
onClick="next()" で呼び出しているJavaScriptがおかしいんじゃないかな。
と、ミスった。 上で、db_insert.phpとしているのは、全部 db_pre.php の打ち間違い。
>>289-290 すみません・・・
実は
>>288 を貼った後にテスト用プログラム<form2.php>と<pre2.php>を
作成していたので誤ってその時のプログラムを貼ってしまいました・・・
正しくはこちらのプログラムです・・・ <!-- 送信画面 form2.php --> <FORM enctype="multipart/form-data" name="pl_info" action="./pre2.php" method="post"> <INPUT TYPE="hidden" NAME="_template_confirm" VALUE="./pre2.php"> <table><tr><td>画像選択</td> <td><input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <input type="file" id="upfile" name="upfile"></td> </tr></table><BR> <TABLE width="500"> <TR><TD width="250" bgcolor="#FFFFFF" align="CENTER"> <INPUT type="button" name="SUBMITBUTTON" value="確認画面へ" onClick="NEXT()"> <INPUT type="hidden" name="page" value=""> </TD></TR></FORM> <!-- 確認画面 pre2.php --> <?php print_r($_FILES);?> <?php print_r($_POST);?> <http> (ry <table><tr> <td width="150" bgcolor="#FFFFFF" align="center"><?=$_POST['upfile']?></td> </tr></table> <form name="pl_info" enctype="multipart/form-data" action="./insert2.php" method="post"> <INPUT TYPE="hidden" NAME="_template_confirm" VALUE="./insert2.php"> <input id="upfile" name="upfile" type="hidden" value="<?=$_POST['upfile']?>"> <table width="500"> <tr><td width="250" bgcolor="#FFFFFF" align="CENTER"> <INPUT type="submit" name="INSERT_DB" value="登録する" onClick="next()"> </td></form> (ry </HTML>
質問させてください
データベースにURL(
http://xxx.com/zzz.html :varchar)を格納しています。
そして、その列を配列に入れ<a href ="$URL['url']">〜</a>という風にして
リンクを張ろうとしましたがエラーが出ました。
どこが悪かったかと、改善策を教えていただけないでしょうか?
本当にくだらない質問ですがよろしくお願いします。
>>293 どんなエラーなのか教えて下さい。そうでないと分かりません。
295 :
293 :2005/09/08(木) 00:07:24 ID:???
>>294 早い返事ありがとうございます。
すいません、必要なことを何も書いていませんでした・・・
<?php if( ! $conn = mysql_connect( '***', '***', '***') ){
die( 'error' );}
mysql_select_db( 'party', $conn );
header('Content-Type: text/html; charset=shift_jis'); ?>
<HTML><HEAD><TITLE>test</TITLE></HEAD><BODY>
<?php
$rs = mysql_query( "select shopname,concat(locname,adr) fadr,typename,phone,pg from shop s,type t,loc l where s.typecd=t.typecd and s.loccd=l.loccd order by locname desc,typename;", $conn );
echo "<table border=3>";
echo "<tr><th>店名</th><th>住所</th><th>業種</th><th>電話番号</th></tr>";
while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC ) ){
echo "<tr>";
echo "<td>" . $rec['shopname'] . "</td>";
echo "<td>" . $rec['fadr'] . "</td>";
echo "<td>" . $rec['typename'] . "</td>";
echo "<td>" . $rec['phone'] . "</td>";
echo "<td>" . <a href="$rec['pg']">$rec['shopname']</a> . "</td>"; ←※
echo "</tr>";
}
echo "</table>";
mysql_free_result( $rs );
mysql_close($conn);
?> </BODY> </HTML>
pg(varchar)にURLを入れています。
エラーの内容ですが、Parse error: parse error, unexpected '<' in C:\phpdev5\www\test.php on line 35 と出ていました。
35行目とありますが、ここでは矢印を出している行になります。見難いソースですがよろしくおねがいします
>>285 BASIC認証にログアウトはないでしょ、サーバ側からセッションを破棄する
術はないと思うけど
一度認証が済むと、正しいユーザ名とパスワードがクライアントから送信されつづける
PHPから出力されないファイルを保護するなどの目的で、どうしてもBASIC認証が
はずせないならB認証+PHPのセッション機構でユーザーステータスを管理する2重の
認証にするしかないのでは
setcookieでクッキーを発行できないサーバーとかってあるのでしょうか? 手本をコピペしてサーバーにアップロードしたのに全然クッキーききません…(−−; CGIで動くタイプのPHPなのがいけないのかなぁ…
>>297 ほとんどない。9部9厘スクリプト側の問題
サーバから送信されてるヘッダーにSet-Cookieフィールドが
あるかどうか確認すればサーバの制限かどうか当りはつけられる
300 :
297 :2005/09/08(木) 00:29:14 ID:???
>>299 やっぱそうですよねー
perlで書かれたフリーのCGIでは普通にクッキー発行できてるので、
サーバーのPHPの仕様かなにかかと思ったのですが…(ちなみにサーバーはさくらインターネット)
ちょっとスクリプト見直してみます。PHPて難しい…
301 :
295 :2005/09/08(木) 00:35:43 ID:???
echo "<td>" . <a href="$rec['pg']">$rec['shopname']</a> . "</td>"; ←※ echo "<td>" . <a href="".$rec['pg']">$rec['shopname']</a> . "</td>"; コピペした奴なら↑こうすればいいんじゃないかな。 DB関連でParse errorは出ないと思う。たぶん。
302 :
301 :2005/09/08(木) 00:36:43 ID:???
間違った。名前欄に295って書いちった。
>>295 の間違い
304 :
293 :2005/09/08(木) 00:59:21 ID:???
>>295 ありがとうございます
参照URLを見てみましたがちょっと問題解決には至らないようでした・・・すいません
>>301 ありがとうございます
ご提案いただいたものをやってみましたが無理でした・・・
>>302 他にも訂正すべき場所が・・・
>>298 の言ってるように、<a href= とか、</a> とかの部分をきちんと文字列として書かなきゃいけないよ。
色々書き方があるけども、例えば次のような感じ。
echo "<td><a href=\"".$rec['pg']."\">".$rec['shopname']."</a></td>";
"〜"の部分が文字列になる。\" は文字列の中の " を表す。(文字列の区切りの"と区別するため)
いっそのこと " を使わずに ' を使えば更に簡単に書ける。
306 :
297 :2005/09/08(木) 01:23:20 ID:???
自己解決しました! setcookieは<HTML>より前に書かなきゃだめなんですねー。ググったらそんな事書いてありました。 テキストのサンプルは<BODY>の中にsetcookieが書いてありました。 テキストのくせにこんな間違いをしていいのか…
307 :
293 :2005/09/08(木) 01:24:45 ID:???
>>305 おお!すごい!できました!
本当にありがとうございます!
html文をクォーテーションで囲むってのをやってなかったのが悪かったんですね・・・
えっとしつこくてすいませんが
<a href=\"".$rec['pg']."\">" の.$rec['pg'].
両端につけた.は変数を識別させるためのものですよね?
>>298 >>301 >>303 >>305 こんな時間までみなさん色々やってくださってありがとうございました。
感謝の気持ちでいっぱいです!!
>>306 まあそんなとこだろうと思ってた
HTTPの仕様上ヘッダーフィールドはコンテントボディより先に送信する必要がある
アウトプットバッファが効いてれば、コード上で、本文の出力よりも後にsetcookie()や
header()を記述することは可能
error_reportingが適切に設定されてれば、Warningが出てすぐ判るんだけどね
www.php.netのミラーはjp2.php.netがLIVEな方だったの。 ずっとjp.php.netを参照してた。
よく分からんが同期が遅いだけじゃね? 確かに前は更新止まってる時期とかあったけど。最近は特に問題ないような
www…を参照する派だからどうでもいい
313 :
(1/2) :2005/09/08(木) 02:46:31 ID:???
現在インターネットを通してどこからでも文章の入力や画像データの貼り付けを行うことができるデータベースを作成しております。 送信画面で入力したデータが確認画面で表示され、それでOKならば正式に登録完了となるのですが送信画面で画像データを設定しても 確認画面では認識されません。 以下がそのデータなのですがどこかおかしいところはないのでしょうか。 <!-- 送信画面 school.html --> <HTML> (中略) <FORM enctype="multipart/form-data" name="pl_info" action="./form.php" method="post"> <INPUT TYPE="hidden" NAME="_template_confirm" VALUE="./form.php"> <table> <tr><td>タイトル</td> <td><input type="text" id="title" name="title" size="30"></td></tr> <tr><td>文章</td> <td><TEXTAREA name="text01" id="text01" cols="80" rows="10"></TEXTAREA></td></tr> <tr><td>画像選択</td> <td><input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <input type="file" id="upfile" name="upfile"></td></tr> <tr><td>経歴</td> <td><TEXTAREA name="text02" id="text02" cols="80" rows="10"></TEXTAREA></td></tr> </table> <BR> <TABLE width="500"> <TR> <TD width="250" bgcolor="#FFFFFF" align="CENTER"> <INPUT type="button" name="SUBMITBUTTON" value="確認画面へ" onClick="NEXT()"> <INPUT type="hidden" name="page" value=""></TD> </FORM> (中略) </HTML>
314 :
(2/2) :2005/09/08(木) 02:48:15 ID:???
<!-- 確認画面 form.php --> <?php $hizuke = DATE("YmdHis"); if(!is_uploaded_file($_FILES['upfile']['tmp_name'])) { echo "ファイルを保存できませんでした!<br>\n"; echo "元の画面に戻るにはブラウザの『戻る』ボタンをクリックして下さい。"; exit; } else { copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");} ?> <HTML> (中略) <table> <tr><td width="360" bgcolor="#FFFFFF" align="center"><?=$_POST['title']?></td></tr> <tr><td width="210" bgcolor="#FFFFFF" align="LEFT"><?=$_POST['text01']?></td> <td width="150" bgcolor="#FFFFFF" align="center"><?=$_POST['upfile']?></td></tr> <tr><td width="360" bgcolor="#FFFFFF" align="LEFT"><?=$_POST['text02']?></td></tr> </table> <form name="pl_info" enctype="multipart/form-data" action="./insert.php" method="post"> <INPUT TYPE="hidden" NAME="_template_confirm" VALUE="./insert.php"> <input id="title" name="title" type="hidden" value="<?=$_POST['title']?>"> <input id="text01" name="text01" type="hidden" value="<?=$_POST['text01']?>"> <input id="upfile" name="upfile" type="hidden" value="<?=$_POST['upfile']?>"> <input id="text02" name="text02" type="hidden" value="<?=$_POST['text02']?>"> <table width="500"> <tr><td width="250" bgcolor="#FFFFFF" align="CENTER"> <INPUT type="submit" name="INSERT_DB" value="登録する" onClick="next()"></td> </form> (中略) </HTML>
>>313 <INPUT type="button">はフォームの内容を提出(submit)しない筈。
にも関わらず、
>>288 の内容と、
>>313 で次の画面には移動していることから、
onClick="NEXT()" で呼び出されるNEXT()の中でGET形式でsubmitされていると考えられる。
なので、
<input type="submit">を使うか(next()ではsubmitしないようにする)、
NEXT()の中で正しくsubmitすればいいんジャマイカ?
最低限エコーデバッグくらいしようよ
317 :
nobodyさん :2005/09/08(木) 08:46:53 ID:xSNS150A
>>309 お礼遅くなってすいません
わかりました ありがとうございます
リファレンスマニュアル100回読み直してきますorz
>>315 >>313 の<INPUT type="button">を<input type="submit">に変更すると以下のようなエラーメッセージが表示されました。
Warning: copy(./image/20050908081609.jpeg): failed to open stream: Permission denied in /var/www/html/vivid/school/form.php on line 8
これは『copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");』の書き込みが失敗したということなのでしょうか?
319 :
軟式PHP :2005/09/08(木) 09:24:53 ID:???
>>318 めっちゃパーミッションエラーって書いてるやん。
詰まったらすぐ聞かずに少しは調べたほうが頭に残ると思われ。
>>318 imageフォルダのパーミッションを『rwxrwxr-x』に変更すればフォルダ内にファイルがコピーされました。
失礼いたしました。
後はコピーしたファイルを読み込むだけです。
<IMG src="image/(コピーしたファイル名)">
と入力するだけなのですがどうすれば上手くいくのでしょうか?
<IMG src="image/<? "$hizuke";?>.jpeg">
で認識するとは思えませんが・・・
>>320 思える思えないは関係ない。
とりあえずやってみろ。
エラーが出たらエラーメッセージを検索しろ。
それでも分からなければ聞きに来い。
すみません・・・ <IMG src="image/<? $hizuke = DATE("YmdHis"); "$hizuke";?>.jpeg"> を試してみたらやっぱり駄目でした。
<?php $hizuke = DATE("YmdHis"); copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg"); ?> で設定したファイル名を読み出すには同じように $hizuke = DATE("YmdHis"); を設定するしかないと考えたのですが・・・ なかなか上手くいかないです
<? $hizuke = DATE("YmdHis"); // 変数hizukeに date関数の結果を代入 "$hizuke"; // さて、ここは何をしているのでしょう? ?>
325 :
nobodyさん :2005/09/08(木) 11:45:11 ID:UR6jYi9e
どんなエディタを使えばいいですか?
>>323 お前は"Hello world"からやった方がいいよ。
php4です。 配列の要素から1個だけ削除とかって可能でしょうか? 例えば $test[0] = "1002"; $test[1] = "9"; $test[2] = "35"; $test[3] = "87"; $test[4] = "127"; みたいな感じで$testという配列がある状態で 内容が"87"の要素だけを削除したいのです。 (実際の処理はある値を配列から探し出し、該当する物があれば消す といった処理をしたいです) 結果的に$testの中身が $test[0] -> "1002"; $test[1] -> "9"; $test[2] -> "35"; $test[3] -> "127"; にしたいんですけど..よろしくお願いします。
可能だよ。
配列のキーは連続じゃなくても困らない事のほうが多いんだが? 本当に間詰めないとダメか?
あと、特定の値を持つ要素を消す(持たない要素を抽出する)方法は いくつもあるんだが、別の方法を考えてみたか?
332 :
328 :2005/09/08(木) 15:12:09 ID:???
>>329 よろしければ、教えてください。
>>330 その$testをimplodeしてSQLの条件(where aaa in ($implodeした変数)として使いたいので
できれば配列をつめたいんですよねえ。
>>331 今考えてみたのが
$in_dataは目的の文字列
foreach ($test as $one) {
if($one!=$in_data) $new[]=$one;
}
$test =$new;
ってな感じです。
ただもっとスマートにできるものなのかなと今考えています。
333 :
nobodyさん :2005/09/08(木) 15:17:09 ID:sy+tsgYD
質問です。あるフォルダを、htaccessを使って、直リンク対策しています。 リファラーが自分のところのドメイン以外だとエラーページに飛ぶ設定です。 /public_html/lib/ ←このフォルダ。 メールからのクリックでこのフォルダにあるページに飛ばそうと思い、 /public_html/ フォルダにリダイレクト用のページを作りました。 header("Location:〜")と <meta>のリフレッシュを試しましたが どちらもエラーページに飛んでしまいました。 リファラーが送られていないようです。 どうすればリファラー付でページに飛ぶことが出来るのでしょうか。
>>333 不可能です。
> メールからのクリックでこのフォルダにあるページに飛ばそうと思い、
これだと当然、Refererは取れません。
しかもプログラム側じゃなくて、.htaccessでReferer制限してるんですよね…。
プログラム側で制限しているのであれば、
メールでクリックされるURLに、ランダムなGET引数を仕込むなりして
メールから来たことをチェックできます。
>>334 メールクリックでRefererが取れないのは分かります。
なので、アクセス制御をかけていない/public_html/にあるファイル(例えば redirect.php)に
一度とばしてから、この redirect.php が /lib/ 内のファイルへ転送させる、と言う仕組みにしたいんです。
>>333 Location:〜も<meta>のリフレッシュも、リファラを吐かないのが仕様。
そこのURI自身にリファラ相当のものを仕込むしかないよ。
337 :
333 :2005/09/08(木) 15:48:36 ID:???
>>336 やはりそうですか…。
他の手を探してみますOrz
>>337 リファラ相当といったけど、セッションID仕込めばいいんだよ。
Locationでもmetaリフレッシュでもクッキーは効くから、それ使ってもいいけど。
339 :
333 :2005/09/08(木) 16:16:46 ID:???
>>338 ありがとうございます。
まさしく今、セッションIDで構築し始めたところでした♪
最初からこうすれば良かったんですね。
>>324 <IMG src="image/<?php $time = DATE("YmdHis"); echo"$time";?>.jpeg">
で画像を貼ることが出来ました!!
しかし入力した文章が文字化けを起こしたり画像が乱れたりするのですがこれはフォントの問題だと思いますので
こちらは自分で何とかしてみます。
<input type="text" id="title" name="text00" size="30"> で入力した文章を読み出そうとすると文字化けを起こします。 htmlファイルとphpファイルを違う書体で編集していることに原因があるのですが。 ただ表示する書体を変更しただけでは解決しません。 ・htmlファイル・・・SHIFT−JIS ・phpファイル ・・・EUC これを解決するにはhtmlで入力した文章をphp見ることが出来るようにするには どうすればよいのでしょうか?
342 :
nobodyさん :2005/09/08(木) 17:32:03 ID:sy+tsgYD
>>341 $test00 = mb_convert_encoding($_POST["text00"],"SJIS","EUC-JP");
343 :
nobodyさん :2005/09/08(木) 18:23:19 ID:YSOhy9W+
入力されたURLのページの特定の部分だけを表示するようにしたいんですがどうすればいいですか?
(例として2chのスレを入力したら
>>1 と
>>2 のレスだけを表示するようにする みたいな)
どんなページのどのように特定される部分かを決めてくれないと答えられない
345 :
nobodyさん :2005/09/08(木) 19:07:35 ID:YSOhy9W+
>>345 サイトを読み込んで、正規表現を使って件数分抽出する
347 :
nobodyさん :2005/09/08(木) 20:11:34 ID:YSOhy9W+
>>342 <?
$title = mb_convert_encoding($_POST["title"],"SJIS","EUC-JP");
print($title);
?>
と入力しても文字化けを起こすどころか表示すらされないんですけど・・・
つか、引数に含まる記事をDB等から引っ張って表示すれば良いだけなんじゃねーの?
351 :
nobodyさん :2005/09/08(木) 20:20:01 ID:CBnc7l0P
>>348 元のhtmlファイルはpostで送ってますが・・・
>>350 自分でSMTPしゃべらせるか、PEARのライブラリ使うか
PHPMailerライブラリでも使え。
>>343 一般的な処理の手順としては、
1. 入力されたURLのページからデータを取得 - ファイルシステム関数、fsockopen
2. 取得したデータの希望する場所を抜き出す - 正規表現やら文字列操作の関数
3. それを出力
つー形になるかと。
実際のソースコードがどうなるかは、相手のサイト次第。
>>348 string mb_convert_encoding ( string str, string to-encoding [, mixed from-encoding])
なので、SJISの文字列をEUC-JPに変換するなら、指定の仕方が逆だね。
>>353 >自分でSMTPしゃべらせるか
スマソ、ド素人なので言ってる意味がわかりません。orz
>>355 いや、自分で言ってることだよ
>socket関係?
socket関数を利用してSMTPの仕様にしたがってMTAとやり取りをする。
基本はこれ。
>>354 ありがとうございました!
上手く認識いたしました。
socket関数ってマニュアルとか読んでもかなり意味不明な気がしる。
少なくとも漏れは使ったことないね・・・
>>357 つか、相手(よその鯖)のMTAがsocket接続を受け入れてくれるもんなの?
だったら、不正中継送信とか簡単じゃね??
>>355 Webサーバとのやり取りに HTTP(HyperText Transfer Protocol)を使うように、
メール関係には、SMTP(Simple Mail Transfer Protocol)という決まり事を使うんよ。
実際にそれらを使う時には、相手サーバに接続して コマンド送信・応答受信、
次のコマンド... のようなやり取りをするので、「しゃべる」と表現する事も多い。
メール送信・中継(SMTP)は仕組み上誰に届けるかしか気にしないので、
>>350 にあるような他鯖のSMTPを使うこともできる。
(spamとか成りすましが問題になってきたので、いろいろ制限されるようになったけど。)
ってか、
>>350 のような「他鯖のSMTPに渡す」のって何かメリットあるの??
どうせ他鯖に渡すための元のメール生成は自鯖のスクリプトでやるんだし、
結局他鯖のSMTPに渡すことで軽減される負荷とかってあるのだろうか?
>>362 複数の宛先がある時は効果絶大。他鯖にとっては迷惑な事この上ないかと。
365 :
↑ :2005/09/08(木) 22:25:55 ID:???
と、、、RCPT TOが複数の場合の話ね。(メッセージbodyが1つ)
>>364 だよねぇ、超迷惑だよなぁ。。。
こんなことを商売でやってて、
他社から文句言われないのだろうか?
>>350 の業者。
>>332 implodeするんだったら配列を詰める必要はないような気がする。
以下のように1行で配列の要素を消して配列を詰めることもできるけど、
foreach よりもスマートだとは思えない。
$test = array_values(array_filter($test, create_function('$a', 'return $a != ' . $in_data . ';')));
array_diff
array_searchとarray_splice組み合わせるとか
以下のソースで画像を読み込むと画像がおかしくなってしまいます。 同じjpegの画像ファイルを読み込んでも画像がおかしくなります。 画像がおかしくならずに完全な状態で画像ファイルを読み込むにはどうすればよいでしょうか。 もしかして同じjpeg画像でも拡張子が『JPG』や『jpeg』で違うものと処理されたり 画像ファイルの大きさによっておかしくならなかったりするとか・・・ なお、画像ファイルの保存先のフォルダ(image)の属性はちゃんと777にしています。 〜〜 school.html 〜〜 <FORM enctype="multipart/form-data" name="pl_info" action="./form.php" method="post"> <INPUT TYPE="hidden" NAME="_template_confirm" VALUE="./form.php"> <input type="file" id="upfile" name="upfile"> <INPUT type="submit" name="SUBMITBUTTON" value="確認画面へ" onClick="NEXT()"> <INPUT type="hidden" name="page" value=""></TD> </FORM> 〜〜 form.php 〜〜 <?php $hizuke = DATE("YmdHis"); if(!is_uploaded_file($_FILES['upfile']['tmp_name'])) { echo "ファイルを保存できませんでした!<br>\n"; echo "元の画面に戻るにはブラウザの『戻る』ボタンをクリックして下さい。"; exit; } else { copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");} ?> (中略) <IMG src="image/<?php $time = DATE("YmdHis"); echo"$time";?>.jpeg" alt="upfile">
372 :
370 :2005/09/09(金) 00:31:31 ID:???
>>371 設定していません・・・
設定していたときは30000に設定していました
もしかしてこれが原因で画像がおかしくなっているとか・・・
373 :
370 :2005/09/09(金) 00:55:04 ID:???
>>372 の訂正
UPLOAD_MAXは全く設定していません
>>370 php.ini -> upload_max_filesize
376 :
370 :2005/09/09(金) 01:59:08 ID:???
>>375 すみません・・・phpについてはまだまだ素人なものでして・・・
>>370 何のためにマニュアルがあると思ってんの?
マニュアルを読んでてもUPLOAD_MAXの説明が書かれていない上に 「UPLOAD_MAX」で検索しても書かれている説明がよくわからないんです・・・
質問ですが、プログラムってどっかの会社とかから頼まれてシステムとか作るときに 著作権とかはどうしてんの?ちょっと疑問に思ったもので。
381 :
380 :2005/09/09(金) 03:09:43 ID:???
0件ならば「Not Pages」1件ならば「1 Page」2件以上ならば「nr Pages」という具合に異なるメッセージを表示したいですが、もっとスマートにできないものでしょうか? $arr = array(); $arr[] = ($num == 0) ? "Not" : $num; if ($num != 1) $arr[] = "s"; echo "<span>". join(" Page", $arr) ."</span>";
>>382 printf厨でもいいですか?
printf("<span>%sPage%s</span>",
($num == 0 ? "No" : $num) . " ",
$num > 1 ? "s" : "");
>>383 ふむふむ、printf関数を使うことなど思いつきもしませんでした
今回はそのまま文字列として返したいので、sprintf関数を使うことにします
本当にありがとうございました
>>382 一番楽なのは余計なことせずに "$num Page(s)" で終わらすって手もある(英語圏の香具師らもけっこうやる)。
とにかく色々ありうるので、自分の好きな方法でやればいい。
蛇足かもしれんが、Not Pagesだと「ページじゃない」って意味になってしまうよ。
>>385 早速修正しておきました
ご指摘ありがとうござケコーン汁!!
>>370 copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");}
?>
(中略)
<IMG src="image/<?php $time = DATE("YmdHis"); echo"$time";?>.jpeg" alt="upfile">
(中略)の処理中に秒の数値が変わる可能性あり
そのまま$hizuke使え
388 :
370 :2005/09/09(金) 08:45:35 ID:???
>>387 駄目です・・・
以下のソースを設定しても問題は解決しませんでした・・・
それどころか画像ファイルの大きさによっては認識しないものもあります。
(htmlファイルで画像サイズの設定は行なっていません)
copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");} ?>
(中略)
<IMG src="image/<?php echo"$hizuke";?>.jpeg" alt="upfile">
390 :
370 :2005/09/09(金) 09:29:22 ID:???
391 :
370 :2005/09/09(金) 09:38:32 ID:???
>>390 の続き
また、場合によっては貼り付けた画像ファイルが壊れて全く読み込まなくなる場合もあります。
} else {
copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");
echo 'タイプ=' . $_FILES['upfile']['type'] . '<br>';
echo 'サイズ=' . $_FILES['upfile']['size'] . '<br>';
echo 'エラーコード=' . $_FILES['upfile']['error'] . '<br>';
}
を入れて正常な時と異常な時を比較してみれば?
エラーコードの値は
>>389 が書いてくれているURLを参考に。
393 :
370 :2005/09/09(金) 11:33:07 ID:???
394 :
370 :2005/09/09(金) 11:35:48 ID:???
>>394 copyじゃなくて
move_uploaded_file
にしてみたらどう
396 :
370 :2005/09/09(金) 12:47:07 ID:???
397 :
392 :2005/09/09(金) 12:59:50 ID:???
ダメです、ダメです、って言うだけなんだね。 少しでも自分でアレコレやってみようとは思わないのかな。 もう、昼休みが終わるので思いつく分だけ書いてみるけれど。。。 ・先のカキコでファイルサイズを表示させたけど、元のファイルサイズと一致している? ・アップロードされたイメージファイルを直接(ブラウザ経由ではなく)開いても同じ? ・copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg"); の前に while (true); と入れるとブラウザがずっと接続中になって、一時ディレクトリに php???.tmp とかいうファイルができるはず。 このファイルをコピーして拡張子を .jpeg に変えて直接開いても壊れてる? ・PHP4.2の頃だったか、アップロードファイルが壊れるってバグがあったように記憶しているけど PHPのバージョンは?
398 :
nobodyさん :2005/09/09(金) 13:16:46 ID:DEOx5IdR
399 :
nobodyさん :2005/09/09(金) 13:24:41 ID:LpJamP+r
(,,゚Д゚)∩先生質問です 下記のもので4行目のifでの$newの値についてですが複数指定することは可能でしょうか? 現行「no」以外のリストを抽出するようになっていますが、 これを「no」もしくは「空白」の条件に当てはまらない場合は実行。 にしたいのです。おねがいします>< function attnew($attlist,$new,$att,$attsort=''){ $data=array(); foreach($attlist as $k => $v){ if($v[$new]!='no'){ $data[$v[$att].'_'.$k]=$v; } } if($attsort==''){ ksort($data); } return $data; }
>これを「no」もしくは「空白」の条件に当てはまらない場合は実行。 難しい言い回しだな。それと「空白」の定義も曖昧なんだが、スペース1文字という意味だとすると ! ($v[$new]=='no' || $v[$new]==' ') だから ($v[$new]!='no' && $v[$new]!=' ') ということでいいのかな?
401さんありがとうございます 無事できました。 言い回しわかりづらいのに分かってもらえて嬉しいです &&でつなげるのですね
>>397 >・先のカキコでファイルサイズを表示させたけど、元のファイルサイズと一致している?
全く一致していません
●変更前:4368 [byte] ●変更後7357 [byte]
$hizukeでは誤差が発生するのではないかと考えて$hizukeをtestに変更しても同じでした。
copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");}
↓
copy($_FILES['upfile']['tmp_name'], "./image/test.jpeg");}
<IMG src="image/<?php $time = DATE("YmdHis"); echo"$time";?>.jpeg" alt="upfile">
↓
<IMG src="image/test.jpeg" alt="upfile">
また、PHPファイルを保存しているサーバーのバージョンを調べたところ以下のような結果が出ました。
ちなみにOSは『Red Hat Linux release 8.0 (Psyche)』です
[root@ns root]# rpm -qa |grep http
httpd-2.0.40-11.9
httpd-manual-2.0.40-11.9
libghttp-1.0.9-5
httpd-devel-2.0.40-11.9
redhat-config-httpd-1.0.1-13
[root@ns root]# rpm -qa |grep php
(何も表示されず)
もしかしたらこれまでの原因はphpが入っていないからなのでしょうか?
もしそうでしたらApacheを入れなおしてPHP5を入れなければならないと考えているのですが
現状の『Red Hat Linux release 8.0 (Psyche)』でPHP5は使用できるのでしょうか?
>>403 PHPはrpmじゃなくてソースからインストールしたんじゃないの
[root@ns root]# php -v
でバージョンが表示される
>>399 の件なんだがhttpd.confの設定はどうなってる
>>403 The default httpd configuration on RH8.0 use
<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 524288
</Files>
so is this RedHat fault? I replace above lines with
AddType application/x-httpd-php .php
and it works!!!
407 :
nobodyさん :2005/09/09(金) 18:33:10 ID:yKtNTjvx
1000行ほどのテキストファイルの数行だけを 書き換えるスクリプトを作っています。 file_get_contents関数かfile関数かどっちを使うべきでしょうか? またfile_get_contentsで1000行を$contentに格納して str_replaceで数行を書き換えたのを変数$content2として fputs($fp, $content2); としてファイルの内容を書き換えてるのですが、 この場合、数行を書き換えるためだけにわざわざ1000行、また書き込むことに 違和感を感じますし、書き換え中にファイルが破損しないか 非常に不安です。 何か良い方法はないでしょうか? 一部分だけを書き換えるような関数はないでしょうか? どうかよろしくお願いします。
>>407 一行ずつ、変数 x に代入していく
一時ファイルに一行ずつ書き込んでいく
全部終われば一時ファイルを元のファイルにリネーム
一時ファイルが残っていれば、異常に終了した証
409 :
nobodyさん :2005/09/09(金) 20:12:02 ID:6XNF9M7t
今日PHP5.0.5とApache2.0.54でプログラミング環境を整えた、しかし WEB製作板より 4 名前: Name_Not_Found [sage] 投稿日: 2005/08/07(日) 00:49:48 ID:??? 過去スレ名言より 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 PHPはcgi(Common Gateway Interface )とは違うのだが・・・・ 知ったかぶり、ものすごくかっこ悪い。 PHPはサーバー上での動作の仕方が違う。 実はCGI動作のPHPもあることはあるけどものすごくマイナー。 通常、こっちを使うことはない。 まあ、エセWEBデザイナーの集まりだからしょうがないか。 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 これをみて不安になってきた。自分が作ろうとしてるものはPHPなのかCGIなのか・・・ なにか手っ取り早い確認方法はないものだろうかと小一時間 自分はエセWEBデザイナーなのか・・・
>>407 408とは別のアプローチ
ランダムアクセスはDBに任せるか、同じような仕組みを実装すればいい
と言ってもfseek()で目的の場所へ移動する程度だけど
更新頻度によっては1000行くらい気にしなくていい場合もあると思う
>>409 echo php_sapi_name();
CGIについてはググれ
411 :
410 :2005/09/09(金) 20:57:19 ID:???
更新頻度はロックすればどうでもいいか。データ次第だった 一時ファイルをいきなりwで開いてflock台無しにしないようにね
CGIだけど何かる?
$_GETもしくは$_POSTの変数をそのままsqlに組み込んではいけない、 ってのは良く言われてる事ですが、具体的にはどんな対策をすればよいのでしょうか? プログラムのバグの可能性ももちろんありますが、悪意のあるイタズラが一番怖いので、まずは$_GETと$_POSTの値をチェック。 これに「;」みたいにヤバそうな文字が含まれてたらエラーフラグを立てて問答無用にたたき落とす、って感じでよいのでしょうか? また入力画面から渡された値はhtmlspecialcharsとstripslashesで処理したあとでDBに格納することになると思いますが、htmlspecialcharsとstripslashesをどのタイミングで使うのかとか、頭が混乱してきました。 登録時:入力画面→確認画面→(修正画面)→DBに格納 修正時:修正画面→確認画面→(修正画面)→DBに格納 という感じの流れではどのタイミングで使うのがよいのでしょうか? ※register_globals = off、magic_quotes_gpcもオフという前提です。
>>409 CGIというのは特定の言語を指すわけじゃなくて、仕組みを表す言葉。
ブラウザでアクセスした時に次のような感じになるのだけど、
ブラウザ -> Webサーバ -> 外部プログラム実行 -> Webサーバ -> ブラウザ
このWebサーバと外部プログラムとのやり取りの部分がCGIと思ってよいかと。(gateway - 出入り口)
この「外部」という単語がポイントで、これが「内部、Webサーバに組み込み」だと、
モジュールと言ったりする。(module - 機能単位、パーツ、SAPIとも言う)
CGI形式の場合、外部とのやり取りが決まり事(これがCGI)を守っていれば、
外部のプログラムが何の言語で書かれていようが構わない。
PHPの場合は、
・CGI形式(CGIを使える各種Webサーバで共通)
・モジュール形式(Webサーバ内部に組み込めるように各Webサーバごとに存在)
・コマンドラインから使うためのもの
の3種類がある。
>具体的にはどんな対策を 基本各DB用に用意された関数でエスケープ。こいつらはバイナリセーフ。 エラー処理せずそのまま突っ込む。 >た入力画面から渡された値はhtmlspecialcharsとstripslashesで処理したあとでDBに格納 教科書的にはHTMLのエスケープは出力直前てのが正しい。これはXSS対策で、DBの保護とは 関係ない。あとmagic_quotesならstripslashesは意味なし。
×magic_quotesなら ○magic_quotesオフなら
>>404 >PHPはrpmじゃなくてソースからインストールしたんじゃないの
>[root@ns root]# php -v
>でバージョンが表示される
[root@ns conf]# php -v
PHP Warning: Unknown(): Unable to load dynamic library './pgsql.so' - ./pgsql.s
o: cannot open shared object file: No such file or directory in Unknown on line
0
PHP 4.3.2 (cli) (built: Jan 14 2004 14:03:54)
Copyright (c) 1997-2003 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies
>
>>399 の件なんだがhttpd.confの設定はどうなってる
え・・・え〜と何行目を見ればよいのか分からないのですが・・・
419 :
nobodyさん :2005/09/09(金) 21:36:19 ID:6XNF9M7t
>>410 出力結果は
apache2handler
でした。
一応ソース
<?echo php_sapi_name();?>
-----------------------------
それと関連してるのかわからないが
phpinfoの出力結果
Server API Apache 2.0 Handler
一応ソース
<? phpinfo() ?>
という結果はでたのだが意味がいまいち分からない
これはPHPとして動いているといえるのか
自分はCGIとしてではなくPHPとして動かしたい
>>413 stripslashesはaddslashes()の間違いじゃなくて?
つかaddslashes()、stripslashes()って使わんね
>>419 うごいてるうごいてる
421 :
407 :2005/09/09(金) 21:53:28 ID:???
423 :
nobodyさん :2005/09/09(金) 22:12:30 ID:6XNF9M7t
>>422 ソース
<?php
$sapi_type = php_sapi_name();
if (substr($sapi_type, 0, 3) == 'cgi') {
echo "You are using CGI PHP\n";
} else {
echo "You are not using CGI PHP\n";
}
出力結果
You are not using CGI PHP
Excite訳
あなたはCGI PHPを使用していません。
PHPで動いているでFA?
>>423 馬鹿かおめーは
モジュール版のPHPなのか、CGI版のPHPなのかということ
>>423 結果がどっちになろうとも
このプログラムが動くということは
PHPが動いたということじゃん。
>>416 その辺、あやふやなまま、現在に至ってしまった。
入力チェックしないまま平気で稼働してるプログラムがいくつもあります。
一応、defaultに落ちたら全部print_rして漏れにメールが飛ぶようにしてるんだけど、変なイタズラって、手間もかかるからなのか、運がいいのか知らんけど、全然告知メールは飛んでこないな。
入力値のチェックについては、部分的に詳しく書いてあるサイトはあっても、プログラムの流れの中でどういう対策をしたらよいか、って解りやすい例を挙げてるとこって見た事ない。
もし、しっかりまとまってるサイトがあったら漏れもしっかり勉強したいです。
427 :
nobodyさん :2005/09/10(土) 00:54:43 ID:gX4RDOln
ホームページとかについてるパスワードって他人がわかる方法ってないかな?どうしてもしりたいやす
>>426 脳が沸いてるようだから相当しっかり勉強したほうがいいよ
>>427 パスワードというのは、脳内情報は他人に盗めないという前提に
基づいてる。調べるには推論と実験しかないね。
実験したらここで報告してくれ
>>430 仕組みは知らないけど、目的は呼び出された時点のUNIXTIMEを付加して
ブラウザの画像のキャッシュが無効になるようにしてる。
DBの商品リストから動的生成してると、キャッシュが邪魔になることがあるからね。
まあ常にクライアント側のキャッシュが働かないというのも、良し悪しだが。
(サイト設計上、注意すべきポイント)
解像度ごとに違う文字を出したいと思っているのですが、 PHPでは解像度を調べるような変数がないと聞きました。 それでもPHPでやりたい場合、 どのようにしたらできるかわかる方いらっしゃいませんか?
>>433 主要なブラウザはそういう情報を送ってこないので、
JavaScriptを使って値を取得して、それをサーバに送るようにするしか無いだろうね。
「JavaScript 解像度」でググれば取得の仕方が分かるから、
その情報をリンクに付け足して(動的にリンクを変化させる事になるので、この部分もJavaScriptを使う事になる)、サーバにリクエストさせる。
一回取得すればいいので、その情報をセッションに保持するなり、解像度ごとにディレクトリを切るなり、お好きなように。
435 :
433 :2005/09/10(土) 04:03:59 ID:???
>>434 ありがとうございます。
早速ググって見たいと思います。
JSとの連携ですか。難しそうですね。
がんばってみます!
Perlのサーバプッシュに相当するような実行結果を画面に逐次書き出す手法は 処理に時間がかかる場合なら尚更便利だと思いますが、そのようなことをPHPで 実現できませんでしょうか?
.phpファイルの中でssiを使いたいのですがどのようにしたらよいのでしょうか?
>>437 Apache2の設定で出来ないこともないが...
やり方は調べて味噌。phpの出力をssiの処理に再度通しなおす。
>>439 ありがとうございます
おかげ様で思い通りの処理ができました
fopenと@fopenの違いを教えてください
HTTP_VIA変数はどのようにして取得できますか?
$_SERVER['HTTP_VIA']
446 :
444 :2005/09/10(土) 10:57:20 ID:???
>>446 そのページの上の方にあるリンクで「CGI 1.1 specification」ってやつのページで、下の方に書いてある。
448 :
444 :2005/09/10(土) 15:07:53 ID:???
>>445 $_SERVER['HTTP_VIA'] でやってみたのですが、
PHP Notice: Undefined index: HTTP_VIA
というエラーが出てしまいます。
>>448 リクエストヘッダの中に実際にVia:の行がない限り$_SERVERにはセットされない。
if (isset($_SERVER['HTTP_VIA'])
{
// この中だけで使ってください
}
flock()がじつはロックしてないって小耳に挟んだんだけど、マジで?
OSやファイルシステムとコードの書き方によるのよん
454 :
451 :2005/09/11(日) 00:18:31 ID:???
( ・∀・つ〃∩ ヘェー ヘェー よくわからんが、ロックを抜けれることがある、ってことか? だが一応書いておく織れ。
一応だとかえってマイナスになったりするんだがな
GDを使ってこういう株価チャート作れますか?
どういう株価チャート?
可能だけど、グラフ作成は既存のライブラリに任せたほうが楽だよ
そうですか、ありがとうございました
461 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 18:56:05 ID:XVWHhBde
色んなページで使うセレクトボックスを 関数化(?)すればいいのだろうか?と思ったのはいいが、 出来ずに疲れ果ててきたので、 助けてくださひ…
463 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 19:21:55 ID:XVWHhBde
いあいあ、セレクトボックスは常に固定なんだけど、
いろんな箇所で使ってるから、
別ファイルで、セレクトボックスを作って、
使うときに呼び出そうかな…と。
多分
>>461 の教えてくれた中に流用できるのはあるような気はするんだけど…。
ちなみに今は、ページのヘッダー部分は、header.php
フッダー部分はfooter.phpてして、
都度、インクルードしてる。
けど、関数化にしたら、インクルードファイルは1個でよくてって事になると思ってるんだけど、
どうなんだろう??
オマイさんの作ったheader.php, footer.phpの内容、呼び出す側の処理を 出してもらった方が話が早いんでない?
>>463 selectをechoする関数作ればいいだけなんじゃ?
それじゃ不味い理由があるなら、それを出してもらわなきゃ何も言えない。
>けど、関数化にしたら、インクルードファイルは1個でよくてって事になると思ってるんだけど、
思ったら実行してみれば?
低レベルですみません。 HTMLで、テーブルの右に画像を載せたいのですが、 画像がテーブルの下の方に行ってしまいます。 <TABLE>ずらずら</TABLE> <TD>画像</TD> みたいな感じにしたら、 テーブル 次のテーブル 画像 みたいになってしまいました。
467 :
466 :2005/09/11(日) 22:17:17 ID:???
あ、すいませんPHPのスレでしたか! ごめんなさい
ファンクション フォーム() {echo"フォームHTMLタグ";} 呼び出し フォーム();
くだらねぇ質問だから、ここに書かせてもらいます。 問1. PHPプログラマ募集(若干名)の求人広告はどこに出すのが正解ですか? イーマーキュリー以外で教えてください。
くだらなくてもPHPの質問ではないので却下
広島市民球場
473 :
nobodyさん :2005/09/12(月) 01:10:58 ID:+jMhSqho
すまそ、レス遅くなりました。 header.php、footer.php共に、 <?php print ("<html>"); : ?> <?php print ("</html>"); ?> と書いて、実際は、include ("../common/header.php");とかinclude ("../common/footer.php"); ってしてたのです。 でも、この方法でやってくと、共通で使いたいものはその都度ファイル作んなきゃいけなくて、 そうするとどんどんファイルが増えて大変な事に(-_-) なので、関数化しよう!と思ったのです。 で、あれからちょっと進歩しました。 作るセレクトボックス、どのページでも同じモノなのですが、 動的な為、Select_box($hoge);とし、 function Select_box($hoge){ print (" <select>"); : }; として、実際呼び出しているPHPで、Select_box($hoge);としたら、出ました!! 今までも、同じようにやってたのですが、何故出来なかったのかが謎ですが…。 あと、今回の場合は引数が必要だったのですが、必要ない場合でも、functionでもいいのですか? 戻り値も要らなくても、function? 他の言語では、functionとsubを使い分けてたような気がしたのですが… 長くなって、ごめんなさい。
>>469 そういや求人関係、PHP-userに流しては?とか別のML作るとか、
そんなの求人サイトあるから別にMLに流さんでもとか、
昔そんな話がPHP-userで出てたな。
サイトだとjobmailとかか?
俺はソフト屋じゃないのでどの辺で情報見てる人が多いのかしらんが。
>>473 Cライクな言語は基本的に全部関数。
(オブジェクト指向なら全部クラスだったりするが)
なんとか、顧客の要望通りのプログラムを書き上げたのはいいけど、セキュリティとか、テーブルの設計とか、まるで自信がないです。 このことも正直に言ったうえで、顧客も満足した上でお金を出してくれてんですが、実際こういうのは現場でよくあることなの? ※楽する為にphp使ったことしかなくて、DBとか絡めたものは初めてなもんで。
求人出せ
日付のデータ(秒までの14桁)を、XXXX/XX/XX XX:XX:XXと言う形にしたいんだけど、 4桁、2桁、2桁…に分割してからprintfって方法しかない?
>>478 元のデータのフォーマットが不明だが、適当に年月日時分秒の順だとして
sscanf($data, "%4s%2s%2s%2s%2s%2s", $yr, $mon, $day, $hr, $min, $sec);
echo "$yr/$mon/$day $hr:$min:$sec";
>>479 おおお!ありがとー。
出来ました〜。
フォーマット、%04d%02d%02d…ってしてたんだけど、
"0"が省略されちゃうみたいだったんで、%04s…にしました〜。
パディング文字の指定は、単一 引用符(')で出来るとか書いてあったんだけど、
とりあえず表示だけだし、いいかな、と。
SQLの種類っていくつあるの? どれ推奨?
SQLの意味が(ry
配列の意味は分かったのですが、 どんな場面に使うのかよく分かりません。 具体的にどのようなことで使うのか教えてください。
>>476 きちんとした書面で納品書と検収書を交わしておくべき。
契約書で不具合対応保証期間が明記されていれば尚よし。
486 :
nobodyさん :2005/09/12(月) 13:54:11 ID:910Lq8vb
セッション使用したページで、ブラウザの戻るボタンで 前のページに戻ったら「警告 : ページの有効期限切れ」と 言われるんですけど、これ回避するにはどうやったらいいんですか?
488 :
nobodyさん :2005/09/12(月) 14:42:04 ID:W0v1jbPa
テキストファイルの最終行からn行分上を取得する方法って、file()を使って 全体の行数を取得→配列化したテキストデータを for を使って取り出す という方法しかないのでしょうか? 先頭からの場合は、fopen()を使ってファイルポインタを下に移動すれば 最小限のメモリで動作させられるのですが。
a+で開くんじゃ駄目?
PHP Notice: Undefined variableがapacheのエラーログに大量に出力されるのですが、 これを出ないようにしたいのですが、phpのソースコードレベルで出来る対策を教えてください。
>>490 error_reporting()かphp.iniのログレベルの設定を適切に変更する。
一番いいのは、未定義の変数を使いそうな部分でisset()で未定義かどうかチェックして、適切な値を代入する。
>>488 fopen + fseek じゃダメなの??
>>488 少々トリッキーだがこんな方法がある
$fp = fopen("hoge.log", "r");
fseek($fp, 8000, SEEK_END); //必要な行数が取得できそうな適当な位置に移動(なくても可)
$log = array();
do{
$line = $fgets($fp);
if ($line){ //最終行の後がヌルになったりするのでその対策
$count = array_unshift($log, $line);
if ($count > 10){ //取得したい行数
array_pop($log);
}
}
}while(!feof($fp));
fclose($fp);
$logに新しい順にログが入ってる。
数秒間処理を待機させる wait 的な動作をPHPでするにはどうしたらよいでしょうか・・
くだらねぇ質問ですが、構文チェックで print "<table width="600" bordercolor="#EF9C00" border="1">\n"; が、通りません。なにがいけないんでしょうか?
>>496 " の中で " を使うときは以下のように " の前に \ を付ける必要がある(エスケープ処理)。
print "<table width=\"600\" bordercolor=\"#EF9C00\" border=\"1\">\n";
または以下のように " ではなく ' で囲んでもいい。
' で囲ったときは \n は使えないんで \n だけ別途 " で囲んで連結していることに注意。
print '<table width="600" bordercolor="#EF9C00" border="1">' . "\n";
" で囲むのと ' で囲むのは意味が異なるので、PHP マニュアルを参照して勉強してね。
すばやいレスサンクス。勉強して解答する側にまわれるようにします。
カラーリングできるエディタつかえ
ここにいる人たちは面白いプログラムが書けると聞いたんですが、 お手合わせ願えますか?
ム板でプッと笑われるようなプログラムならよく書いた
あああ いいい ううう えええ 等のように、書いたaa.txt(↑コレは4つですが、100個と仮定して)を5つずつ取り出してtableで表示させたいんです。 $data = file("aa.txt"); echo "<table><tr>"; $i=0; foreach ($data as $bb) { $i = $i+5; if($data[$i]==$bb){ echo "</tr><tr>"; } echo "<td>$bb</td>"; } echo "</tr></table>"; これを試したんですが、全部横一列表示されてしまいます。 どうしたら上手くいくでしょうか?
>>503 出力されたHTMLのソースをよく見てみること
あぁあ、原因わかりました。 $i = $i+5;これじゃ5、10、15ってなりますね。。。 $data[$i]==$bbになるはずが無かったんですね。 ありがとうございました。
>>503 ついでに$iと$data[$i]もechoしてみ
う、5秒差か、スマソ
ありがとうございます。やってみました。 最初から$iに5を入れておいて$i = $i+5;をecho "</tr><tr>";の下に持っていったらできました!
foreach()っていまいち分かりにくいな。 forやwhileのほうが分かりやすくて良いと思うんだが、やはり慣れなんだろうか。
>>509 ぶっちゃけると、どっち使っても良い。
処理により使い分ければいいよ。
foreach() を使うと、楽できる場合も多々あるし、
無理に foreach() を使うようにコーディングする必要もない。
Iteratorを振り回すのに便利
やべ、foreachの方が好きなのかこっちを多用してる ずっと前に書いたスクリプトを見直してたら foreach (array(0,1,2,3,4,5) as $i) { とか書いてあった・・・orz
foreachが無い言語を使っていた人には最初違和感あるよね。 慣れてくればけっこう便利。
(0 .. 5).each do |i|
ずっと前に書いたスクリプトか・・・ 時々ビックリするくらい笑えるコード書いてたりするんだよな。 function array_add($a, $b) { return array_push($a, $b); } 書いたのの誰だよ!俺だorz なんか恥ずかしい想い出みたいだよね。
517 :
nobodyさん :2005/09/13(火) 02:17:40 ID:dzuB0cPl
ワロタ。 まぁいいんでないの、人それぞれのやり方があるのが面白いところ。
>>512 >>515 後で見た自分のコードが恥ずかしくなることってあるよなー
逆にそういうのがあるから成長してると言えるわけで。
昔自力で書いたコードとか下手で捨ててしまいたい衝動にかられるけど、
再利用できることもあるから捨てるに捨てられん・・・
昔に書いたコードを見て赤面した。 最近書いたコードを見たら、たいして変わってなくて青面した。
520 :
nobodyさん :2005/09/13(火) 14:06:35 ID:T3vnNFvN
PHPとDBが同じ構成で動いているが違うネットワーク上にある「サーバA(主)」と「サーバB(副)」があって その2台のサーバ間でデータを同期するスクリプト組もうとしています。 「サーバA(主)」 と「サーバB(副)」では同じPHPスクリプトが動作していて、A上で実行されたスクリプトの パラメータと同じ情報を、B上の同じスクリプトに投げるための方法を探しています。 HTTP POSTでAに来た要求をそのままBに渡せればいいかなと思ったのですが、PHPのスクリプト上から HTTP POSTを発行する方法が分かりません・・・ 何かいい方法は無いでしょうか。
521 :
nobody :2005/09/13(火) 14:27:20 ID:9pR1WrHU
>>520 DBは何使ってるの?
MySQLをはじめレプリケーションできるものも数多くあるけど
違うネットワークってことなので、httpで通信するってこと?
522 :
nobody :2005/09/13(火) 14:28:24 ID:9pR1WrHU
GDをつかってすでにある画像にテキストを追加したりしているのですが、 なんか文字の周りが汚くなってしまいます。 きれいに文字をかく方法ありますか?
523 :
nobodyさん :2005/09/13(火) 14:35:34 ID:T3vnNFvN
>>521 DBはMySQLです。
間にFireWallが居てポート空けてくれないらしいのでHTTPしか無い感じだったりします・・・
レプリケーションについてはちょっと調べて見ます。
文字化けしちゃう恐れのある文字を置換して加工したいんですけど どういう風に書けばいいか、わかりません。 作成した関数に文字列を渡すと、置換した結果を取得したいのです。 $aaa = kansuu($aaa); 例えば、「表示」だと「表\示」と返したいのです。 で、関数の中で 「―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭xx」 などの文字が存在したらその文字に半角の¥を付加して返したいのですが、 どのように置換処理を書けばよろしいでしょうか? よろしくお願いします。
>>524 $aaa = addslashes($aaa);
>>525 そりは関係ないものまでクォートしてしまうんでないかい?
初心者です。 SQL文を作成し、変数に格納しようと思ってます。 文字列と変数をつなげるとき 1)$sql = "select * from $table where key='$key'" 2)$sql = "select * from ".$table." where key= '".$key."'" と書くのでは、どちらが正しいんですか? どちらも正常に動きますが、一般的に使われるのはどちらなんでしょうか?
528 :
524 :2005/09/13(火) 15:46:47 ID:???
>>525 目からうろこです...1行で解決とは...m(_ _)m
うまくいきました。
>>526 大丈夫そうです。
>>526 クォートじゃなくてエスケープな
>>524 はエスケープしてどうする気だ。DBにでも突っ込むならmysql_escape_string()とか使え。addslash()でもいいけど。
531 :
530 :2005/09/13(火) 16:12:39 ID:???
530です。 環境を書き忘れてました。 所謂LAMP環境です。 RedHat 9 Apache 2.0.40 MySQL 3.23.58(mbstring on) php 4.2.2 スクリプトはeuc-jpで書いてます。
533 :
530 :2005/09/13(火) 16:14:46 ID:???
忘れてました。 $Pattern = "/(<FONT COLOR=black>)(.*)(<\/FONT>)/";
535 :
530 :2005/09/13(火) 16:29:06 ID:???
>>534 文字コードは関係ないでしょうか?
どんな環境でテストされましたか?
>>535 たぶん改行の問題だと思う
そのスクリプトだと<FONT COLOR=black>から</FONT>までが1行にないと駄目
537 :
532 :2005/09/13(火) 16:47:05 ID:???
>>535 こう書き換えてみたら?
$s = '';
while (!feof($fp)){
$s .= fgets($fp);
}
fclose($fp);
$n = preg_match_all($Pattern, $s, $ar, PREG_SET_ORDER);
for($i = 0; $i < $n; $i++){
print $ar[$i][2] . "<br>¥n";
}
538 :
534 :2005/09/13(火) 16:49:48 ID:???
>>535 WinXPでShift JIS
マッチした内容は
-----------------
24846
</FONT>
<BR>
<FONT COLOR=FF0000>+
96</FONT>
<!---->
<br>
------------------
>>520 > HTTP POSTを発行する方法が分かりません・・・
fsockopenしてfwriteで送信。
>>522 文字をでかくする。色を薄くする。フォントを変える。
JPEGならクオリティの値(imageJpegの3番目の引数)を上げるかPNGにする。
それでもダメならGDを見放せ。
541 :
530 :2005/09/13(火) 18:40:35 ID:???
レスどうも有難うございます
>>536 たしかに改行コードが含まれています。
この場合$Patternに改行コードを書き込むと良いと思い\rや\nをためして
みましたがダメでした。
取得したhtmlの文字列から改行コードを取り去ればよいと思いますが・・・。
そんな機能を持った関数があるのでしょうか?
>>537 そのとうりに書き換えてみましたがダメでした。
最近PHPをはじまめした。 ユーザー定義関数をつかって、消費税を抜いた値段を表示するスクリプトを 書いたのですが、参考書によると、これの実行結果は「100」のはずなのに その通りにならず 「function tax($zeikomi) { $zeinuki = $zeikomi / 1.05; return $zeinuki; } print (tax (105)); ?>」 となってしまいます。 どこが間違っているのでしょうか。 <html> <head><title></title></head> <body> function tax($zeikomi) { $zeinuki = $zeikomi / 1.05; return $zeinuki; } print (tax(105)); ?> </body> </html> 文字コードはeuc-jp 改行コードはLE PHPのバージョンは5.05です。 よろしくお願いしますm(_ _)m
PHPで、正規表現を使いhtml内にある任意の文字列にマッチした一行を抜き出すことは可能ですか?
可能
547 :
nobodyさん :2005/09/13(火) 22:14:01 ID:21KzVdLf
>>547 PHPインストール後のhttpd.confの設定をミスってるかApacheを再起動していない。
549 :
軟式PHP :2005/09/13(火) 22:19:52 ID:???
>>547 そのページは見てないけど、ダウンロードになるなら
phpのMIMEタイプが設定されていない可能性があるな。
LoadModuleもやってないかも。httpd.confをもう一回見直してみたほうがいいと思う。
>>548 >>549 ありがとうございます。
Apache再起動してみましたが、直りませんでした。
httpd.confもページをみて見直してみましたが、やはり直りませんでした。
どうすれば良いでしょうか??
整備された鯖を借りる
552 :
nobodyさん :2005/09/13(火) 23:03:06 ID:/gXbJCT5
phpをwindowsでビルドしたいのですが、 PHPマニュアルにある方法以外にもっと詳しい情報を 知りませんか? もし、ありましたら、教えてください。
553 :
548 :2005/09/13(火) 23:03:34 ID:???
>>550 変だね。そのページを見てみたけど別にウソは書いてないし。
Apacheのインストール後の「あなたの予想に反して...」の画面が表示されているのは
確認済みなんだよね?
オマイさんが追加したLoadModule行とAddTypeの行の内容を ***そのまま、何の細工もせず*** に
晒してもらえない?
(そのページからコピペするんではなく、オマイさんのhttpd.confからコピペするんだよ)
>>553 はい、「あなたの予想に〜」の画面は出ます。
追加したのは
LoadModule php4_module c:/php/sapi/php4apache2.dll
と
AddType application/x-httpd-php .php
です。
>>550 貴方の「見直し」が間違ってる可能性が高いかな。
インストール先(インストールの構成)を変えていたり、
ダウンロードしてインストールしたApacheやPHPが説明のものと異なる
そういった場合は記述されている内容を理解した上で適用しないとならない。
その辺が出来てないんじゃないの?
これは動かないという原因ではないが、件のコンテンツの記述で間違っているところがある。
(間違っている人は他にも多くいるが)
>703行 AddDefaultCharset none ←こう書き変える
これではnoneというcharsetを指定することになる。無効にするのだからOffが正しい。
http://httpd.apache.org/docs/2.1/ja/mod/core.html#adddefaultcharset
dllを移していないとか…
>>555 あ、確かにApacheを説明のものと違うバージョンのものを使っていました。。。
説明の物と同じやつでやってみます。
いろいろと教えていただきありがとうございましたm(_ _)m
修正しているhttpd.confファイルが実はhttpd.default.confというオチに期待している。
>>555 もうひとつだけ質問させてください。
この場合はApacheだけインストールしなおせば、phpはインストールし直さなくて
良いんですよね??
>>550 あとPHPのインストール先とインストールしたパッケージの確認。
コマンドプロンプトで「c:\php\cli\php.exe -v」(小文字のまま)
とした場合の出てくるバージョンとか教えて。
出てこなかったら
・インストール先がその解説通りでない
・インストールしたパッケージがその解説通りのものではない
>>558 メモ帳で修正したのでhttpd.conf.txtになっている。
(修正&上書きだとそんなことはないか)
100行あるデータの先頭から10行だけ表示さる場合には、 下のソースをどのようにすれば良いのでしょうか? どうかお教えください。よろしくお願いいたします。 while(list($index,$data)=each($data_all)){ if($data[0]) { print "$index[0]:$data[0]"; } if($data[2]) { print "$index[2]:$data[2]"; } if($data[9]) { print "$index[9]:$data[9]"; } print "<br>"; }
>>559 いや、それはPHPの話なので
>はい、「あなたの予想に〜」の画面は出ます。
らしいから、Apacheのインストールは関係ないよ。
説明どおりのバージョンでなくても貴方がインストールした
バージョンに合わせて適切に設定すれば良いだけの話しだし、
新しいバージョンの方が良いでしょ
(ドキュメントはどうしたって陳腐化してしまうものだ)
で、PHPのインストールだけどそこの解説にもあるように
「インストーラはありません」(今は公式のWindowsインストーラ版もあるが)
だから、再インストール云々にはならないよ。
Apacheやphpのデフォルト設定ファイルを変に変更して元に戻したいが
バックアップを取ってなかったとかのパターンは、再インストールして
設定ファイル取り戻す必要はあるかもしれんが。
>>561 「100行あるデータ」ってのは$data_allに入ってるのかい。
それとも$data[x]とかに入ってるのかい?
どっちにせよ if($data[0])とかの判定は怪しいけど。
>>563 100行のデータは$data_allに入っています。
怪しいソースですが全行の表示はできています。
if($data[0])は必要無いですね。。。
>>560 指定されたパスが見つかりません。と出ます。
>>562 でも、どうやれば私がインストールしているバージョンに合った設定になるか分からなくて、、、
ほんと初心者ですいません。
>>565 >指定されたパスが見つかりません。と出ます。
・phpのインストールがおかしい(解説通りでない)
・変更しているApache設定ファイル(httpd.conf)がおかしい。Apache起動時にエラーが出ていない。
の両方。
前者は
http://www.php.net/get/php-4.3.11-Win32.zip/from/a/mirror をダウンロードして、解説どおり解凍したフォルダをリネームして
c:\phpのディレクトリになるように設置。
後者は、コマンドプロンプトで「notepad "c:\Program Files\Apache Group\Apache2\conf\httpd.conf"」
と打って、自分がそれまで変更してた内容がちゃんと記述されてるか確認。
>>561 >while(list($index,$data)=each($data_all)){
これを
foreach(range(1,10)){
list($index,$data)=each($data_all);
にするとか
foreach ( array_slice($data_all, 0, 10) as $index => $data) {} とか。あんま発想のレベルは変わらんな どうでもいいけど、配列の要素を行と云うのは少し違和感が
>>567 >>568 レスありがとうございます。
教えていただいたものを改良して
for($i=0; $i<5; $i++) {
に置き換えて、無事動作いたしました。
本当にありがとうございました。
>>569 > for($i=0; $i<5; $i++) {
本当にそこは5なのか?いいのか…
やっぱ「行」と言った場合、コンピュータシステム的な表現では
どう解釈されるのか、一度色々調べて理解してホスィ。
Division by Zeroが出ないようにするには、 どのような制御文を書けばよいのでしょう?
>>554 Apache1.3にはAddModuleも必要だ
574 :
nobodyさん :2005/09/14(水) 09:48:16 ID:m0wxPPXH
他で答えてもらえないようなので。 phplibはphp5で使えますか?
使ってみましたか?
PHPってロシア語だとПХП?
(ПxП)つ[PHP]
PHPにワイルドカードのようなものはあるのでしょうか? 実は、DBに登録されているもののうち、リンクがあったら、その部分だけ削除したいのです。 $p_string = str_replace ("<a href=\"*\">", "", $p_string); みたいな事をしたいのですが。 よろしくお願いします。
>>566 httpd.confに文を追加する時に
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule ssl_module modules/mod_ssl.so
#
# ExtendedStatus controls whether Apache will generate "full" status
最初こうなっているのですが、
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule ssl_module modules/mod_ssl.so
LoadModule php4_module c:/php/sapi/php4apache2.dll
#
# ExtendedStatus controls whether Apache will generate "full" status
このように付け足すのですか?
それとも
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule php4_module c:/php/sapi/php4apache2.dll
# ExtendedStatus controls whether Apache will generate "full" status
このように付け足すのでしょうか??
>>579 ereg_replace
preg_replace
好きなの使え。正規表現も覚えろ、な。
582 :
579 :2005/09/14(水) 11:58:23 ID:???
>>581 やはり正規表現でひとつひとつ可能性(英字、数字、時には2バイト文字)をつぶすしかないのですね。
一括で全て対象にできれば便利だと思いましたので。
ありがとうございました。
>>579 リンクだけというのならアレだが、
HTMLタグ除去なら、strip_tagsという関数もあるぞ。
>>575 使い始めたところです。php5での参考資料が見つからなくて。
>>576 他に似たようなことをするライブラリがあるということですか?
教えていただけませんか?
586 :
579 :2005/09/14(水) 12:18:48 ID:???
>>584 strip_tagsなんていう関数があるんですね。
教えていただきありがとうございます。
ただ、今回はリンクだけなので、正規表現を使わせていただきたいと思います。
>>580 #から始まる行はコメント文として無視されますので
有効にしたい行は先頭の#を削除
無効にしたい行は先頭に#を挿入
>>585 PHP3ならわかるけどPHP4ならPEAR使うだろ。
データベースならPHP5の場合はPDOにしろ。
>>586 そんな必要ないだろ。シェルのワイルドカードもそうだが
そういう問題じゃなくて、そもそもワイルドカードでアンカータグをマッチさせるとか不可能だから
>>588 phplibのセッション管理に興味があったんですが、PDOだとできませんよね?
で、ADOdbってのを見つけたんですが、これってどうですか?
>>591 PHP4からセッション関数が標準装備されたのでphplib使う必要なくなりました。
593 :
579 :2005/09/14(水) 14:53:49 ID:???
$p_string = ereg_replace ("<a href=\"
http://.+\ ">", "", $p_string);
とすることで、期待通りの動作をしてくれました。
どうやら私の努力不足だったようです。
ご迷惑をおかけしました。
596 :
594 :2005/09/14(水) 15:03:15 ID:???
入力したプログラムを入れ忘れていました。
以下が使用したプログラムです。
〜〜index.html〜〜
<HTML><BODY bgcolor="#FFFFFF">
<DIV align="center">
<FORM enctype="multipart/form-data" name="pl_info" action="./form.php" method="post">
<INPUT TYPE="hidden" NAME="_template_confirm" VALUE="./form.php">
<table>
<tr><td>画像選択</td>
<td><input type="file" id="upfile" name="upfile"></td>
</tr></table>
<TABLE width="500">
<TR><TD width="250" bgcolor="#FFFFFF" align="CENTER">
<INPUT type="submit" name="SUBMITBUTTON" value="確認画面へ" onClick="NEXT()">
<INPUT type="hidden" name="page" value=""></TD>
</TR></TABLE></FORM>
</DIV></BODY></HTML>
〜〜form.php〜〜
http://land.issaigassai.com/cgi/upload/source3/No_0105.txt
(´-`).。oO(くだ質だから仕方ない・・・)
くだらない質問はOKだろうけどくだらない椰子はNGと思われ
601 :
nobodyさん :2005/09/14(水) 15:27:15 ID:xwUqvGFV
すいません。phpBBのトップindex.phpだけに自分で画像リンクを追加したいんですが includeいじったりしてますがいまいちよくわかりません... 簡単な方法ってあるんでしょうか。よろしくお願いいたします...
>>406 の意味がさっぱり分かりません・・・
どう使えばいいのかも・・・
>>602 中学生以上ならわかると思ったんだが
れっどはっと8.0のhttpdのひょうじゅんのせっていでは
<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 524288
</Files>
となっています。
これはれっどはっとのしっぱいではないでしょうか
わたしはうえのぎょうを
AddType application/x-httpd-php .php
にかきかえました
そしてちゃんとうごくようになりました。
>>593 それで期待通りの動作!?
絶対ヘンだろ・・・絶対ヘン・・・
絶対そんなの期待する香具師いないって
>>603 うえのぎょうってどこにあるんですか?
httpd.confを探しても<Files *.php> は見つからないんですけど・・・
もしかして違う場所を見ているとか・・・
>>605 /etc/httpd/conf.d/php.conf
ここ見てお勉強。
>>530 に書いてある
while (!feof($fp)){
の「!」って何の意味?ヒント教えてください。
>>607 feof($fp) は、ファイルポインタが終端に来た時にTRUEを返す。
(ファイルポインタはfgetsを使う事で終端に向けて進む)
なので、終端に来た時に feof($fp)はTRUE、!feof($fp)はFALSEになり、whileループが終了する。
>>608-610 なるほどね、tureとfalseで頭がごっちゃになりそうだ。
ありがとう。いつか答えられるようになるまで頑張る。
>>606 場所は分かりました。
でも
LoadModule php4_module modules/libphp4.so
を
AddType application/x-httpd-php .php
に変えても状況は変わりません・・・
うえのぎょうと言われましてもどの部分を変更すればよいのかさっぱり分かりません・・・
550です。 今度はApacheを再起動したらエラーが出てしまったのですが何故でしょうか??
だんだん釣りに見えてくるな・・・
>>612 の変更は論外
該当箇所がないんなら、httpd.confの最後に
AddType application/x-httpd-php .php
入れてやってみれば?
>>612 .htaccessすら触ったことないの?
あと、今までの書き込み内容からしてPHPとHTMLの区別すら分かってねーだろ?
HTMLの基礎から勉強してきな
616 :
nobodyさん :2005/09/14(水) 19:14:43 ID:wrvJu8AD
なんだこりゃ。。 Fatal error: Call to undefined function: php_error() in /usr/share/pear/DB/DataObject.php on line 405 ぐぐってもでてこん。php_error なんかincludeするとかいう問題か??
617 :
nobodyさん :2005/09/14(水) 19:18:09 ID:m0wxPPXH
小文字だけのセッション変数ってページが遷移すると破棄されるんですか? 大文字が混ざっていると遷移しても破棄されないんです。
618 :
617 :2005/09/14(水) 19:31:19 ID:???
少し違いました。 大文字だけじゃないと残りません。
>>614-615 解決しない・・・と思ったらconfファイルは変更した後で再起動をかけないと
変更が反映されないということを知りませんでした・・・
一旦サーバーを再起動させてもう一度確かめてみます。
はじめまして、5cのダメ文字をうまく変換してくれるライブラリを配布してるところとかしりませんか?
621 :
617 :2005/09/14(水) 19:56:30 ID:???
いじってたら、IEではどう書いても保存されなくなりました。 Firefoxやネスケではちゃんと保存されています。 セッション変数ってブラウザによって挙動が違うんですか?
echoで出力したhtmlを置換したいんですが、 既に出力した文を扱うにはどうすればいいですか。
1000件ほどのデータが入った「hoge.csv」から データを抜き出し、下のソースでその結果を表示しているのですが、 1ページの表示を100件くらいにして、「次のページ」という機能を付けたいのです。 どのようにすれば良いのか、教えていただけないでしょうか。よろしくお願いいたします。 <?php $fp = fopen("hoge.csv",'r'); flock($fp, LOCK_EX); while(!feof($fp)){ $data_line = explode(",",chop(fgets($fp, 1024))); $data_all[] = $data_line; } $datatop=$data_all[0]; array_shift($data_all); flock($fp, LOCK_UN); fclose($fp); foreach($datatop as $title){ print "$title"; } print "<br>"; while(list($index,$data)=each($data_all)){ print "$data[0]"; print "$data[1]"; print "$data[2]"; print "$data[3]"; print "$data[4]"; print "$data[5]"; print "$data[6]<br>"; } ?>
function aaa($aaa) { return (preg_replace ("$bbb" , "$ccc", $aaa); } これにもう一つpreg_replaceを追加する場合は もう一つfunctionを作るの?
>>627 while(!feof($fp)){
$data_line = explode(",",chop(fgets($fp, 1024)));
$data_all[] = $data_line;
}
この部分を以下の方針で見直す。
1.開始行を$_GETか何かで受け取ることを決めておく
2.開始行まで空読み
3.開始行に達したら100行程度読み出して$data_all[]に入れておく
4.ついでにこの先のデータがあるかチェックしておくと吉
>>628 勘で答えてみるけど
function aaa($aaa) {
$aaa = preg_replace("$eee", "$fff", $aaa);
return preg_replace ("$bbb" , "$ccc", $aaa);
}
とでも書けばいいんでないの?
>620 EUCに城
632 :
627 :2005/09/14(水) 23:23:08 ID:???
>>629 レスありがとうございます。
私にはその方法はかなり敷居が高いです。
つーかわかりません...orz
while(list($index,$data)=each($data_all)){
$indexはまったくの未使用です。
これを使って上手く処理できれば良いのですが…
(print_rで見ると、0から綺麗に連番で並んでいます)
>>632 $indexを使いたいということなら
最初の方で
$page = 2; //表示開始ページ
$start = $page*100;
とでも設定しておいて、
while(list($index,$data)=each($data_all)){
if ($index >= $start && $index < $start+100){
print"$data[0]";
・・・(略)
}
}
みたいにしても動くとは思うけど。
きついコーディングだな('A`)
せめてこうか
for ($i=$start; $i<$start+100; $i++){
$data = $data_all[$i];
print "data[0]";
・・・(略)
}
634 :
627 :2005/09/15(木) 00:10:54 ID:???
>>633 ありがとうございます。
やはり100件だけの表示は早いですね。
これに「次のページ」リンクと
全体のページ数表示&リンクができればいいのですが.....
>>630 出来ました!そう考えればいいんですね。
>>634 断片的に書いてみる。
次のページへのリンクの作り方は
$next = $page +1;
$self = $_SERVER["PHP_SELF"];
print "<a href=\"$self?page=$next\">次</a>";
それを受け取る時は
$page = $_GET["page"];
全体のページ数を計算するなら
$pages = ceil(count($data_all) / 100);
最後のページの処理は要注意かな。
>>593 ...</a>だけ残す意味わからん
最長マッチだからタグが2つ以上入ってた場合に破綻するし
639 :
627 :2005/09/15(木) 00:52:48 ID:???
>>636 ありがとうございます。
よく見る「次」のリンクができています。
が、最終ページになってもリンクが....(汗)
どこかで打ち止めの呪文を書かないといけないようです。
最後のページの処理とはこのことですか?
640 :
627 :2005/09/15(木) 01:15:18 ID:???
>>639 続きです
打ち止めの呪文は、全体のページ数にイコールかそれ以下の時にというif文でできました。
同じく、$page-1で「前のページ」リンクもできました。
残るは、1/2/3/4/.....というような、全ページへのリンクのみとなりました。
Perlのuse strictに相当する機能があれば教えてください
642 :
627 :2005/09/15(木) 03:18:06 ID:???
>>640 の続き
最後のページの処理のもうひとつの意味。
100行で括ったまま作業をさせているので、最終ページで3行のみ
表示となった場合に、97行のカスが書き込まれてしまいます。
(<table>で表示させてる場合は、そりゃぁひどいのなんのって..)
そこで、全データ数-(表示ページ×100)の式を書き、
100よりも少ない場合の処理と、100の場合の処理に分岐させ
無事、綺麗に表示することができました。
ヒントをくださった皆様。ありがとうございました。
>>641 strict refs,subsに該当するのは無いかな。
strict varsならerror_reporting(やphp.iniの設定)でE_NOTICEを扱うようにすれば、
初期化されていない変数宣言として通知される。
エディタの機能を使ってコーディング時にチェックするという手も
646 :
nobodyさん :2005/09/15(木) 11:19:39 ID:yS4KEn1H
>>628 >>630 function aaa($aaa) {
return preg_replace (array("$bbb", "$eee") , array("$ccc", "$fff"), $aaa);
}
こういう方法もあるでよ。
647 :
627 :2005/09/15(木) 13:20:55 ID:???
>>643 レスありがとうございます。
とても便利そうなのですが、よくわからないです。
648 :
軟式PHP :2005/09/15(木) 14:21:44 ID:???
使ってみることにより成長するんだが。
pearって持ってくるのがいちいち面倒
変わった人だな
sessionをDBで扱うメリットって何ですか?
PHPって楽しいよな!
653 :
軟式PHP :2005/09/15(木) 17:48:14 ID:???
>>651 2台サーバーがあって、ロードバランサーとかで振り分けてる場合に
使うと一番利点が高いような気がする。俺は。
657 :
PHP初心者 :2005/09/15(木) 20:41:48 ID:VaGG+gkL
どなたか、掲示板等に表示されるIPからIDを生成する仕方を教えてください。
>>655 (look for) a needle in a haystack
干し草の山の中の針(を探す) ((不可能な事, むだ骨などのたとえ)).
>>657 $id = md5 ( $_SERVER['REMOTE_ADDR'] );
cryptと md5はどう使い分けるべきですか? md5の方が良い場合はどんな時ですか?
661 :
PHP初心者 :2005/09/15(木) 22:05:02 ID:VaGG+gkL
>>659 ありがとうございます。早速ためしてみます。
md5でid作るって池沼としか
携帯の個体識別情報を取得したいのですが どう変更したらいいのか教えていただけますか? sub write{ &asyuku; #携帯機種を取得 $agent = $ENV{HTTP_USER_AGENT}; #$agent = "J-PHONE/3.0/J-SH05"; if($agent =~ /DoCoMo/){ @agents = split(/\//,$agent); $agent = $agents[2]; } elsif($agent =~ /J-PHONE/){ @agents = split(/\//,$agent); $agent = $agents[2]; } elsif($agent =~ /UP\.Browser/){$agent = 'EZweb';} elsif($agent =~ /Mozilla/){$agent = 'PC';} else{$agent = '?';}
It's CGI. Fuck guy!
665 :
663 :2005/09/16(金) 00:11:04 ID:???
すみません間違えました
置換に関する質問。 A03という文字があったとして、数字の部分は二桁or一桁の動く数字。 数字の部分に対してタグを入れたい。 $levelm = "/A([1-9]|[1-9])?([0-9]|[0-9])([^0-9]|[^0-9])/" preg_replace ($levelm , "A<span class=\"level\">$1$2</span>", $buffer); これだと全ての数字にマッチしてしまう。 どうすればいいですか。
667 :
nobodyさん :2005/09/16(金) 01:31:08 ID:0dogEF/n
Web制作板からの移動です この板には「罪と罰」というネットゲームをご存じの方はいらっしゃるでしょうか? そのように複数のプレーヤーの様々な数値を共有するようなことはどのように制作するのでしょうか? 拡張子を拝見してCGIを使用していることまでは分かったのですが内容までは分かるはずもなく知りたいという欲求にかられています。 自分のスキル不足、無知を知っていての質問です。 どうがご講義願います。
そういうのを自分で作りたいの?
669 :
667 :2005/09/16(金) 01:42:35 ID:???
>>668 さん
あつかましいようですが作ってみたいです。
作りたいのは罪と罰のようなRPGとは少々違うのですがプレーヤーに数値があるのと多人数参加型のゲームであることは変わりは割りません。
でも私はCGIの知識はまったくと言って良いほど無く現状では無理です。
こういう私がこんな発言してすみません。
そういうのって基本的にcgiじゃ向いて無いと思うよ windowsアプリケーション向き
BBSに投稿された他人のレスを皆が見られるのと基本的に同じ
673 :
nobodyさん :2005/09/16(金) 08:11:38 ID:BzI51Y3f
PHPのLDAP関数では、Windows認証ってできますか? DNを指定するのではなく…。
674 :
nobodyさん :2005/09/16(金) 15:23:31 ID:bO5oShWU
違う板でも聞いてしまったんですが strtrで\nの記号は消せるんですけど 普通の改行が消せません。 <TEXTAREA>から送ってるんですが改行したまま送信するとその改行がログファイルにそのまま出ちゃうんですよねー どうにかなりませんか?
'\n'はリテラルの\n。改行を削除するには"\n"とする けど*nix系サーバの\nはLF(ラインフィード) Macから送られてくる改行記号は\r = CR(キャリッジリターン) Windowsは\r\n = CRLFでマッチしないことがある 対策としては\rと\nをそれぞれ削除するか、キャラクタクラスを使って /[\r\n]+/、/(\n|\r|\r\n)+/のようにする等
どうか教えてくださいませ 検索データを保持しつつ、いろいろなパターンのソートを したいのですがどのようにすればよいのでしょうか
諸先輩方、教えてください。 $name1 = "山田"; $name2 = "中村"; for($i=1; $i<3; $i++) { $nameN = "\$name" . $i; print $nameN . "<br>\n"; } これを実行すると出力結果は $name1 $name2 となってしまいます。 山田 中村 と出力させるには ↓この部分どう変更したらよいでしょうか? print $nameN . "<br>\n"; お願いします。
ファイルの最終更新日時を変更したいのですが、そのようなことは可能でしょうか? もし可能であれば、どの関数を使えばいいのでしょうか?
>>679 早速のご回答有難うございます。
配列にしてやってみます。
>>677 です。
>>679 さま
ありがとうございます
DBからの検索結果を保持したままいろいろソートしたいの
ですが、どのようにしたらよろしいのでしょうか
>>682 DBにソートしなおさせる
又は全部配列に入れてPHPでソートする
以外にない
685さま ご回答ありがとうございます 配列に入れてみます
phpの解説本の「スクリプトは1つにまとめられる」みたいな章に載ってた例文を そのまま打って実行してみたのですが、エラーになってしまいます。 私の打ち間違いだと思うのですが、どこがおかしいか教えていただけないでしょうか? <html> <body> <?php if(empty($_GET["yyyy"])): ?> <form action="test41.php"> 西暦<input type=text name=yyyy>年 <input type=submit> </form> <?php else: $meiji=$_GET["yyyy"]-1866; $taisyo=$_GET["yyyy"]-1911; $syowa=$_GET["yyyy"]-1925; $heisei=$_GET["yyyy"]-1988; print "西暦{$_GET["yyyy"]}年は明治{$meiji}年、大正{$taisyo}年、<br>\n" ."昭和{$syowa}年、平成{$heisei}年となります。<br>\n; endif; ?> </body> </html>
688です。 すいません、自己解決しました。 "を付け忘れてました。 どうも失礼しました。
どっかで見たことあると思ったら徹底攻略か 今思うとすごい文法だな。
691 :
軟式PHP :2005/09/16(金) 18:23:50 ID:???
凄いクソースだな…w
>>691 と言う事はあの本で勉強しないほうが良いですか??
いやいいと思うよ俺は ソースが汚くてもそれで読者がPHPを理解できるようになれば それであの本の役目は果たしてるだろ
頑張れよ。
フォームを作ってテキストを入力してそれを$_REQUEST["〜"]で受け取って $bunに代入しました。それで、$bunに特定の言葉が入っているか判断する(例えば「yahoo!」と言う文字が有るか無いかで次の処理を変える) ようにしたいのですが、どうやったら良いかいまいち分かりません。 ifを使ってやると思うのですが、、、ヒントを頂けないでしょうか?
700 :
z208.219-127-36.ppp.wakwak.ne.jprlo :2005/09/17(土) 00:53:05 ID:ILTk3jyK
Anime Land-2004 otzoi
掲示板のデータを修正して、書き直しする部分を作ったのですが、 修正データを書き込む箇所で、該当レコードの次のレコードが削除されてしまい、四苦八苦しました。 そこで、試しにレコード番号に−1をしたところ削除されないようになり正常動作しました。 しかし、なぜ−1になるかわかりません 【環境】winXPsp2 + apache2 + php5 $input = implode(",",array($recode,$renen,$remake)); //入力データ作成 $dfile = file($data_file); //既存ファイルの読み出し $fp = fopen($data_file, "w"); //オープン for($i=0; $i<sizeof($delfile); $i++){ list($dcode,$dnen,$dmake) = split( ",", $dfile[$i]); if ($recode == $dcode) { //該当データか判断 $dfile[$i-1] = $input; //該当箇所の書き換え ←問題の箇所 } fputs($fp,$dfile[$i]); //書き出し } fclose($fp); 該当レコードが0番目の場合 FPUTSで、レコード−1番にインプットが入って、fputsではレコード0を書き出している。 次に1を書き出して・・とやっていくと、−1は書き出されない計算になると思うのですが・・・ 書いてることが支離滅裂になってきたけど、わかってください とにかく気持ち悪いんです
すみません。修正されてませんでした。 −1すると、修正できませんが、直後のレコードも削除されません。 −1をとると修正はできますが、直後のレコードが削除されます。 どーすれば普通にできるんでしょうか?早く寝たい・・ 原因は fput か for か どっちでしょうか?
データファイルの各行のサイズが固定でないと出来ない方法だね。
forの条件式は delfile -> dfileの間違いだとして、、
>>701 が言ってるように、書き出されないはずだよ。
他にヤバそうな所といえば、file()は改行コード付きで読み込まれるから、
$inputの最後に改行コードが無いとつじつまが合わない事になるくらいかな。
そのせいで実際のデータファイル内では1行に2レコード入っちゃってるんじゃないかな。
それを別の表示用のスクリプトで見ているから あたかも消えたように見えるとか。
>>704 さん
ありがとうございます!
それでした。
$inputの後ろの改行コードが無く、1行2レコードになってました。
こんな時間なのに、的確なチェックありがとうございました。
706 :
nobodyさん :2005/09/17(土) 07:43:35 ID:7NQoGAMZ
gz圧縮するには、以下のようにすればいいようですが、 <? ob_start("ob_gzhandler"); ?> <html> <body> <p>This should be a compressed page. </html> <body> ちゃんと圧縮されているかどうか確認する方法はないでしょうか? レスポンスヘッダに「圧縮した」という情報が付加されているのかと思い見てみたのですが、 それらしき情報はありませんでした。
707 :
706 :2005/09/17(土) 07:48:14 ID:7NQoGAMZ
2chのヘッダを見ると Content-Encoding: gzip がありました。 これがないということはちゃんと動作していないということでしょうか? ZLib Support はenabled になっているのですが…。
ob_gzhandlerが全て面倒を見てくれるよ。 ・リクエストヘッダのAccept-Encodingの内容の確認 ・それに応じて圧縮するか否か ・必要であればリスポンスヘッダ(Content-Encoding)の追加 telnetで確認するのなら、リクエストに Content-Encoding: gzip, deflate を追加する時としない時とで比較すればよいかと。
>>706 今試してみたけどちゃんとヘッダー出してますよ
Date: Fri, 16 Sep 2005 23:26:50 GMT
Server: Apache/2.0.54 (Win32) PHP/5.1.0b2 mod_perl/2.0.0 Perl/v5.8.6
X-Powered-By: PHP/5.1.0b2
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 1212
Keep-Alive: timeout=15, max=92
Connection: Keep-Alive
Content-Type: text/html; charset=Shift_JIS
Content-Language: ja
200 OK
>>706 FirefoxでLive HTTP Headers
712 :
706 :2005/09/17(土) 08:33:33 ID:???
ありがとうございます。 もう一度試してみたらちゃんと出ました。 レスポンスも悪くないし、今まで何故使っていなかったのだろうという感じです。
713 :
z84.61-45-20.ppp.wakwak.ne.jprlo :2005/09/17(土) 09:11:42 ID:mvdEHd47
Anime Land-2004 otzoi
すいません、ある鯖で自作のPHPスクリプト動かしたときには エラーがあればきちんとエラー情報が表示されたんですが、 別の鯖に移ったら、エラー表示が出なくなりました。 具体的には、たとえば行末の「;」を忘れた時に普通はエラー表示されますよね? それが、真っ白な画面が出るだけで、エラーメッセージが出ないのです・・・。 これはPHPの設定の問題でしょうか??
あんまりよくないとかじゃなくて底なしの大馬鹿野郎 共有にしろ専有にしろ
714じゃないけどモジュール版のPHPは 暴走させても致命的なダメージはないのでは? 特に専鯖の場合はApacheリスタートでほとんど無問題と思う まあやらない方がいいに決まってるんだけど
趣味グラマって怖いこと言う人が多いね
絶対やらないゲームのネタばれでも必死で避けてしまうよな。
そもそも、ローカルでテストすらしてないPHPを鯖に上げるって時点で('A`)
まぁ、
>>714 はローカルにテスト環境構築しろ。って事で
なによりまずlintでシンタクスチェックを
722 :
714 :2005/09/17(土) 16:55:28 ID:???
や、なるべく本番に近い環境でデバッグしたほうが結局なにかと早いので、
本鯖と同じ仕様で、デバッグ専用の専鯖も一つ借りてるんです。最近はかなり安くなりましたし。
以前はいちいちローカルでテストしてましたが、Windowsマシンだし、あとメール環境の違いとか
cron絡みとか、PHPのバージョンの違いとかで微調整が面倒くさかったので。。
>>715 参考になりました。ありがとうございます。
こんなレベルなら、地面でも掘ってるほうが頭使わなくていいんじゃないの?
じゃあ「デバッグ専用の専鯖」の意味がないじゃん。 脳内鯖?
会社もかわいそうだよな。こんなの雇って。
ホームラン級の馬鹿だな
>>727 意図が分からんので適当に答えると、uniqid md5 substrあたりを組み合わせればよいかと。
>>730 燃料投下するにしても、的はずれ過ぎっすよ。
関数の中で関数は使えないの?
コーディングしていると、ユーザー関数、変数、ファイル名などの名称で悩むことが 度々あるのですが、その際に、大文字、小文字、似たような意味を持つ英単語の 区別など、本来ならば問題にする価値もない部分まで気になってしまいます。 ぜひとも皆様のご意見を聞かせていただければと思い、質問させていただきました。 よろしくお願いします。
>>734 うまく動いてるのに、変数名とかフィールド名が気に入らないだけの理由でプログラムに手を加えて、エロイ事になった漏れがやってきましたよ。
いろいろやってるうちに自分なりのパターンが出来てくると思う。
メール送信のスクリプトを作ったのですが実行すると 「Fatal error: Call to undefined function mb_language() in C:\○○○\mail.php on line 10」 とエラーが出てしまうので、10行目のコードを確認したのですが原因が分かりません。 どこが間違っているのでしょうか? よろしくお願いします。
738 :
ソースです :2005/09/17(土) 23:14:31 ID:???
◆フォーム <html> <head><title></title></head> <body> <h2>メール送信スクリプト</h2> <form action="mail.php" method="past"> 宛先:<input type="text" name="address"><br> 件名:<input type="text" name="subject"><br> 本文:<br><textarea name="message" rows="5" cols="30"></textarea><br> <input type="submit" value="送信"> </form> </body> </html>
◆メール送信 <html> <head><title></title></head> <body> <?php $address = $_POST['address']; $subject = $_POST['subject']; $message = $_POST['message']; $header = "Content-Type: text/plain;charset=iso-2022-jp"; mb_language("Japanese"); //10行目 if(mb_send_mail($address, $subject, mb_convert_encoding($message,"JIS", "EUC-JP"),$header)){ print("送信完了しました。"); }else{ print("エラー:送信に失敗しました"); } ?> </body> </html>
PHP-Usresでスルーされてしまったため、こちらで聞きます。 PHPで使えるDOMで、DTDを無視して読み込みが出来るできるラ イブラリってありますか。 winのvc++で、某社のXMLライブラリを使って出来てはいるの ですが、同じことをPHPでしたいです。 スレ違いだったら誘導願います。
> Fatal error: Call to undefined function mb_language() in C:\○○○\mail.php on line 10 致命的エラー: 定義されていない関数 mb_language() が C:\○○○\mail.php の10行目で呼び出されました。 なので、鯖のPHPがmb_language関数を使えるようになっていないのでしょう。 他のmb_*関係の関数(mb_send_mail、mb_convert_encoding)も使えないんじゃないかな。 phpinfo(); を実行した時に、mbstringの項目を見るとはっきりします。 対策は、その鯖の設定(場合によってはインストールから)を変更するしかないです。 鯖を管理している人に相談してみましょう。
>>737 原因は下記の通りです
Call to undefined function mb_language()
>>735-736 初心に帰って英和辞典でも読んでみることにします。
ありがとうございました。
>>741 ご丁寧な
説明ありがとうございます。
上の結果はサーバーではなく、ローカルで実行したときのものです。
説明が足りませんでした。すみませんorz
SMTPサーバーをlocalhostにしているのですが、それが原因でしょうか?
もしそうなら、SMTPサーバーはyahooメールやGmailのものでも代用可能なのでしょうか?
また、phpinfo(); を実行してmbstringという項目を探したのですが、見当たりませんでした。
バージョンは下記の通りです
PHP5.0.5
Apache/2.0.54 (Win32)
>>744 php_mbstring.dllをphpに組み込む。
インストールの説明をちっとも読んでないみたいだから、
googleで適当なサイトでも探していっぺん読んでこい。
>>745 ありがとうございます。
少し勉強してきます
php.iniとSMTPの設定をした後、再度さっきのスクリプトを実行したところ 今度は「Warning: mb_send_mail() [function.mb-send-mail]: Missing To: field in C:\○○○\mail.php on line 11」 と警告がでてしまいます。 エキサイトで翻訳してみたところ「警告: mb_は_メールを送ります。() function.mbはメールを送ります: 欠けているTo: Cの分野」 となりました。 欠けている、というのは・・ 11行目のソースを見ても間違いが分かりません・・。 今度は何が原因なのでしょうか。 ご教授お願いします_| ̄|○
748 :
ソース :2005/09/18(日) 01:07:56 ID:???
<html> <head><title></title></head> <body> <?php $address = $_POST['address']; $subject = $_POST['subject']; $message = $_POST['message']; $header = "Content-Type: text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address, $subject, mb_convert_encoding($message,"JIS", "EUC-JP"),$header)){ //11行目 print("送信完了しました。"); }else{ print("エラー:送信に失敗しました"); } ?> </body> </html>
>>747 Missing TO: field
なんだからメール送信に必要な「TO:」が設定されてないですよ。
って事なんじゃないの?
(´-`).。oO(エラーメッセージが日本語で表示されるようになればここへの質問も減るのかな・・・?)
754 :
736 :2005/09/18(日) 06:55:49 ID:???
>>751-752 漏れだけじゃないんだ。ヨカタ
作っていくうちに関数と実際の機能がかけ離れて来たり、他の変数名とのいまいち、名前が粒ぞろいじゃなくて気に入らなくなったり。
で、そういうとき、藻前らはどう対処してますか?
一括置換で逝っちゃいますか?
失敗するともう訳解んなくなる。
1ファイルには200行以上入れないことにしている
>>753 いえてるw
英語読んでない香具師けっこういるね
下手に和訳されても混乱するだけだろ・・・
日本語で表示されると、エラーメッセージが文字化けして読めないって椰子が ワラワラと出現する予感
あるあるw
初めて「make: 入ります ディレクトリ 〜」なんてものを見た時は涙が止まらなかったよ。。。
>>478 さんと似てますが、
変数f = 10.38 という値を最小フィールド幅10、小数点以下3桁表示させたいのですが、
printf("%10.3f", $f);
としても、最小フィールド幅が10になってくれません。
って、書きながら気が付いたんですけど、フィールド幅は変ってるけど、htmlのせいで
変ってないようになってたのか...orz
とすると、どうするのがベストなんでしょうか?
printf("<pre>%10.3f</pre>", $f);
何か違う気が...
PHP + MySQL でログインのプログラムを作っているのですが、リンクなどで IDや名前を送ってしまうと、アドレスバーにそれが表示されてしまいます こんなんです→ id=onishi&name=大西 どうやったらこれを回避できるのでしょうか? セッション管理というのを最近知ったのですが、それを使わないと出来ないので
764 :
763 :2005/09/18(日) 14:16:52 ID:???
↑最後端切れになってしまいました(汗
765 :
軟式PHP :2005/09/18(日) 14:20:00 ID:???
>>763 意図がよくわからんが、アドレスバーの後ろにつけたくない"だけ"なら
POSTで送ればいいのでは?
766 :
765 :2005/09/18(日) 14:40:16 ID:???
>>765 リンクってGETじゃなくてPOSTでも送れるのでしょうか??
767 :
軟式PHP :2005/09/18(日) 14:43:24 ID:???
JavaScriptを使えば出来るよ。セッション管理の方が便利だけど。
JavaScriptよくわからないですーー。
>>767 JSでもPOSTでは送れないんじゃまいか?
送れるなら、ちと興味がある
>>762 素直に桁数しらべて ;入れれば?
おわ?&nbsp;と書いたつもりだが・・
>>766 <form name="form">
<input type="hidden" NAME="name" value="大西">
</form>
としておいて、JavaScriptでform.submit();すれば送れるけれど。
どのみちHTMLソースを表示すれば見られるのは一緒なので、イヤならセッションかな。
その前に聞きたいんだが、何のためにnameを送るの?
データベースにidとnameを登録して、idからnameを引けば別に各ページへ引き渡す
必要はないと思うんだけど。
774 :
軟式PHP :2005/09/18(日) 15:22:20 ID:???
>>769 サンプルを書いてたら、その前に772が答えてくれた。
>>772 >その前に聞きたいんだが、何のためにnameを送るの?
名前だけ表示したいページがあるのですが、データベースから取得するのが
めんどくさかっただけです。。
ちゃんとデータベースから取得するようにしてみます。
>>775 がめんどくさがった事ことに対してマジメに相手をした椰子共、哀れなり。
質問スレで真面目に答えるやつはバカってことだろ?
>>775 POSTやGETで戻った内容を信じすぎないほうがいいと思うよ。
スレ違いかもしれませんが、ちょっと知恵を拝借させてください。 入力フォームからのデータによってSQL文を生成し、それによってデータベースから結果を取得表示するのですが 検索結果件数取得をするためにはどうすれば、無駄がないでしょうか 無駄にコードが長いですがご容赦ください・・・ コード自体への突っ込みもあればよろしくお願いします。$loc=_SS($_POST["loc"]); $type=_SS($_POST["type"]); $phone=$_POST["phone"]; $shopname=_SS($_POST["shopname"]); if($phone==NULL){//*1************************************************************************************************************* $search=""; $search.="select shopname,pg from shop where "; if($loc!=NULL){//*2 $search.= $loc." =loccd "; //LOCが入力されている if($type!=NULL){ $search.=" and ".$type. " IN(typecd,typecd2,typecd3,typecd4,typecd5)";//LOC入力済みかつ、TYPE入力済み if($shopname!=NULL){$search.=" and shopyomi LIKE '%" . $shopname . "%' ;";}//else{$search.=";";} 最後のせみころん不要? }else{//LOC入力済みかつTYPE未入力 if($shopname!=NULL){$search.=" and shopyomi LIKE '%" . $shopname . "%' ;";} } }//*2 else{//LOC未入力 *3 if($type!=NULL){//LOC未入力かつTYPE入力済み $search.=$type. " IN(typecd,typecd2,typecd3,typecd4,typecd5);"; } }//*3
781 :
続き :2005/09/18(日) 18:29:43 ID:???
}//*1 ************************************************************************************************************* //************************************************************************************************************* elseif($phone!=NULL){//*4 $search="select shopname,pg from shop where phone=" . $phone; if($shopname!=NULL){$search.=" and shopyomi LIKE '%" . $shopname . "%' ;";} }//*4************************************************************************************************************* if($loc==NULL&&$type==NULL&&$phone==NULL){ if($shopname!=NULL){ $search="select shopname,pg from shop where shopyomi LIKE '%" . $shopname . "%' ;"; }else{ print("どれかひとつは選択してください"); exit(); } } $rs = mysql_query($search,$conn); print($search);//生成されたSQL文の確認(デバッグ用表示) 以下 SQL結果の出力文 いいアイディアが浮かばないのが、count関数で出力すればいいんですが SQL文が変化するのでどうしようか困っています。
select count(*) from unkotable where unko = 'うまい' ということ?
そもそも、sql 文手書きの時点で、うんこだよね。
784 :
780 :2005/09/18(日) 18:33:32 ID:???
>>783 おや?手書きはうんこなんですか・・・
先輩諸兄はどうやってるんですか?
>>780 単に select count(*), shopname,pg from shop... とすれば済む話でしょ。
それにしても惨いコードだな。
こんな奴と一緒に仕事をするハメになったら、どんな手を使ってもチームから
追い出したくなる。
>>784 私はnavicatで出てくる文をコピペ・・・
適当なことしてると、SQL インジェクション食らって泣くことになると思う んだけど、世の中って、こんなに低いレベルだったのか。
789 :
780 :2005/09/18(日) 18:51:29 ID:???
>>785 お言葉ですが
それSQLエラーになりませんか?(汗
ソースコードがむちゃくちゃなのは自覚してますorz
適当な独学だけなもので・・・
>>788 自分は低いですが他の方は低くないでしょう・・・
$_POST['xxx']の値をNULLでチェックしている段階で腐ってる。。。 xxxの値が0でもNULLにマッチするけどいいのか?
792 :
nobodyさん :2005/09/18(日) 18:55:36 ID:MWUz/lX6
>>785 言い過ぎ
お前職場でも嫌われてんだろうな…可哀想に
> select count(*), shopname,pg from shop... select count(*) from shop... select shopname,pg from shop...
>>792 > 言い過ぎ
> お前職場でも嫌われてんだろうな…可哀想に
メンテナンス性が高いコードを書く事や、
クラックされにくいコードを書く事に関しては、
職場で嫌われようと徹底して行っていくべきだと思うよ。
795 :
780 :2005/09/18(日) 18:59:51 ID:???
>>790 本は一応買いました・・・
>>791 今のところはそれは大丈夫のようです
でも覚えておきます ありがとうございます。
>$_POST['xxx']の値をNULLでチェックしている段階で腐ってる。。。
ちゃんとしたソースを入門編とかの本でしか見たことないんで、理想的なコードってのがよくわかんないんですよね。。。
>>795 見た事が無いなら、探せばいいんじゃないの?
「php MVC フレームワーク」 とかで、最近書かれてるコードを探せば?
デバッグ段階だろうけどエラー/ワーニングメッセージの類いは表示させてないのか? それとも出てても無視?
>>794 大事なのは、ちゃんとしたものを作る・作らせるということであって、素人細工を
叱るのは、そのための手段。叱ることが目的になって、本来なら歓迎されるはず
だった正論を、他者が受け入れにくい不快なものにしてしまうようだと、本末転倒だ。
きつい教育的指導をするときは、事前と事後の根回しも、くれぐれもお忘れなく。
あべこべに、職場を追われるぞ。
おせっかい、スマソ
やってみせ、言って聞かせて、させてみせ、誉めてやらねば人は動かじ
2ちゃんで正しいマネジメントの仕方を議論してどーすんの?
正直、sqlなんて心配するほど食らうもんじゃないと思われ。
805 :
780 :2005/09/19(月) 00:49:36 ID:???
>>796 しらべてみましたが、なんか難しいですね・・・・
もう少しPHPの基礎とか強化してから改めて取り組んでみます。
>>797 どういう場合についてのエラー/ワーニングメッセージでしょうか?^^;
>>798 >>785 はちょっとショックでしたが、まあなんというか。。。
動けばいいってだけじゃない事を再認識させてもらいました。
贅沢を言えば、汚いコードって言うだけじゃないで
どこがどうきたないで、改善策も書いてもらえれば助かったんですがね・・・
>>805 漏れは785ではないが、改善策も書けなんて甘えも良いところ。
おまえみたいな甘えたヤツが漏れのプロジェクトに来たら、即クビだな。
きれいなコードを見たことないのなら勉強不足というか情報収集不足。
きれいなコードと自分のコードの違いがわからないのならセンス無し。
金もらってるプロだとするなら修業でもして滝に打たれた方が良い。
そこからはい上がってきたヤツは一目置かれるからガンガレ。
>>805 >>検索結果件数取得をするためにはどうすれば、無駄がないでしょうか
何したいかわからんので無駄かどうか知らんが、とりあえず結果の件数なら
$c = mysql_num_rows($rs);
ぢゃだめなのか?
条件を行き当たりばったりで書いてるように見える
見にくい=わかりにくい=見たくない
ざっと見たところ
$phoneが指定されていない loc,type,shopnameの指定されているものを条件とする
$phoneが指定されている phone,shopname(あれば) を条件とする
ってことでいいんじゃない?(違ってたらやっぱり他人にはわかりにくいということで)
if ($phone == "") {
if ($loc != "") {
....
}
if ($type != "") {
....
} else {
if ($shopname != "") {
........
}
この手のスレにいるヲタどもってのは「セキュリティに問題がある」ことが分かると 鬼の首でも取ったかのように大騒ぎする そしてセキュリティの穴を突いてくる犯罪者がそもそも悪いのだという最も重要な点を忘れ ひたすら自分の小賢しい知恵を振りかざして「初心者」をコキ下ろし ちっぽけで愚かなプライドを満足させている。つくづくバカなヤツらだ
809 :
808 :2005/09/19(月) 08:42:54 ID:???
おっと、「知恵」じゃなくて「知識」と書くべきだったな 似ているようで大きく違う
fsockopenで得てきたwebページの内容を一つの変数に入れたいです。 今は while(!feof($fp)){ $res .= fgets($fp,2048); } としています。 しかしページによっては連結するのに6秒くらい掛かります。 上以外で$resに内容を全て詰め込み速度が早い方法をご教授下さい。
糞初心者です。 どうしてもわからないので教えてください。 $sql= "create temporary table tmp select * from テーブル名 条件"; $res = $myclass->dbobject->query($sql); $sql = "SELECT * FROM tmp order by date"; $res = $myclass->dbobject->query($sql); while($row = $res->fetchRow()){ ・・・・・・・・ こんなんで一度得られた検索結果を、さらにいろいろソートさせたい のですが、どのようにしたらよいのでしょう。 お手数をお掛け致しますが何卒(初心者のため出来れば具体的な 形で)宜しくお願い致します。
>>810 6秒もかかるのか??
$res .= 消して読みこみだけのループさせてみ?
>>808 その「ヲタども」を「バカなヤツら」としたい君は、何なのさ?
置換した後に謎の文字列「X、Q、T、R」などが入るのは何ですか?
何をどう置換したかったのか書かないのが謎です。
>>810 6秒もかかるのはそのWebサイトが重いんだろ
通信スピードはPHPいじってもどうしようもない
818 :
nobodyさん :2005/09/19(月) 18:41:07 ID:e00KWmSt
ゼンドジャパンのPHPコーディング指針を見ると インデントはタブは使わずスペース4つが推奨となっているんだけど、 皆さんはどうしてます?
気分で適当にインデント。
>>818 タブを使ってる
スペースよりタブの方が見やすいし、容量も減る
>>821 400行くらいのコードになると1KBは変わる
>818 どのエディタでもタブを自動でスペースに変換っての 使ってるな。 要領がそんなに食うとは知らなかったけど、これからは 本運用の時は逆変換かけて使うかな。 別のエディタとかで開いたとき崩れにくいし、 タブだとエディタによって変にならんか?
>>823 > タブだとエディタによって変にならんか?
具体例きぼん。
タブ派だけど表示は4タブ
YY-PHP本家がNotFoundなんだが何かあったのか? これじゃYY-PHPがDLできないし、せめて理由ぐらい教えてくれ
あるスクリプト(A)が処理を終えるのにけっこう長い時間(数分〜数十分)かかるんですが、 その間も別のスクリプト(B)を並行して走らせるとします。 このとき、Bやwebサーバなど他のプロセスに影響しないよう、 Aの負荷をある一定以下にして(あえて実行速度を抑えて)走らせる方法ってありますか? PHP.iniでスクリプトのMax実行時間などはいじれますが、Max実行速度はいじれませんよね??
>>828 バックグラウンドで走らせる
あとはcronとか
>>825 viならタブの間隔設定出来るけどな。emacsもそれくらい多分出来るんじゃないのか?
ソースに埋め込む時の話なら、viならtsで、emacsならtab-widthで指定できるね。 元の話に戻ると、オイラはタブを使って(各自の)エディタ側で好きにインデント幅を決められる方が好きだな。
>>830 AもBもcronで走らせてます。
cronは単に「●時●分に■を実行」って指示するだけで、
実行速度とかを指定するものではないですよね・・・?
>>833 実行優先度を設定するniceコマンドと組み合わせればええんでないの?
>>833 niceで優先順位を下げたら?
後、OSの方でどぞーと言われてるんだからサッサと移りなよ。
まあでも確かにスクリプトの実行時間とかを調整したい時はけっこうあるわな。
>>828 すでに答は出ているかもしれないけど、Unixには niceというコマンドが
あって、これは優先度を「下げる方向」に使うのであれば、一般ユーザーでも
使うことができるよ。
ゲームのファンサイト運営しようかとPHP/MySQLチャレンジしてます。 PHPにSQLコードを埋め込むときはPHPMyAdminで作って、PHPコードを生成して コピペして調整しています。 少し困ったことがあります。 PHPMyAdminで作ったSQlの長文、特にGroup Byや join を使ったSQL文が 動作しません。シンプルな Group Byのモノは動作します。 例えば下のような長さのモノですけど、PHPMyAdminでは値が返されるのに PHPに埋め込むとErrorになります。 何か気をつけるところとかあるのでしょうか? select UserName, count(ginou) AS GinouKazu from Ginou left join TaisenRecords on Ginou.GameId = TaisenRecords.GameId left join Users on TaisenRecords.Winner = Users.UserId where GinouID = 21 and Ginou.FightId = TaisenRecords.FightId group by UserName ORDER BY GinouKazu DESC
どんなエラーがでてるかわからんから PHPから送ったクエリーをechoで出力して、 そいつをPHPMyAdminにコピペして動作するか確認してみては?
840 :
838 :2005/09/20(火) 14:06:36 ID:???
なるほどーやってみました echoでクエリーを出力してコピペしてPHPMyAdminでは動作しました。 PHPではエラー。エラーは下記でした。 ちょっと調べてみます。解決のヒントになりました。ありがとうございました。 mysql_fetch_array(): supplied argument is not a valid MySQL result resource
mysqlのエラーは?
842 :
838 :2005/09/20(火) 15:03:11 ID:???
mysqlのエラーを取ってみました。 すると、同じコードを実行した時にPHPMyAdminでは自動的に select SQL_CALC_FOUND_ROWS UserName,..... という風にSQL_CALC_FOUND_ROWSを添付しているようでした。 試しに動作しなかったPHPのコードにSQL_CALC_FOUND_ROWSを入れてみると動作しました。 MySQLサイトのReferenceを読むとクエリーをキャッシュする機能だという事のようです。 Tableをまたぐとこういう記述が必要になるのか、もっと汎用的に書けないものか 少し調べてみます。 ありがとうございました
843 :
nobodyさん :2005/09/20(火) 15:13:04 ID:VaLk2yaU
PHPをHTMLに組み込んで動かすにはどうしたらいいのでしょうか?
844 :
nobodyさん :2005/09/20(火) 15:13:42 ID:VaLk2yaU
あ
845 :
838 :2005/09/20(火) 15:14:15 ID:???
>>843 ・Apacheの設定を変えて、.html, htm を PHPに処理させる
・SSI を利用する
どっちも嫌だ…
847 :
nobodyさん :2005/09/20(火) 15:27:25 ID:VaLk2yaU
ありがとうございます。 PHPの中で別のPHPプログラムを動かすほうがいいのでしょうか・・?
>>847 何を言ってるのか分かりません。
まず、本などでPHPについて基本的な事を調べて下さい。
<html> <body> <?php echo 'Hello World'; ?> </body> </html>
1万行以上あるテキストファイルの処理をしたいんですが、 (処理内容は検索・削除・追加程度) file()関数で最初に配列に収めた後で foreachを使って1行ずつ検索等するのは メモリなどのリソースを使いすぎてしまうのでしょうか? こういう場合はfgets()関数で1行ずつ読み込んで処理すべきでしょうか?
掲示板を作ったのですが、投稿された文章の中にhtml等のタグがある場合 無効にしたいのですが、どうすればよいですか? また、一部のタグは許可したいのですが、その場合はどうすればよいでしょうか??
>>851 そういう機能を持った、オープンソースの掲示板を探してきて、ソースを読む。
>>851 サニタイジングとかともいい、複雑でありながら、基本中の基本です
これだけは、パクりパクりしながら、根性で勉強して書き上げた方が、今後のためです
PHPにはhtmlentitiesとか、専用の関数が用意されているわけだが。
857 :
nobodyさん :2005/09/20(火) 20:49:55 ID:+a/Wtbjo
すでにあるCSV形式の簡易データベース(たとえば住所録など)から 検索して結果を表示するプログラムを作りたいのですが、 なんか参考になるプログラム、あるいはページってありませんか? 上手な人ってデータをすべて読み込んで結果を表示するのか、 あるいは一行ごとに調べるのかなど参考にしたので。
858 :
850 :2005/09/20(火) 20:50:53 ID:???
>>852 データベースを使わない方法をなんとかお願いしたいのですが・・・。
今のサーバではDBの個数に制限があるので、なるべくなら使いたくないんです。
>>857 多分、上手な人は、その csvをDBに突っ込んで扱います。
そしてDBから csv形式で吐き出します。
>>859 857じゃないが
今やってる事のヒントをありがとう
861 :
857 :2005/09/20(火) 22:52:57 ID:mZEVLO6C
よくみたら850さんと似たようなことを知りたい状態かも(汗 859さん、レスどうも。 Excelからcsvで保存して使いたいのでなるべくデータベースは使いたくないな〜。 でも上手い人はそうしているのか・・ どなたかこの手のサンプルプログラムとか知りませんかね?
PHPとMySQLを組み合わせた際にテーブルのロックをいつ行うかということについて 1. LOCK mysql_query("LOCK TABLE ○○ WRITE, ▽▽ READ") QUERY mysql_query("SELECT ....."); mysql_query("INSERT INTO ....."); UNLOCK mysql_query("UNLOCK TABLES"); FETCH white(mysql_fetch_assoc()) { 。。。 } // SELECTの結果を使う か 2. LOCK QUERY FETCH UNLOCK のどちらで行うべきなのでしょうか? PHPとデータベースでどのように連携されているかということがよく分からず、つまり 1. QUERYを送った段階で結果のコピーが得られておりUNLOCKした後に内容が変更されても得た結果は変わらない のか 2. QUERYを送った段階では結果の参照(ポインタ)のようなものが得られておりUNLOCKした後に内容が変更されると結果が変わる ということが気になりまして、どなたが詳しい方がいらっしゃいましたらよろしくお願いいたします。
PHPのmb_send_mailでメールを送るとReturn-PathとReceivedに、ユーザー名@サーバー名.ドメインがついてしまいます。 これを消すにはどうすれば良いのでしょうか? Fromは手動で設定してます。 環境はFreeBSD5, PHP4です。
そういえば、PerlのDBIモジュールには、CSVファイルを相手にSQLコマンドで データ検索する簡易型SQLエンジン(?)があったなぁ
モジュール版とCGI版の両方対応のプログラムを作ろうとするときに 気をつけるべきことって何かありますか? 普通に書いているぶんには特に気にする必要はないのでしょうか?
>>863 MySQLはロックは自動でやってくれるから気にしなくていいのでは?
>>851 $string = strip_tags($string, '<a><b><i><u>');
タグ許可すればcssやjava script埋め込まれるのがオチ
>>871 警告
この関数は、allowable_tagsで許可した全てのタグ の属性を修整しません。
これには、style お よび onmouseover属性が含まれており、
悪意のあるユーザが他のユーザに見せるようなテキストを投稿する際に
危険な行為を行う可能性があります。
ほとんどの要素でonmouseover使える事と、onmouseoverでjavascriptを起動できる事を考えると むっちゃヤバいってことだね。
まず<>を全て&lt;&gt;にして、 有効にしたいタグだけ戻せば埋め込みは回避できるのでは? &lt;s&gt; → <s>
875 :
857 :2005/09/21(水) 09:01:19 ID:???
869さん、ありがとう〜。 参考にしたらやっぱ一行づつ呼んでるか。
>>872 allowable_tagにstyleやscript入れなければ良いだけでは?
それだと許可したものにonmouseoverとかでずらずら書かれるとアウト
>>877 逆に言うとそれ系の属性値だけ無条件に消せばおk?
$string = '<a href="#" onmouseover="alert(\'夢が広がりんぐ\')">on</a>'; $string = strip_tags($string, '<a><b><i><u>'); print $string;
>>879 だから preg_replace('/(<.*)onmouseover/', '$1', $string) とか入れれば良いだけでは?
正規表現のツッコミは無しで。
>>877 正規表現もうちょっと勉強しような
>>879 アンカータグなんて普通は許可しない。
htp://等から始まるものに自動リンクが普通では。
strip_tagsって全消しなら問題ないよな? 某所で無条件に使うなとか書いてあったからなんかまずいのかと思った
セッションの配列をunsetしたのに、issetで判定すると通っちゃう… unset($_SESSION['code']) && unset ($_SESSION['num']) で if ( isset($_SESSION['code']) && isset($_SESSION['num']) ) {A} else {B} unsetしたらBの方に飛びたいんだけど、この書き方だと間違ってる?
$string = '<オレ、おまえのこと大好き!>つまんね…<私もよ、あなた!>'; $string = strip_tags($string); echo $string;
pops(POP over SSL)がしたいんだけど、関数とかありますか? したいことはpop認証して本人確認がしたいんですが、pop3系の平文認証は出来たらしたくないので・・。 安全目な方法を探しています。 必ずしもpopsじゃなくてもいいのですが・・。
886 :
nobodyさん :2005/09/21(水) 11:29:04 ID:ND56HoqP
>>867 $url = $_SERVER["QUERY_STRING"];
$parse_url = parse_url($url);
parse_str($parse_url['query']);
$q = mb_convert_encoding(urldecode($q), "SJIS", "UTF-8");
echo $q;
後半は870のコピペ。URLを取得するのにこういう方法もある。
>>884 おーすばらしい。
単にs/<.*?>//gで消してるだけなんかな。
くだらない質問なんですが・・・ あるメソッドの中でcall_user_func_arrayを使って親クラスのメソッドを明示的に呼び出すにはどうしたらいいですか? parent::method(); を call_user_func_array(???, $arguments); という感じでやりたいのです。
>>888 $method = array(get_parent_class($this), "method");
call_user_func_array($method, $arguments);
どうやらこの書き方でできるらしい。
890 :
889 :2005/09/21(水) 14:26:15 ID:???
ごめん、インスタンスが渡されてないや(;´д`) 上のは見なかったことにしてくれ。
>>856 htmlentitiesってやつでは駄目なんですか?
PHPでpath_infoを使うにはサーバーの設定を変更する必要があるのでしょうか? 参考になるURL等あったらよろしくおねがいします
893 :
892 :2005/09/21(水) 15:15:53 ID:???
894 :
nobodyさん :2005/09/21(水) 15:26:39 ID:ND56HoqP
>>893 htaccess の RewriteRule で出来るよ。
895 :
888 :2005/09/21(水) 15:42:13 ID:???
>>889 >>890 試してみたらそれでいけました!
実際にはstaticなメソッドでなくてもできるんですね。
あと、$method = array('parent', $args); でも問題ないことを確認しました。
情報ありがとうございました。
897 :
893 :2005/09/21(水) 17:29:48 ID:???
>>894 ありがとうございます。
mod_rewriteのインストールは必須でしょうか?
>>897 もっちろん。インストールしていないと500エラーになるよ。
(それで小一時間悩んだ男)
ファイルに書き込むときに配列にデータを入れて、foreachとfputsで一気に書き込むようにしてるんだが、よくファイルが壊れる。なんかいい方法ある? ロックファイルも使ってるし、書き込むファイルもflockしてるし、stream_set_write_bufferも使ってる。アクセス+ファイル書き込み激多い。
サーバーが落ちてるか落ちてないか監視するために、 $file = fopen ("url.html", r); if (is_file ($file)){ echo "true"; }else{ echo "false"; } 落ちてなくてもfalseになるんですが、おかしい部分を教えて下さい。
>>900 > if (is_file ($file)){
マニュアルで、is_fileの引数と、fopenの返り値を調べるべし。
>>900 その書き方だと監視するためのurl.htmlと同じ場所で稼動するスクリプト?
鯖落ちてたら監視スクリプト自体が動かんジャネ?
903 :
893 :2005/09/21(水) 21:56:44 ID:???
>>903 >>894 もしくはFilesMatch + ForceTypeを使う
いいかげんスレ違いだが
>>899 書き込みが成功したのを確認してからRenameが定石と思われ
いきなりfopen('hoge.dat', 'w')みたいなミスをやってないかとか、
もっと軽量なデータ構造にできないかとか設計の見直しもアリだと
思うけど、なによりまず何故壊れてるのかを突き止めないことには
決定打はない
書いてない鯖かOSの制約じゃねーの 書き込み過多でログ飛ぶとかどんな馬鹿スクリプトだよ
なんかキモイ奴に煽られた ガッデーム!!
鯖の構成によっては、NFS見えるのが微妙に遅くて、 ロックファイルが見える前に、別のフロントから叩かれてファイル壊れる可能性あるかもね。
909 :
863 :2005/09/22(木) 01:36:33 ID:???
>>868 ありがとうございます
全く知りませんでした。早速、詳細を調べさせて頂きたいと思います
910 :
nobodyさん :2005/09/22(木) 02:56:22 ID:h7xNWILg
windowsにPHP 4.4.0をzipパッケージから入れたのですが、 php_mysql.dllが入ってませんでした。 正確にはmysql 4.1.12だからphp_mysqli.dllが必要なのですが。 何か変わったのでしょうか?
>>909 銀行システムとか、よっぽどクリティカルなものでなければ、
データベースの自動ロックに任せておけばいいと思う。
ただし念のため、「分離レベル」「ロックの粒度」などをググって
調べておいてね。
912 :
nobodyさん :2005/09/22(木) 04:52:57 ID:ZCKvH6ce
一世代前の人はWEBをウェブと読まないそうですが 何と言うのでしょう?
すいません、PHPスクリプトによるDBのバックアップについてなんですが、
http://tsuttayo.sytes.net/mysql/backup/index.html を参考にしてやってみましたけど、肝心のバックアップファイルがどこに
保存されてるのかが分かりません・・・。
試しに $BackPath = '/test/'; と設定してスクリプトを実行してみましたが、
その「test」フォルダがroot下にありません。SSH接続してroot直下に「test」フォルダを
作ってからスクリプトを実行しても、testフォルダの中にtar.gzが作成されてません・・・。
スクリプト実行時にエラーメッセージは出ないので、スクリプト実行自体は成功してると思うんですが。。。
(※私はLinuxの知識がほぼゼロなので、何か根本的な勘違いをしているかもしれません…)
914 :
nobodyさん :2005/09/22(木) 05:15:33 ID:ZCKvH6ce
一世代前の人はWEBをウェブと読まないそうですが 何と言うのでしょう?
>>913 mysqlは使ってないからよくわかんないけど、コマンドのオプションの指定の仕方ってこれであってるの?
-uroot とか。-u rootとかになるような気がするんだが。。
>>914 PHPに関係ないでちゅよ
>>910 無くても使えるんじゃないの
やってみれば
GETに入力された文字列内の「+」が半角スペースに自動変換されて$_GETに格納されているんですが、 「+」のまま$_GETに持ってくる設定などできるのでしょうか?
>>915 ありがとうございます。
「-u root」については私も気が付いて直してあります。
その他エラーにはならないので、とりあえずスクリプト自体は問題ないと思われます。
出来ないんじゃない 正常な動作だし parse_str($_SERVER['QUERY_STRING'], $foo) → rawurldecode($foo['bar']) とかやるしかなさそう
>>893 ヤ○ザ?!
test.php を test 置換させちゃえば?
RewriteRule ^/(test)/([0-9]*)/([0-9]*)/$ /test\.php?id=$1&id2=$2
ちょっと自信ないけどこんな感じ?
921 :
899 :2005/09/22(木) 11:46:06 ID:d7rcueJ2
>>905 レスありがとうございます。色々参考になりましたので、やってみます。
>>913 ,918
他にも全部オプション「-p」「-r」とかもだが直してあるのか?
自分のやったことは全部書け。小出しにすんな。
単純に <?php system("/usr/local/bin/mysqldump データベース名 -uユーザー名 -pパスワード --opt -rディレクトリ名/ファイル名"); ?> とやって正常に動作するかどうかを切り分けていった方が早いと思うけど。 それと、MySQL4.1以降でUTF以外の文字コードを使っているのなら "--default-character-set=文字コード" で 文字コードを明示的に指定してやらないと "" 辺りが文字化けしちゃう可能性があるのでご注意。
>>922 はい、全部直してみましたがダメでした。
あと、rootをadminにしてみてもダメでした。
>>923 >>913 でリンクを貼ったサイトのスクリプトには
各コマンドを実行する度にエラーがあればexitしてエラー表示するようになっていますが、
まったくエラー表示されません。
また、function MySystemで出力されるであろうと予想される文字列は全て正常に出力されます。
ちなみにMySQLのバージョンは3.23.58です。
多分これ。 スクリプトを動かしてるユーザーが「/test」の権限持ってない。 手っ取り早いのは、ちと怖いが、/testのパーミッションを777にしてやってみそ。 普通に作っただけだと、root権限で実行するなら当然作れるが、作れないからな。 あと、ちょっと話はズレるが「root直下」って言い方すると「/root/test」みたいに聞こえる。 「/」直下って言うんだ、一般的には。
データベースの概念がうまく掴めないのですが…。 何処か良いサイトがあったら教えてください。
ルートディレクトリといえば普通 / だろ
$_REQUEST[]ってのは アクセスした瞬間に実行されるの?
>>827 そうですが何か?
>>928 いろんな初期処理を経て実際にスクリプトを実行する直前には準備できています。
多量のリクエストデータを送る場合でもなきゃ普通のユーザはその事を気にしなくていいかと。
>>913 情報がやっぱり少なくて分からん…。
・tarコマンドのパスを確認 (which tar)
・rootって本当に / ?(sshで入ったら、pwdコマンドで確認)
・バックアップ用ディレクトリの権限を確認(ls -l ディレクトリ名)
・mysqldump のパスを確認
・sshで入って、mysqldump のコマンドを直接実行してみる。出力先は適当な所で。
あとはまぁ、
>>923 の方法が良さそうだけど。
あと、rootをadminにしても無理ですよ…。
すみませんが、質問をさせてください。 あるサイトにHTMLで記述してあるデータ等を、PHPで引き出して、 配列に格納するにはどうすれば良いのでしょう。
つfile()
>>931 このスレて構うことないですよ。
本人が「スクリプトは正常」と言っているんだから。
正常に動作しているPHPスクリプトのpostgreSQL 接続文 $con = pg_connect("host=localhost dbname=hoge user=foo password=xxxxxxx"); の部分を別のDB接続に変更したら Notice: Undefined index:orz(orzは本来$_POST["orz"]でphpに渡す変数) が出てしまいます。どこに原因があるのでしょうか? ちなみに変更後もDBへの接続は成功しています。
>>935 宣言されていない変数を使ってるんじゃないの?
937 :
935 :2005/09/22(木) 19:15:54 ID:???
>>936 接続しているDBが違うだけなので(テーブル構造は全く同じ)そんなこと
はない筈です。
追加情報です。 正常に動作している方はDBのユーザ名とOSのユーザ名前
が同じ。
Notice: Undefined indexが出る方はDB専用のユーザ名で接続しています。
(権限はきちんと設定しています)
ここら辺が関係しているのでしょうか?
おまいさんしか見れないスクリプトだ。 おまいさんしか答えは見つけられん。 一つだけ忠告しとくと予断があると大抵ハマる。
936の理由以外でそのNoticeが出ることはあり得ない エコーデバッグしてみろよ
"Notice: Undefined index:orz" なんだから未定義の変数ではなくて 連想配列のキー orz が存在しないんでしょ。 その箇所の行番号も表示されているはずなので、その箇所を調べてみたら?
941 :
935 :2005/09/22(木) 21:41:48 ID:???
> 連想配列のキー orz が存在しないんでしょ。 これはフォームから送信しています。 繰り返しますが、まともに動作するスクリプトの $con = pg_connect("host=localhost dbname=hoge user=foo password=xxxxxxx"); を別のDBに接続変更するだけで Notice: Undefined index:orzがでるんですよ。 原因分かんないんで、もうあきらめます。 ありがとうございました。
っ error_reporting(0);
※注:我々はエスパーではありません ・不具合の原因は貴方が教えてくれた箇所ではありません。 ・残念ながら、我々は貴方が隠している箇所のコードを知る術を持ち合わせていません。 貴方の力を使わずに解決する方法は以下の通りです。 ・関連する全てのコードをここに公開する ・信頼でき知識のある知人、あるいは上司等に助言を求める
原因がわからないなら調べればいいじゃん? 変数追ってダンプするだけ BBSで聞くよりも、もちろんエスパーの存在を期待するより 手間も時間もかからなかったのに
画像のアップローダーみたいなのを作っていて、 画像の横サイズが一定サイズを超えたら縦横等倍で縮小しようとしてるのですが、 どうやって等倍の値を出すのかわかりません…。 今は、getimagesize関数で、横サイズが規定以上になったら、 縦も横も、元々の半分サイズになるようになってるだけです。
複数の画像をダウンローダーで落としたんですが、全部PHPファイルで落ちてました。 開く方法はありますか。
>>947 おまえは割り算も出来んのか。
とりあえず内項の積と外項の積とかでぐぐったら。
>>948 微妙にスレ違い。
多分相手はcookieを見てるのでhttpヘッダ見ながら適当にごまかせ。
分からなけりゃ手動でヤレどアホウ
>>948 もしかして、拡張子がPHPなだけって問題?
消えてなくなればいいのに。
>>947 $length = 200;//アップされた画像を規定サイズに変換する際の幅
if($size[0] > $length){//アップされた画像の横幅が規定値より大きい場合
$width = $length;//横幅は規定値
$high = $size[1] * $length / $size[0];//横幅に合わせた比率の高さ
}else{
$width = $size[0];//横幅は元の画像のまま
$high = $size[1];//縦幅も元の画像のまま
}
>>947 ちなみに
>>952 のやつだけじゃ、1x20000(物凄い縦長)の画像とかアップロードされたとき泣くことになる罠。
縦幅も制限すべし。ファイルサイズの制限は当然のこととして。
955 :
nobodyさん :2005/09/23(金) 07:55:08 ID:p9teK3qA
Javaスレの香具師に馬鹿にされる理由が分かりますた
ファイルの中身を確かめようともしないうちから 一応プログラミングと名の付く板に来るほどのバカって すさまじいものがあるな
958 :
nobodyさん :2005/09/23(金) 13:02:13 ID:hrjXCQtZ
質問です。 XHTMLで、HEAD要素内のタグを「head.txt」にして保存して PHPファイルから呼出したいのですが… どうしたら良いでしょうか?
960 :
nobodyさん :2005/09/23(金) 13:31:27 ID:hrjXCQtZ
expatはxhtmlに向かねー
うーん、もしxhtmlファイルにxml文書として間違っている部分があると、
xmlパーサの処理止まるからなー。
多分
>>958 程度ならif文と正規表現が正解なきガスる。
ロリポップでPHP+MySQLを使用しているのですが、 日付をtimestamp(14)で取得してます。 これを、呼び出し時に曜日を算出し、表示させているのですが、 どうも作った曜日関数がおかしいようです。(曜日がずれる) strftimeなど使ってみたのですが、うまくいきません。 みなさんは、どうやって曜日を算出していますか?
>>963 取得した日付は正しいがオマイさんが作成した曜日関数がおかしいって意味なのかな。。。
ハズしているかもしれないけど、漏れは以下で取得している。
$weekday = array('日', '月', '火', '水', '木', '金', '土');
$weekday_no = date('w', strtotime('2005/09/24'));
echo $weekday[$weekday_no];
965 :
963 :2005/09/24(土) 01:51:24 ID:???
>>964 取得した日付は正しいです。DBん中はこんな感じ→20050924014800
曜日の配列はまだ用意してないんですけど、strtotime使ってみました。
と、"4"が返ってきました。
って事は、木曜日??
曜日配列を、array('火','水','木','金','土','日','月')て風にするのも、何かインチキだし…。
何故にー!?
まあ、まず strtotime ("now"); とか試せ。
許可したIPアドレスからのアクセスのみを許可して それ以外のIPアドレスからのアクセスは拒否する といった機能をサイトに付けたいのですが どのようにやればできるのでしょうか?
つgetenv("REMOTE_ADDR");
つ.htaccess or httpd.conf
970 :
963 :2005/09/24(土) 10:50:29 ID:???
>>966 strtotime ("now");で"1127526558"と出たよ??
>>965 timestampカラムを取得すると2005-09-24 01:48:00形式で返ってくると思うんだけど。
SQLで20050924014800という形に整形しているの?
echo date('w', strtotime('2005-09-24 01:48:00'));
で正しく6(-> 土)が返ってくるから、strtotimeに渡す形式をゴニョってみれば
良いのでは。
>>971 YmdHis形式なのは4.0系を使っているからだと思う
質問者うぜーので回答は他の人にまかすけど
誰か宿題を下さい。PHPの勉強をしたいけど、 何をやったらいいのか分かりません。
>>973 下敷き無しで一からブログでも作ってみ。勉強には成るでしょ。
自分が作ったBrogと、ムーバブルタイプって、 ちゃんとリンクさせること出来るの?
最初に逆ポーランド法の電卓を作るのが王道
HP信者?
sessionスコープでデータを引き回す事は出来るけど、Javaみたいにapplicationスコープでデータを共有するのは無理ですか? 一旦ファイルかDBに格納して、ユーザ毎に復元するしかないのかな。
レンタル鯖においてるPHPに使うログ用ファイルが頻繁に壊れます。ロックはしてるんだけど、鯖によって使えないとかってあるの?
// そろそろ次スレの季節なので、テンプレ案1
PHPに関するくだらない質問用すれです。
次スレは
>>970 あたりが建ててください。
ここは、これらに当てはまる人を対象としています。
・最近PHPを始めたばかりな人
・本スレで質問しても回答を貰えなかった人
・マニュアルを見ても、Googleで検索しても、いまいち理解出来なかった人
※重要:我々はエスパーではありません。質問には詳細を書くように心掛けてください。
【回答してくださる方】
1.出来るだけ優しく質問に答えてあげてください。
2.「ググれ」「過去ログ嫁」ではなく、ヒントだけでも教えてあげてください。
【質問する方】
※過去に似た様な質問がされている事があります。質問する前に現行スレ内だけでも検索してみてください。
1.どんな事で躓いているのか、どうしたいのかを明確に書いてください。
2.コードがある場合は、問題がある箇所とその前後をスレに貼り付けてください。
短過ぎて答えられない事はあっても(長くなる場合はアップローダに上げてURLを)
3.自己解決した場合には、どうやって解決したかを後の人のために書き残してください。
4.「コードを出して」など回答者のお願いには出来るだけ応じてください。
5.回答が貰えなくても泣かない、騒がない。
>>980 削れよ。無駄すぎ
馬鹿が読むのは3行までだっつってんだろ
// 冗長なので、テンプレ案2。まだ削れそうだけど
次スレは
>>970 あたりがたてる
※重要:我々はエスパーではない。質問は詳しく。
【回答者へ】
1.出来るだけ優しく答えよう
2.「ググれ」「過去ログ嫁」ではなく、ヒントだけでも教えよう
【質問する人へ】
※質問する前に現行スレ内だけでも検索すること
1.何で事でつまづいているのか、どうしたいのかを明確に書くこと
2.できるだけ、コードをさらして質問すること
(長くなる場合はアップローダに上げてURLを書く)
3.自己解決した場合には、どうやって解決したかを後の人のために書き残すこと
4.「コードを出せ」などの回答者の要求には応じること
5.回答が貰えなくても泣くな、騒ぐな
>>933 個人的な希望はイラネ。その出来そこないの学級会みたいのは本スレ用にして
こっちは
>>1 のままでいいよ。
書いて損する物でもないし、
>>983 でいいんじゃね?
986 :
984 :2005/09/25(日) 02:09:45 ID:???
質問は詳しく 1.何で事でつまづいているのか、どうしたいのかを明確に書くこと 2.できるだけ、コードをさらして質問すること タイポはともかく、この辺は実行力あるかもな。 他は気色悪過ぎだよ。勘弁してくれ。 上のほうを見る限り、2は当てはまらない質問も多い気がするけど、どうだろう?
>>978 PHPスクリプトのライフサイクルはリクエスト単位だから
>>979 あるこたあるけどほとんど無いよ。管理者に聞いてみそ
3
2
1
0
-1
993 :
nobodyさん :2005/09/25(日) 03:31:24 ID:/sWHtMR5
-2
-3
-4
-5
-6
-7
-8
/ / / | \ ヽ / / / / / || | i ヽ i i / / / / / / || || |│ |ノス |// / /___, -一ァ| /! |ト、|│ | | く」 くだらねぇ! |,-‐¬  ̄---┘'7 |! ハ! |,、-┼十|! | | | , -‐ ''" し' '´_ /,ィ二l |ト、/!ヽト、\_ヽ!|!l | ハ | ,r/ __ ,イ|リ ヾハ! ヽ! ,ィ⌒ヾミリノ!/リ | / ||ヽ -' / ̄ )` __ |ヒノ:} '` ,イ/ | | ,r ' ヾ、 ,-、____ , イ ̄,r==- ==-' レ' /| | / ヽ `ーソ ' | |ト、,ヘ ′"" "" / / || | . / \_ / | ハ ヽ`゙'ヘ ' '__. ィ / / | | | / / / | ヽ 川\ ヾ三ニ‐'′//! | | | | / / / 八 \川| |`ト- .. __ , イ‐ァヘ | | || |! / / / / \ \ 「`ー- 、 / .〉 ト、| ヽ、 ,イ /-─=¬ニヘ、_ \ 厂\ 厂ヽ /!| | `ー=ヘ -‐  ̄ /─ '  ̄ ├- ヽ\ \ノ\ \ 人 ハ!ヽ || |-┤ ヽ / /!‐-- | |\ ト、_`ヽ oヽ ト、! || |‐┤- ヽ // 〉 __ / ├‐- || | 川-‐ | | 厂7! ハ! ├:┤  ̄ヽ / / ー ─  ̄ ├‐- リ || ハ!ヘ | | ト┤|/′ ヾ,┤ ゙i_ ‐ ' 〉‐- | / /\ .|o | /ヽ/(′ ∨ \ ‐--─ ──-r、___-、 /ー_ {( '´>、! /ヽ/ |\ \
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。