【PHP】下らねぇ質問はここに書き込みやがれ 21

このエントリーをはてなブックマークに追加
1nobodyさん
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

過去スレは>>2
2nobodyさん:2006/05/23(火) 22:05:52 ID:???
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/
【PHP】くだらねぇ質問はここに書き込みやがれpart5
http://pc8.2ch.net/test/read.cgi/php/1114787573/
【PHP】くだらねぇ質問はここに書き込みやがれpart6
http://pc8.2ch.net/test/read.cgi/php/1117945031/
【PHP】くだらねぇ質問はここに書き込みやがれpart7
http://pc8.2ch.net/test/read.cgi/php/1121100429/
【PHP】くだらねぇ質問はここに書き込みやがれpart8
http://pc8.2ch.net/test/read.cgi/php/1123431535/
【PHP】くだらねぇ質問はここに書き込みやがれpart9
http://pc8.2ch.net/test/read.cgi/php/1125716012/
【PHP】下らねぇ質問はここに書き込みやがれpart10
http://pc8.2ch.net/test/read.cgi/php/1127581425/
【PHP】下らねぇ質問はここに書き込みやがれpart11
http://pc8.2ch.net/test/read.cgi/php/1129582431/
【PHP】下らねぇ質問はここに書き込みやがれpart12
http://pc8.2ch.net/test/read.cgi/php/1130835396/
【PHP】下らねぇ質問はここに書き込みやがれpart13
http://pc8.2ch.net/test/read.cgi/php/1132921016/
【PHP】下らねぇ質問はここに書き込みやがれpart14
http://pc8.2ch.net/test/read.cgi/php/1134868212/
【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/

3nobodyさん:2006/05/23(火) 22:06:43 ID:???
【PHP】下らねぇ質問はここに書き込みやがれpart16
http://pc8.2ch.net/test/read.cgi/php/1139146534/
【PHP】下らねぇ質問はここに書き込みやがれpart18
http://pc8.2ch.net/test/read.cgi/php/1142417901/
【PHP】下らねぇ質問はここに書き込みやがれ Part19
http://pc8.2ch.net/test/read.cgi/php/1144513878/
【PHP】下らねぇ質問はここに書き込みやがれpart20
http://pc8.2ch.net/test/read.cgi/php/1146165153/
4nobodyさん:2006/05/23(火) 22:07:16 ID:???
・part17よりテンプレ化

extractは極力使わないほうがいいと思います。
例えば、

hoge.php?_SESSION[user_pw]=hogehoge

って形で送られてきたとします。これを

extract($_GET)

しちゃうと、$_SESSION['user_pw']の値が、
"hogehoge"に変更されてしまいます。

もし事前にユーザのパスワードを、$_SESSION['user_pw']に
保持してたとしたら、勝手に書き換えられてしまうことになります。

それを避けるために

extract($_GET, EXTR_SKIP)

ってやって上書きを避けたとしても、
このままでは変数の初期化を忘れる危険性があります。

extract($_GET, EXTR_PREFIX_ALL, "get")

と、接頭辞をつけるのが一番安全な気はしますが、
それなら最初から
$hoge = $_GET['hoge'];
ってやるのと手間が変わらないと思いますし、可読性も増します。
確かにextractするのは楽だと思いますけど。
5nobodyさん:2006/05/23(火) 22:17:27 ID:???
6nobodyさん:2006/05/23(火) 22:59:39 ID:???
>>1乙彼
7nobodyさん:2006/05/24(水) 00:21:31 ID:LAJIQlLY
くだらない質問ですみません!



どうしてPHPの質問ってこんなにくだらないものばかりなんですか?
8nobodyさん:2006/05/24(水) 00:40:53 ID:pDgg/19c
php勉強中です。functionを書いていて悩んでいます。

function aaa($bbb) {
$ccc = "これは".$bbb."です。";
return $ccc
}
echo aaa("お茶");
echo aaa("水");

とやると、これはお茶です。これは水です。と帰ってくるのですが、


9nobodyさん:2006/05/24(水) 00:41:25 ID:pDgg/19c
つづき


function ddd($eee) {
$con = mysql_connect(~~~~~);
〜省略〜
$sql = "select * from hogetable where hoge = $eee";
$rst = mysql_query($sql, $con);
$col = mysql_fetch_array($rst) ;
$fff = $col["hoge"];
return $fff;
}

echo ddd(hogehoge);
echo ddd(fugafuga);

とやると、一行目のechoの$col["hoge"]は帰ってきますが、
二行目は戻ってきません。
一行目と二行目を入れ替えると、fugafugaを渡したものが
戻ってきますが、hogehogeの方は戻りません。

実際はもう少しfunctionの中身は複雑なのですが、
sql文の条件に入る単語を引数にして、mysql_fetch_arrayした結果を
取り出すfunctionにしたいです。
functionの中でmysqlに接続してはいけないのですか?
なぜ中途半端に動く(一行目だけ戻ってくる)のかわかりません。
どなたかよろしくお願いします。
10nobodyさん:2006/05/24(水) 00:52:12 ID:???
>>8
ん!ん!ん!
意味がよく分からないんだけど、hogehogeとfugafugaはSQLのwhere条件に使うんだよな?
で、>>9の関数を実行するとddd()という関数が二回実行されるはずなのに上側のddd()関数
しか値を返してくれないって事だよな?
11nobodyさん:2006/05/24(水) 01:00:23 ID:pDgg/19c
すいません。レスありがとうございます。
悩み果てて、眠気と戦いながら書いたので、書いたものはあやしいかもしれませんが、
10さんの仰ってる内容で正しいです。
同じsql文の条件の部分にhogehogeとかを渡して、mysql_fetch_arrayしてデータを取り出したいだけです。
ddd()を使えば、違った条件で抽出したデータを取り出せて便利と思い、
試しに動くか2行連続で書いたら、一番上に書いた行の結果しか帰ってこないんです。
何か原因はかんがえられますでしょうか?
12nobodyさん:2006/05/24(水) 01:12:04 ID:???
どなたかphpをある程度わかる人で暇な方はいらっしゃいませんか?
エラー?見たいなものががどうしても出てしまうのでメッセで教えていただけませんか?
凄くシンプルな20行程度のプログラムなのですが。
13nobodyさん:2006/05/24(水) 01:13:25 ID:???
ちなみに16歳♀です(><)
14nobodyさん:2006/05/24(水) 01:15:32 ID:qW6N8luO
↑偽者 ですが。
解決できたら報酬はもちろん差し上げますので。。お願いします。
15nobodyさん:2006/05/24(水) 01:27:11 ID:qW6N8luO
諦めます・・・。
168:2006/05/24(水) 01:34:50 ID:pDgg/19c
phpのマニュアルで、「同じ引数で2回mysql_connect()をコールした場合〜」という
怪しげな一文を見つけたのですが、いまいち難しくてわからないです。
ttp://php.s3.to/man/function.mysql-connect.html
これはなにか関係ありますかね?
functionでmysqlに繋ぐのは普通ですよね?
17nobodyさん:2006/05/24(水) 01:54:25 ID:???
>>12
ここにエラーメッセージ書けって。バカが
18nobodyさん:2006/05/24(水) 01:58:20 ID:???
>>16
function内でconnectはまぁ普通だが、普通はそのときの戻り値を別途保持して
2回目以降はそれを使いまわすようにする。
selectのたびに毎回connectなんて真似はしない。

ただ、通常はmysql_connectのパラメータが全く一緒の内容なら
何回connectしても同じリソースIDが返るのでちゃんと動きそうなもんではある。
mysql_connectとmysql_queryの直後で
echo mysql_error();
を表示させてみてはどうだろう?
あと、それぞれの戻り値をちゃんとエラー判定しような。
19nobodyさん:2006/05/24(水) 02:00:13 ID:???
>>1
本スレってなくなったような…
20nobodyさん:2006/05/24(水) 02:01:03 ID:???
>>12
まずメッセID晒せ
21nobodyさん:2006/05/24(水) 02:03:09 ID:???
>>16
まぁ、functionでMySQLに繋ぐって言う事自体はまったく問題ないんだけど、その書き方だと
一回接続してるのにもう一回接続しようとしてしまうだろ?
だからさらに別functionに分けてMySQLに接続するのみのfunctionにしてみたらどうだ?
多分それで問題も解決すると思う。

今回のエラーの原因は「一度接続して、通信を切断していないのにもう一度MySQLに接続しようとしている」
体と思う。
228:2006/05/24(水) 02:09:47 ID:pDgg/19c
>21 ありがとうございます。
気になって眠れずにいました。感謝。
mysqlへの接続用functionはちょっと試したのですが、
その場合は上に僕が書いたddd()の中にconnect()(←mysql接続用function(仮))を
書くのでしょうか?でも、それだと結局同じになってしまいますよね?
いまいちfunctionの使い方自体が分かっていないので、もう少し勉強します。
本当にありがとうございます。
明日また試して報告します。
23nobodyさん:2006/05/24(水) 02:10:11 ID:???
む。
オレの出番はないようだ・・・
24nobodyさん:2006/05/24(水) 02:13:22 ID:???
>>22
$r=connect(必要なパラメータ);
echo ddd( $r, hogehoge );
disconnect(必要なパラメータ);
exit;

function ddd( $r, $eee )
{
 略
}

マニュアルみてないけどだいたいこんな感じ
25nobodyさん:2006/05/24(水) 02:22:01 ID:???
>>22
function connect() {
 if(! $GLOBALS['connect_id']) {
  if(! ($GLOBALS['connect_id'] = mysql_connect(〜))) {
   echo "接続エラー";
   exit;
  }
 }
 return $GLOBALS['connect_id'];
}
function ddd($eee) {
 $con = connect();
  :
}

例えばこんな感じ
26nobodyさん:2006/05/24(水) 02:34:29 ID:fsmU1YOR
質問です。

携帯用の掲示板を作っているのですが、
コメントで改行されると、テキストデータに保存したときに
改行されたまま保存されてしまいます。
この改行を取り除いて保存したいのですけど、どうすればよいですか?
27nobodyさん:2006/05/24(水) 02:41:56 ID:???
>>26
方法はいっぱいあるよ。
でだ!まず改行コードはもちろん知っているよな?PHPとかで書くなら「\r\n」「\r」「\n」の3種類だ。
これらがそのままテキストに保存されるから改行されちゃうんだ!
さらにヒントだ! str_replace("\n","","文字列");
28nobodyさん:2006/05/24(水) 02:42:11 ID:???
日本語大丈夫だったか確証持てないがnl2brあたり
mb_ereg_replaceなんかも見るといいよ
29nobodyさん:2006/05/24(水) 02:45:27 ID:???
>>9
そのソースでちゃんと2回目以降も値が取れたぞ。

$sql = "select * from hogetable where hoge = '$eee' ";
echo ddd('hogehoge');
だと思うけどな。
30nobodyさん:2006/05/24(水) 02:49:56 ID:???
>>21
マニュアルに書いてある通り、その場合は2重接続を行わずに
接続中のコネクトIDを返すので問題ない(エラーとはならない)。
31nobodyさん:2006/05/24(水) 03:04:46 ID:qW6N8luO
12です。自分になりにやってみたのですが、エラーが出ました。素人なので当然といえば当然なのですが。。
エラーというより簡単な要望に近い形になります。
そのソースは某サイトで購入したものでといってもソースは20行程度なのですが。
なので晒したいのですが晒せないといった状態です。ご勘弁ください。
メッセなら晒せます。[email protected] です。お願いします。
32nobodyさん:2006/05/24(水) 03:07:54 ID:fsmU1YOR
>>27
文字列置き換えですね。
その方法でできました、ありがとうございます。

>>28
辞書見る限り、まだちょっと理解できませんけど
アドバイスありがとうございます。
33nobodyさん:2006/05/24(水) 03:09:43 ID:fsmU1YOR
もうひとつ質問なのですけど、
$data ←この中身が数値の場合、または半角英数字の場合にTRUEを返すと
いった関数はありませんでしょうか?
初歩的な質問ですみません・
34nobodyさん:2006/05/24(水) 03:20:19 ID:???
>>33
てめぇ!若いうちから楽をするんじゃない!正規表現でシコシコ作るんだ!!

多分PHPのことだから調べたらあると思う
35nobodyさん:2006/05/24(水) 03:32:58 ID:???
>>33
is_XXXX系の関数が色々あるからリファレンスひいてみ
>>34
多分てあんたw
36nobodyさん:2006/05/24(水) 04:00:50 ID:???
>>19
久びさに来てみたら本スレ消えてるじゃん。
何が起こったの?
37nobodyさん:2006/05/24(水) 04:08:36 ID:???
質問スレはマニュアル権索装置ではない

>>36
天井に達した後、誰も立てていないだけ
立たないって事は需要が無いんだと思うが・・・
38nobodyさん:2006/05/24(水) 04:27:20 ID:???
>>36
くだ質と同レベルなんだからもう要らないじゃん

と、スレ終了間際に誰かが言ったら誰も立てなくなった。
39nobodyさん:2006/05/24(水) 07:26:22 ID:???
>>33
ctype_alnum($data); // = preg_match('/^[a-z0-9]*$/i', $data)
40nobodyさん:2006/05/24(水) 07:46:13 ID:???
前スレの997へ...

Order allow,deny
Deny from all
41nobodyさん:2006/05/24(水) 08:18:47 ID:???
前スレ読んだら拡張子がphpの時点でSEO的に不利って書いてあったけど
クエリで何か渡してる場合に限っての話じゃないの?
42nobodyさん:2006/05/24(水) 08:34:29 ID:???
クエリが付いてると明らかに不利。クエリのないPHPは若干(htmlに比べて)不利。
〜.php/file.htmlにするとあーら不思議(謎
43nobodyさん:2006/05/24(水) 08:57:13 ID:???
>>42
全然同じかと思ってた

例えば
index.php?q=hogehoge
index.php/hogehoge
index.php/hogehoge.html
だったらどう?
やっぱ hogehoge.html > hogehoge ?


ってかスレ違いかな・・
44nobodyさん:2006/05/24(水) 09:12:43 ID:???
>>42
最近はあまり関係ないよ
自分のところはクエリ表記だが検索エンジンは問題ない

重要なことは正しい構文 .htmlが良かったのは昔昔昔昔の話

完全にスレ違いだな
458:2006/05/24(水) 10:40:10 ID:Y9pwRi1O
>23,24,25,29,30
レスありがとうございます。助かりました。8です。
今調べたら、全く別のところに原因がありました。
実はmysql_connect($dbserver,$dbuser,$dbpass);
とかって書いていて、それぞれの値は別のファイルに書いていまして、
それをrequire_once(./hoge.php);で読み込んでいました。
function ddd($eee) {
require_once(./hoge.php);※設定ファイル
mysql_connect($dbserver,$dbuser,$dbpass);
以下略
}
みたいな感じです。
このrequire_onceをただのrequireにしたら大丈夫でした。
自分が買った参考書は外部のファイルを読み込むときは
いつもrequire_onceだったので、気にせずにいました。
require_onceの場合、2回目のddd($hoge)のときは
mysqlに接続できて無かったってことでしょうか?

46nobodyさん:2006/05/24(水) 12:06:02 ID:???
>>45
require_onceはその名の通り1回しか読み込まないので
2回目は読み込まれずに未定義のID/Passで接続しようとしたから


最初から全部晒せばすぐに解決したと思われるのだが・・・
478:2006/05/24(水) 12:33:53 ID:Y9pwRi1O
>45
レスありがとうございます。
ほんとその通りですね。申し訳ないです。

>みなさん
require と includeの使い分けのルールみたいなものはありますか?
また、それぞれ_onceにしないとダメなケースとかでよくあるものとかあったら
教えて欲しいです。
48nobodyさん:2006/05/24(水) 14:37:59 ID:???
こういう駄目な奴はレスアンカーを必ずと言って良いほどミスる法則
49nobodyさん:2006/05/24(水) 15:50:46 ID:???
現在時刻をミリ秒まで取得出来る関数ってある?
50nobodyさん:2006/05/24(水) 15:59:37 ID:???
>>49
ない。
が、もっと細かいのがある。
51nobodyさん:2006/05/24(水) 16:09:30 ID:???
下らねぇ質問だと思うんですが
PHPを使ったフォトブログを簡単に設置できるスクリプトってありますよね。
そういうもの(pixelpostやfolderblog)を設置すると必ずindex.phpでページがblankになるんです。
解決策としては
error_reporting(0);の部分をerror_reporting(7);またはerror_reporting(E_ALL);
とすればいいと書いてあるんですが
同じようにblankになり、リロードすることで読みこまれます。
鯖はxreaなんですが
すれ違いですかね。
52nobodyさん:2006/05/24(水) 16:10:12 ID:1ttwMHsA
パスワード認証って、どうやるのが一般的なの?
俺はPOSTデータを比較演算子で比較してるけど。

おまいらはどうやってる?
53nobodyさん:2006/05/24(水) 16:16:25 ID:???
>>50
どんなのでしょうか?
54nobodyさん:2006/05/24(水) 16:32:35 ID:???
>>53
公式マニュアルで現在時刻を取得する関数見れば
関連の関数として書いてあるじゃん。
「ある」ことは教えてもらったんだからそこからは自分で探しなさいよ。
55nobodyさん:2006/05/24(水) 16:39:04 ID:???
>>47
関数定義や設定値定義などには普通はonceを使う。
同じものを何度も読み込むなんて無駄だから。
また、特別な理由があるわけじゃなきゃ関数の中でrequireとかはあまりしない。
それが関数の機能的に意味のあることならもちろん構わないが。
requireはそのファイルが読み込めないと致命的な場合に用いる。
includeは無ければ無いで問題が出ないような場合に用いる。
56nobodyさん:2006/05/24(水) 17:25:46 ID:???
>>47
結構長いこと仕事でPHP使ってるけど、まだ〜once以外使ったことないよ。
ちゃんと設計してれば出番は少ないと思われる。
ま、ケースバイケースだがね。
5747:2006/05/24(水) 18:01:35 ID:Y9pwRi1O
>>55,56
レスどうもです。
僕はdbの名前とかパスワードを別ファイルにしたのですが、
これはonecだとダメということは、みなさんは別の方法でやっているのですか?
mysqlにつなぐfunctionを書くことは多いと思うのですが、
どんな風に書いていますか?

また、別の類の質問かもしれないのですが、
例えば、僕が書いたコードは、
mysqlに接続するだけのfunctionがあって、
そのつぎに「条件の違うクエリを打って結果をreturnする」functionがあって、
2個目のfunctionの中で1個目のfunctionを使っています。
つまりfunctionの中にfunctionがあります。
こういうのは問題ないですか?


58nobodyさん:2006/05/24(水) 18:04:52 ID:IMQ+SU6Q
可変関数でクラスメソッドを指定する方法はないでしょうか?
メソッド名を指定できるのは分かったのですが

$func = "Hoge::execute";
$func();

みたいな感じに、クラス名から指定したいのです。
59nobodyさん:2006/05/24(水) 18:06:15 ID:???
60nobodyさん:2006/05/24(水) 18:07:55 ID:???
同一ページ内でフォームの処理を行うときに
その処理の判別で便利な方法はどんなのですか?

@
type="hidden" name="action" value="****"
をつけて
switch($_POST['action'])
で判別

A
type="submit" name="action[****]" value="うんたら"
をつけて
(どうやって判別?)

B
別ページで処理して元ページに戻す

などなど考えましたが皆さんはどんな手法を使ってますか?
61nobodyさん:2006/05/24(水) 18:09:43 ID:???
日本語で(ry
62nobodyさん:2006/05/24(水) 18:10:08 ID:???
>>60
処理内容とフォームのデザインによる
Javascript使えるならsubmit時にvalue変えることもできるし。
6351:2006/05/24(水) 18:52:16 ID:???
すいません。PHP系ブログツールというスレを発見したのでそっちで聞いてみます。
64nobodyさん:2006/05/24(水) 20:05:31 ID:Ixcu1EBT
PHPでファイルに書込みをする操作なのですが
file.txtというファイルに
aaa<>111<>222
bbb<>333<>444
ccc<>555<>666
という形で、格納されているデータがあってある文字列を書き込みたい時、
もし、file.txtの中に既に含まれるものがあれば、書き込まない。
無ければ、書き込む。
という操作をさせたいときには、どのように書けば良いでしょうか?

何となく頭では分かっているのですが
どう書けば良いのかが分からなかったので質問しました。
よろしくお願いいたします。
65nobodyさん:2006/05/24(水) 20:20:13 ID:???
>>64
分かってるならそのまま書け
宿題は宿題スレで
66nobodyさん:2006/05/24(水) 20:22:09 ID:???
そういえば、気になるんだけど、区切り文字 <> にする意味何?

その区切り文字使う人って大抵ユーザ入力のデータをHTMLタグを無効化(htmlspecialchars)しておいて、
出力時にそのまま書き出すようなコード書いていることが多いんだよね。

エスケープ処理は、htmlとしてのprint時にやったほうがセキュアでシンプルなコードになるよ。

例えば、データベースにいれたりファイルを直接編集したりするときには、< が > とかに変換されてたって
まどろっこしくなるだけだし、複数の方式でファイルへの書き込みをやるときとかにエスケープ漏れが生じることがある。
67nobodyさん:2006/05/24(水) 20:29:25 ID:Ixcu1EBT
>65
アルゴリズムは分かるのですが
書き方が分かりません。

>66
ありがとうございます。
参考になります。
68nobodyさん:2006/05/24(水) 20:40:44 ID:???
>>67
アルゴリズムがわかるなら、それを書いたら?
日本語でもいいから。

それを、文法として間違っていても、動作しなくてもいいから、
適当と思うPHPの関数、構文に置き換えて書いてみたらどうだろう。

69nobodyさん:2006/05/24(水) 20:53:56 ID:Ixcu1EBT
書込みたいものを格納した変数A。
ファイルオープン。
ファイルの読み込み、丸ごと配列aに格納。
変数Aが、ファイルの中身と同じかを正規表現で調べる。
ファイルロック。
違っていれば、追加書込み。
ファイルクローズ。

こんな流れですよね?
70nobodyさん:2006/05/24(水) 20:56:47 ID:???
>>69
ファイルロックはファイルオープンの直後のがよくね?
処理自体は合ってるから、それをそのままPHPの関数で置きかえれ。
71nobodyさん:2006/05/24(水) 22:03:49 ID:???
>>57
> 僕はdbの名前とかパスワードを別ファイルにしたのですが、
> これはonecだとダメということは、みなさんは別の方法でやっているのですか?

普通はonceを使うよ、それ。
ただし関数の中じゃなく、プログラムの先頭で1回だけだが。

> 2個目のfunctionの中で1個目のfunctionを使っています。
> つまりfunctionの中にfunctionがあります。
> こういうのは問題ないですか?

ごく普通。プログラム概論とかソフトウェア工学とかの本を読んでみれば?
72nobodyさん:2006/05/24(水) 22:05:01 ID:???
>>69
ファイルの中身と全く同じかどうかを調べるなら
== で文字列比較素すればOK。正規表現要らない。
73nobodyさん:2006/05/24(水) 22:24:37 ID:???
>>69
つまずきそうなのは中身の比較あたり?
ファイルの内容を配列に格納したら、
$add = 1; //最初は追加モード
foreach($file as $line) {
  if($line == $data) { //ファイルの各行と今回の追加データを比較
    $add = 0; //一致する内容があれば追加モードOFF
  }
}
if($add) {
  ファイルへ書き込む処理
}
みたいな感じでいける。
74nobodyさん:2006/05/24(水) 22:54:48 ID:???
>>62
具体的にどんな処理内容とフォームのデザインによってどう変えますか?
75nobodyさん:2006/05/24(水) 22:59:52 ID:???
>>74
60じゃないけど。
大した種類も無くて楽にやるなら1、拡張する可能性があるなら2、
複数のフォームがあってデータを連動させたい場合なんかはJavaScript併用、とか。
特に困ることがないなら1でいいんじゃないの。
7652:2006/05/24(水) 23:16:26 ID:1ttwMHsA
あの、誰か>>52にご意見を...
77nobodyさん:2006/05/24(水) 23:16:51 ID:cMAB9oLf
$obj->$method();
はできるのですが、
$class::$method();
はできませんか?
試してみたら、パースエラーが出ましたが、
なんとか$class部分を変数にして実行したいです。
7877:2006/05/24(水) 23:19:26 ID:???
自己解決。call_user_func() を使うことにしました。
79nobodyさん:2006/05/24(水) 23:26:20 ID:???
>>76
一般的かどうかは定かではないが、
予め設定したパスワードはcrypt等で暗号化した上で保存
フォームから送られたパスワードも同じ暗号化処理をした上で、
保存してあるパスワードと比較。
比較演算子は === とか使っておけば間違いないんじゃないのかな?
80nobodyさん:2006/05/24(水) 23:34:23 ID:vQsxJJUN
smartyで質問があります。

親ファイルから子ファイルをincludeするのですが、
子ファイルで
{assign var="test" value="sample"}
と変数を指定して
その変数を親ファイル側で利用したいのですが、
できませんでした。
includeされたファイルで設定された値は
include元では利用できないのでしょうか?

出来ない場合、上記のような機能を実現するには
どうしたら良いでしょうか?

config_loadは使用しない形で実現したいのですが
方法が思い浮かびません。

識者の方ご教授をおねがいします。
81nobodyさん:2006/05/24(水) 23:35:07 ID:JcLctTfB
サイトのメニュー部分など共通する部分を
<? include("./p_parts/hoge.php"); ?>
のような形で挿入しています。
このようなパーツが複数あるのですが、特定のファイル(theme.php)を挿入した部分だけ

Warning: main(): open_basedir restriction in effect. File(../p_parts/theme.php) is not within the allowed path(s): (.:/php-tmp) in /〜/index.php on line 76

Warning: main(../p_parts/theme.php): failed to open stream: Operation not permitted in /〜/index.php on line 76

Warning: main(): Failed opening '../p_parts/theme.php' for inclusion (include_path='.:/usr/share/php4:/usr/share/php') in /〜/index.php on line 76

というエラーが返って来ます…。
原因と対策を教えてください。よろしくお願いします。
8252:2006/05/24(水) 23:47:05 ID:1ttwMHsA
>>79
ありがとん。
参考になったよ(・∀・)md5あたりを使ってみます。
83nobodyさん:2006/05/24(水) 23:59:05 ID:???
>>81
> <? include("./p_parts/hoge.php"); ?>
ここでは ./p_parts サブディレクトリなのに

> Warning: main(../p_parts/theme.php):
こっちだと ../p_parts と上位ディレクトリの指定になってるからじゃ?
8481:2006/05/25(木) 00:05:46 ID:JcLctTfB
>>83
レスありがとうございます。階層はコピペミスで実際は
/p_parts/
└/text/index,php …ここに<? include("../p_parts/theme.php"); ?>と記述
になっています。SSI的にphpを使う知識しかなく、中身はただのhtmlを記述したものです。
他のhoge.php等も同様な感じでちゃんと表示されているのですが…
85nobodyさん:2006/05/25(木) 00:17:33 ID:???
>>84
他のファイルも全部同じパスにあるの?
php.iniのopen_basedirの設定ってどうなってる?
86nobodyさん:2006/05/25(木) 00:18:54 ID:???
>>81
実はファイル名を間違ってるとか
87nobodyさん:2006/05/25(木) 00:19:08 ID:???
>>66
そうするとデリミタは?
DBだとその通りなんだけど、テキストだとどうなんだろ。
カラム区切り、レコード区切り両方意識しなきゃならないし。
88nobodyさん:2006/05/25(木) 00:28:31 ID:???
TABでいいんじゃね?
8981:2006/05/25(木) 00:35:14 ID:???
>>85,86
他のhoge.php等も同じパスです。
open_basedirの設定は鯖がphpinfo() ;を禁止しているのでよく解りません。
ファイル名など禁則文字があるのかと思いリネームしたりもしましたが無駄でした。
あと、theme.phpのアップデート前には表示できていたんですが…

もう少し頑張ってみてダメだったら鯖に聞いたほうが早いでしょうか…orz
90nobodyさん:2006/05/25(木) 00:55:06 ID:???
>>89
theme.phpの中でさらに何かやってんのか?
中身みしてみ
91nobodyさん:2006/05/25(木) 00:56:40 ID:???
>>89
ファイルのオーナーとパーミッションは前と一緒か?
9281:2006/05/25(木) 01:07:41 ID:???
theme.phpの中身は
<h2>Theme</h2>
<p>「○○のお題」に挑戦。最低限隔週更新。</p>
<ol class="thumb"><li>ほにゃらら〜</li></ol>
<p class="small t_right"><a href="URL">サイト名</a></p>
これだけです。
オーナーとパーミッションは前と一緒です。
オーナーは自分で属性は604です。
93nobodyさん:2006/05/25(木) 01:22:20 ID:???
part20で出た商品管理のやつと結構似てるんだけど、
ソートした時に、10000円より5000円のほうが
高くなるんだよね。カンマ付いてないのに。
なんでYO!
94nobodyさん:2006/05/25(木) 03:28:47 ID:???
>>89
file_exists でチェック
95nobodyさん:2006/05/25(木) 03:30:17 ID:???
>>93
1, 0, 0, 0, 0, 円の1バイト目, 円の2バイト目
5, 0, 0, 0, 円の1バイト目, 円の2バイト目
96nobodyさん:2006/05/25(木) 04:34:53 ID:???
>>93
文字列型同士なので、当然文字列として比較するから、1文字目(1と5)で決まる
数値変換をさせるか、一旦数値型にキャストすれば良い

<?php
$a='5000円';
$b='10000円';
if ($a>$b) echo "$a>$b";
if ($a<$b) echo "$a<$b";
echo "\n";
if ((float)$a>(float)$b) echo "(float)$a>(float)$b";
if ((float)$a<(float)$b) echo "(float)$a<(float)$b";
echo "\n";
if (0+$a>0+$b) echo "0+$a>0+$b";
if (0+$a<0+$b) echo "0+$a<0+$b";

//5000円>10000円
//(float)5000円<(float)10000円
//0+5000円<0+10000円
97nobodyさん:2006/05/25(木) 08:28:10 ID:???
>>96
トン
98nobodyさん:2006/05/25(木) 08:49:01 ID:T8t5b4Lq
こちらで質問させてください。
session.gc_maxlifetime を10にしているのに10秒たっても
セッションがタイムアウトしません(切れてくれません)。なぜなんでしょうか?
※値10はテスト用に短くしています。意味は無いです。

session.cookie_lifetime を10にすると10秒で切れてくれるのですが、
これだとブラウザ閉じてもまだセッションが生きているので要件上ダメなのです。

環境はIIS5.0 / php5.0.3 です。php.iniの値は下のようになってます。
99nobodyさん:2006/05/25(木) 08:51:27 ID:T8t5b4Lq
98のphp.iniの値です。

session.auto_start Off Off
session.bug_compat_42 Off Off
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 10 10
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path no value no value
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 0 0
100nobodyさん:2006/05/25(木) 09:24:01 ID:???
>>80
{include file="header.tpl" page_title="タイトル" user="$user"}

とかすればいい。
includeされたファイルでは{$page_title}とかで参照できるはず。
オブジェクトも渡せるんじゃなかったかな。
101nobodyさん:2006/05/25(木) 09:39:26 ID:???
大垣セキュリティ本の232ページで「trans sid機能は非常に危険」と
書いてありましたが、ではクッキーを使えない携帯では
どうやって安全なセッション処理を実現したらいいのでしょうか。
102nobodyさん:2006/05/25(木) 09:39:34 ID:???
>>98
セッションのガーベッジコレクションは、
session.gc_probability / session.gc_divisor
の確率で起こるので、>>99の設定だと1%の確率でしか起こらない。

それから、ガーベッジコレクションで自分のセッションが破棄されることはないので、
session.gc_maxlifetimeを過ぎても、他人のアクセスがない限りはセッションは切れない。
103nobodyさん:2006/05/25(木) 09:42:53 ID:???
>>101
個体識別情報やサブスクライバIDを使う。
104100:2006/05/25(木) 10:04:35 ID:???
よく読んだら逆だった orz
105nobodyさん:2006/05/25(木) 10:07:11 ID:???
>>102
えーそうなんですか。
それでは指定した時間で確実にセッションを切る方法はないのでしょうか。
106軟式PHP:2006/05/25(木) 10:11:08 ID:???
php.iniでも凝視しとけ。
107nobodyさん:2006/05/25(木) 10:26:44 ID:???
>>105
自分でunsetしたらええやん
108nobodyさん:2006/05/25(木) 10:35:59 ID:???
>>107
でも一定時間アクセスされていないということを認識できませんよね?
109nobodyさん:2006/05/25(木) 10:38:01 ID:???
>>103
ありがとうございます。
ということは、あくまでも
session.use_only_cookiesはオン、session.use_trans_sidはオフにしておくのが前提で、
その「個体識別情報やサブスクライバID」を使うべきなのでしょうか。

「個体識別情報やサブスクライバID」というものをよく知らないので、調べてみます。
110nobodyさん:2006/05/25(木) 10:38:03 ID:???
クッキーの期限が切れれば同じ値のクッキーを得ることは困難。
111nobodyさん:2006/05/25(木) 10:56:08 ID:???
カビが生えちゃうもんな。
112nobodyさん:2006/05/25(木) 10:58:30 ID:???
>>110
カビ生えたクッキーを渡されたら普通に動いちゃいますよね?
113nobodyさん:2006/05/25(木) 12:29:04 ID:???
日付の比較をしたいと思います。文章で説明すると以下のような感じです。

今日は2006年5月25日です。昨日は2006年5月24日です。
2006年5月24日まであと5日です。

今日の日付をdate関数で取得して、昨日なら-1日、目的までのカウントダウンは
その間の日数をforで取得すれば良かったと思ったのですが、
日に1を足す方法だと、31日の場合や1日の場合に問題が起きそうです。

何か良い方法はありませんでしょうか?
114nobodyさん:2006/05/25(木) 12:45:10 ID:???
>>113
time() とか使って、UNIXのタイムスタンプで比較すればいいかと
115nobodyさん:2006/05/25(木) 12:45:42 ID:???
>>113
これは個人的な意見なんですが、日付で計算するのは無駄に複雑になる気がします。
通算秒とかで持っておいて、必要に応じて(たいていは表示)日付に変換する。
もちろん計算は秒単位とかだから、単純な加減算。
このほうがコードもわかりやすくなると思うのですが。
116nobodyさん:2006/05/25(木) 13:54:24 ID:???
よくsession使ったほうが安全なんてのを見かけるけどそんなこと書いてる本でもあるの?
sessionはセキュリティを落としてでもプログラマが楽をするための道具でしかないのに。
117nobodyさん:2006/05/25(木) 13:57:53 ID:???
簡単な一言掲示板を作っているのですが、
↓のようにするとコメントが**以上ないとき<br />だけが繰り返されます。
最後の行を読み込んだらbreakしたいのですが、どうすればいいでしょうか?

$comment = file($logfile);

for($line = 0;$line < **;$line++){
echo $comment[$line]."<br />";
}
118nobodyさん:2006/05/25(木) 14:03:13 ID:???
>>117
たとえばだけど

$comment = file($logfile);
$comment_count = count($comment);

for($line = 0;$line < **;$line++){
if($line > $comment_count) break;
echo $comment[$line]."<br />";
}

とか。
119117:2006/05/25(木) 14:13:24 ID:???
>>118
count()で要素数を取得して現在行と比べるんですね。
やってみます。ありがとうございます。
120nobodyさん:2006/05/25(木) 14:20:09 ID:???
>>116
あるよ

>>117
foreach
121nobodyさん:2006/05/25(木) 14:20:40 ID:???
>>117
$comment = file($logfile);
$comment_count = count($comment);

for ($line = 0; $line < ** and $line < $comment_count; $line++) {
echo $comment[$line]."<br />";
}

後で$commentを使う必要がないのなら、
fgets()使って一行ずつ読み込んだ方が良いと思う。
122nobodyさん:2006/05/25(木) 15:19:22 ID:???
>>116
強度の低い錠であっても、無施錠に比べりゃセキュリティは高い。
貴方は何と比べてるんだい?
123nobodyさん:2006/05/25(木) 16:08:56 ID:???
下らない質問で申し訳ないのですが
自分でつくったクラスの名前は
MyHogehoge
みたいに「My」とか付けてますか?

適当に付けてたらあとで
PEARが必要になったときとか重複しそうで。
ただそれだけなんだけど
My〜ってのもかっこ悪いし
124nobodyさん:2006/05/25(木) 16:12:15 ID:???
YourHogehoge
Herhogehoge
Hishogehoge

どれでも好きなのを選びなさい。
125nobodyさん:2006/05/25(木) 16:38:58 ID:???
>>123
PEARじゃなくともチーム開発すると名前の重複を考慮しなくてはならなくなる。
ちなみにオレは自分のセンスでテキトーに名前付けてる。
126nobodyさん:2006/05/25(木) 16:39:35 ID:???
>>123
おれは、pearと同じような形式する
ようはパスと一致するような形

127nobodyさん:2006/05/25(木) 16:42:35 ID:???
>>101
UIDとかが取得できない環境なら
ユニークなセッションIDを発行して、DB上にセッション情報を保存する
パラメータとしてはそのセッションIDを引き渡す
128nobodyさん:2006/05/25(木) 16:50:09 ID:???
それじゃ101と変わらんだろ
129nobodyさん:2006/05/25(木) 17:48:50 ID:???
今、vodafoneに絵文字メールを飛ばすプログラム作ってるんですけど、
3G端末に送ると絵文字だけが削除されてしまう。
3G端末以外ならうまくいってんだけど、これってやっぱVodafoneの仕様ですかね?

ここは出来てるから不可能ではないと思うんですが・・・
http://www.triworks.com/japan/wj2003/001.html
130nobodyさん:2006/05/25(木) 18:17:21 ID:???
こんにちわ。
2点教えていただきたいことがございまして書き込みさせて頂きます。

1,クラスを使うときはどんな時に使えばよいのか?functionは使うのですが、
class を使う場面がよくわからないので教えていただけると幸いです。

2,smarty は使った方が良いでしょうか。また、phpのプログラマーとして覚えておくのは
必須と言った感じでしょうか。

宜しく、ご教授下さいませ。
131nobodyさん:2006/05/25(木) 18:27:25 ID:???
>>129
仕様。
ttp://www.web-ware.org/cgi/npindex/62/open_view.html?s=m31
これの下の方、「文字コード体系 - Vodafone の場合」
132軟式PHP:2006/05/25(木) 18:35:04 ID:???
>>123
俺はcomXXXっていう風にcomを頭につけてるよ。なんとなく。
133nobodyさん:2006/05/25(木) 18:42:25 ID:???
>>130
まずはオブジェクト指向について勉強。
Smartyは使えた方がいいと思う。
134nobodyさん:2006/05/25(木) 18:49:37 ID:???
>>133
ありがとうございます。オブジェクト指向を徹底的に勉強してみます。
その後、smartyを使ってみます。
ご親切にありがとうございました。
135123:2006/05/25(木) 18:53:57 ID:???
>>124-126
みなさん苦労されてそうですね
重複しないようになにか考えます
ありがとうございました
136nobodyさん:2006/05/25(木) 18:55:50 ID:1NG09F7i
質問があります。これは可能ですか?HTMLタグの
<title></title>の間に入っている文字、例えば「ハリーポッター」だとします。

この「ハリーポッター」という文字を
<?php echo $key>; この$keyに入れることは可能でしょうか?
または$key = "" この""の間に入れることはプログラム的にはできますか?
137nobodyさん:2006/05/25(木) 19:03:03 ID:???
>>129
なるほど仕様ですか。ありがとうございます。
じゃあ上司にそう言ってとっとと帰ります。
138137:2006/05/25(木) 19:04:20 ID:???
>>129 ×
>>131
139nobodyさん:2006/05/25(木) 19:05:57 ID:???
MySQL からDBの中身を全て持ってきて連想配列に入れたいのですが、
どうすればいいのでしょうか?

以下のようにやると思ったようになりません。
$array = array();
while ( $line = mysql_fetch_array($res, MYSQL_ASSOC) ){
foreach($line as $key => $col_value) {
array_push($array, array($key => $col_value));
}
}

これだけだと一行しか取得できません。
$line = mysql_fetch_array($res, MYSQL_ASSOC);

よろしくお願いします。
140nobodyさん:2006/05/25(木) 19:06:06 ID:???
>>136
質問内容が分からない。
「<title>ハリーポッター</title>」
から、
「ハリーポッター」
だけ抜き出したいということか?

>>137
適当にググっただけなんで、今もそうなのかは分からん。
Vodafoneの携帯持ってないんで、テストも出来ないし。
141nobodyさん:2006/05/25(木) 19:13:21 ID:???
>>139
$arrayをどういうデータ構造にしたいかによるが、
$array = array();
while ( $line = mysql_fetch_array($res, MYSQL_ASSOC) ){
 array_push($array, $line);
}
これでいいんじゃないか?
142nobodyさん:2006/05/25(木) 19:15:36 ID:???
>>136
preg_match ('/<title>[^<>]+<\/title>/i', $data, $matches);
143nobodyさん:2006/05/25(木) 19:19:12 ID:???
>>141
ほ、本当ですね... orz
何十分もやってました。ありがとうございました。
144nobodyさん:2006/05/25(木) 19:27:55 ID:YQ84qh3g
$contents = file("https://www.hoge.com/index.html");

ってやったら
Warning: file() [function.file]: SSL: fatal protocol error
となっちまいました

一応データは無事取得したのですが、なんかまずいのでせうか?
悪あがきで
fopen("https://www.hoge.com/index.html", "r");
を先にやってみてもおなじWARNINGがでます

PHPのバージョンは5.1.2、OSはLinuxらしいでやんす
145nobodyさん:2006/05/25(木) 19:33:22 ID:???
>>144
SSL使えないサーバじゃね?
146nobodyさん:2006/05/25(木) 19:40:56 ID:YQ84qh3g
一応データは取得できてるからSSL使えないなんてことはないのではないかと・・・
--with-openssl=/usr/local/openssl
でコンパイルしてるっぽいし
うーん・・・
147nobodyさん:2006/05/25(木) 19:41:03 ID:???
フォームを利用してログファイルに文字列を一行に書き込む際、
文字列に改行が含まれていると、次の行にいってしまいます。
改行を<br />にするにはどうすればいいでしょうか?
148nobodyさん:2006/05/25(木) 19:46:26 ID:???
>>147
っ[マニュアル]
149nobodyさん:2006/05/25(木) 19:46:39 ID:???
>>147
改行を<br />に置き換える関数を使用する
150nobodyさん:2006/05/25(木) 19:56:17 ID:???
$comment 検索元
$search 検索語句

$comment = str_replace("$search","<span style=\"background-color:#ffff00;\">$search</span>","$comment");

この様な場合において

$comment に含まれるhtmlタグ内には上記を適用させないようにする為には具体的にどの様な方法がありますでしょうか
151nobodyさん:2006/05/25(木) 20:06:05 ID:1NG09F7i
>>140
おっしゃる通りです。

>>142
ありがとうございます。

<?php
preg_match ('/<title>[^<>]+<\/title>/i', $data, $matches);
?>

<?php echo ($date); ?>

こんな感じで大丈夫でしょうか?やってみたのですが、表示されませんでした。
152nobodyさん:2006/05/25(木) 20:18:16 ID:???
>>147
str_replace ("\n", "<br />", $hoge)

>>151
<?php echo $matches ?>
つか正規表現は覚えておいて損は無いと思うので、適当にぐぐって勉強してごらん。
153nobodyさん:2006/05/25(木) 20:33:12 ID:???
>>151
ひょっとして
<html>
<title>ほげほげ</title>
<body>
<?php echo $key ?>
</html>
みたいな感じで自分自身のタイトルを取得したい、って話?
だとするとちょっと凝った手が必要になると思う。
154nobodyさん:2006/05/25(木) 21:00:33 ID:???
宿題は宿題スレへ
155nobodyさん:2006/05/25(木) 21:01:33 ID:???
データが日付になってるww
156nobodyさん:2006/05/25(木) 21:16:48 ID:1NG09F7i
>>153
そうです、タイトルさえ取得できれば私が思っていることができるのです。

>>152
ありがとうございます。以前も同じような質問をしたのですが
何故かスルーされて解決に至らなかったのです。

この件でかなりの時間悩んでいたのでこの機にどうにか解決したいです。
<?php echo $matches ?> これで一応文字は表示されたのですが
タイトル名ではなく Array と表示されます。
157nobodyさん:2006/05/25(木) 21:26:49 ID:???
>>156
だからマニュアル読んでこい
そこに答えがある
158nobodyさん:2006/05/25(木) 21:42:52 ID:1NG09F7i
本当に教えてクンでうざいと思いますが、この件が解決したらもう質問は当分控えますので
お願いします。
159nobodyさん:2006/05/25(木) 21:47:59 ID:???
マニュアルに書いてるのに
なんでマニュアルにあることまで・・・

Arrayって配列だよ
160nobodyさん:2006/05/25(木) 21:49:04 ID:???
いくら自覚してても駄目。
そういう甘えは許さないよ。
もうレスはいっぱいもらって解決法も分かったでしょ。

はい次。
161nobodyさん:2006/05/25(木) 22:01:36 ID:1NG09F7i
わかりました。後は自分で頑張って見ます。皆さんありがとうございました。
162nobodyさん:2006/05/25(木) 22:08:57 ID:???
>>161
私もよくここで質問をしていたけれど、本当に初心者な質問に関しては
ノーヒントで「マニュアル嫁」やら「死ね」と言われていたもんだ。

そのとき私は「なんでコイツラこんなに厳しいんだろう…、もし俺が回答者なら、すんなり答えを教えてやるのになあ… もしかして
コイツラはレベル低すぎて答えられないのではないか…? いやいや、そんなハズはない! 数学の授業で少し頭の良い友達に聞いてもなかなか答えを教えてくれない奴と同じか?」なんて思っていたりした。

でも、今考えてみると、当時の回答者の気持が分かったきがする。
質問者のことを考えた " やさしい意地悪 "なんだなって。
悔しくても、成長するんだなって。

で、
$basetext = 'ももも <title>hoge</title> ももも';
preg_match ('/<title>[^<>]+<\/title>/i', $basetext, $matches);
echo $matches[0];

これじゃ<title>hoge</title>しか出力されない訳だが。
正規表現に詳しい人よろ。
163162:2006/05/25(木) 22:12:15 ID:???
自分で読み返して思った・・・

>>162
日本語でおk
164nobodyさん:2006/05/25(木) 22:14:07 ID:???
自演乙
まぁ正規表現ならマニュアル書いて無いし別にいいよ。
欲しいトコ(この場合hogeに当たる部分)を丸カッコで囲んでみな
165162:2006/05/25(木) 22:23:03 ID:???
>>164
自演じゃないあるよ w
まあ質問者はもう帰ってしまったかもしれないがな。
166nobodyさん:2006/05/25(木) 22:31:27 ID:???
質問者が消えたところで、
$basetext = 'ももも <title>hoge</title> ももも';
preg_match('/<title>([^<>]+)<\/title>/i', $basetext, $matches);
$key = $matches[1];
echo $key;
ということだな。
167nobodyさん:2006/05/25(木) 22:40:53 ID:???
何だかんだ言って優しいんじゃないか。
全くもーお前らは。
168nobodyさん:2006/05/25(木) 22:42:05 ID:???
>>127
それじゃ結局クッキー使えない携帯では意味が無いわけだが・・・
169nobodyさん:2006/05/25(木) 22:46:57 ID:???
>>162
例えばだ。
弟に「カケ算の7の段を教えてー」と言われたとする。
しかも手には算数の教科書。もちろん中には九九の一覧表がある。
そんな状態でワザワザ弟に付きあってやる必要は感じないだろ?

コッチが教えた事が弟の次に繋がるのであれば話は別だが。
170nobodyさん:2006/05/25(木) 22:50:44 ID:???
>>168
Cookie使えないケータイってまだ存在するの?

少なくとも、auとtu-kaの全機種はCookie対応だよ。
(ゲートウェイ側で対応しているのでどんなに古い機種でも対応している。)

たぶんDoCoMoやWILLCOMも原則Cookie対応だと思うけど。
171170:2006/05/25(木) 22:52:57 ID:???
セキュリティ上必要ならCookie未対応の環境を見捨ててもいいと思う。
Flash未対応、JavaScript未対応の環境は数%存在するが、Cookie未対応の環境は殆ど無い。

URIにセッションIDを含めると、履歴に残ったり、URL共有サービスやブラウザツールバー作成元、
アドウェア製作元に送信されたり、Referarで残ったり、IEのバグで関係無いページにRefererとして
送信されたりと色々セキュリティ上の問題がおこる。
172nobodyさん:2006/05/25(木) 22:53:04 ID:???
>>170
ちょ、おまw
173nobodyさん:2006/05/25(木) 23:04:46 ID:???
>>170
WILLCOMでネットしてる人はCookie対応として良いけど、
DoCoMoやVodafoneはどうなのだろう?>携帯に詳しい方
174nobodyさん:2006/05/25(木) 23:21:18 ID:???
>>171
> Flash未対応、JavaScript未対応の環境は数%存在するが、Cookie未対応の環境は殆ど無い。

よくこんな大嘘を言えるものだ・・・。逆に感動したw

175nobodyさん:2006/05/25(木) 23:29:43 ID:???
>>174
自分のサイトのアクセスログでもそんな感じになってるよ
JS有効が94%だけどCookie有効は97%もある

広告やポップアップがうざかったりセキュリティホールが心配だったりで
JS切る人はまだまだいるね
176nobodyさん:2006/05/25(木) 23:40:05 ID:???
>>175
スレをよく嫁
177nobodyさん:2006/05/25(木) 23:44:03 ID:???
>>170
au以外はまだ全然っすよ。何その思い込み。
17880:2006/05/25(木) 23:44:35 ID:???
>>100さん

そうなんです。
逆のことをやりたいのです。。
今日も調べてみたのですが、
やはり無理のようでした。

179170:2006/05/25(木) 23:50:54 ID:???
>>177
そうなんでしたか。
Cookieが使えないとなると、個体識別番号やBASIC認証で管理するぐらいしか無いですね。

auはEZ番号(サブスクライバID)を全てのサイトに対して出力するので、
かなりのプライバシー上の問題があるのでそっちよりはましかもしれませんが・・・。
(一応、最近になって無効化する設定ができるようになったけど、無効にすると公式サイトや通信機能付きアプリや
EZチャンネルなどがつかえなくなり切り替えも面倒で現実的でない。ドメイン毎の切り替えや公式サイトのみへの送信、
DoCoMoのように毎回確認画面がでるようにできればいいんだけど。)

> たぶんDoCoMoやWILLCOMも原則Cookie対応だと思うけど。
これは違ったみたいですね
すいません
180nobodyさん:2006/05/25(木) 23:56:35 ID:i7rXqHyW
ファイル名,文書の概要
----------------------------

このようにコンマで区切られたログファイルがあるとします。
fopenで開いてexplodeで配列にすることはできました。

'$filename'には ファイル名 の値が代入されています(例えば 'hoge.html')。
このログファイルからファイル名($filename)を検索して、対になっている「文書の概要」を変数に代入するにはどうしたらできるのでしょうか?
181nobodyさん:2006/05/25(木) 23:58:39 ID:???
>>170
SoftBankMobileは全然対応してないよ
182nobodyさん:2006/05/26(金) 00:00:00 ID:???
>>179
EZ番号がサイトに伝わって何かマズイ事でも?
EZ番号からプライバシーに関わる情報取得など、
一般のサイト運営者にはまず無理でしょう。

で、BASIC認証をどうやってセッション管理に利用すると?
183nobodyさん:2006/05/26(金) 00:00:02 ID:???
>>180
forで回せばいいじゃん
184nobodyさん:2006/05/26(金) 00:05:15 ID:???
>>180
ログファイルのサイズが小さいなら
while($line = fgets($fp)) {
  list($filename, $text) = explode(",", rtrim($line));
  $file[$filename] = $text;
}
とファイル名をキーにした連想配列に丸ごと格納してしまって
$text = $file[$filename];
とやって概要を取り出すのが手っ取り早い。
185nobodyさん:2006/05/26(金) 00:13:48 ID:ZiAJSuMJ
php4における、sybaseに関する挙動について教えてください。

クエリ実行関数として、sybase_query(), sybase_unbuffered_query()の2つありますが、
(unbufferedの方はsybase-ctライブラリを使用)

この2つの違いというのは、
sybase_query()
→クエリ発行し結果セット全体をメモリ上に取得する
 (大きい結果の場合リソースを大きく消費する)

sybase_unbuffered_query()
→クエリ発行した結果セットに対する最初のローのポインタを取得する

という理解であってますでしょうか。

perlのDBIなんかだと元々unbufferedな動作な用ですねん
186nobodyさん:2006/05/26(金) 00:23:12 ID:???
そういえば今JavaScriptに対応してる携帯ってあるらしいね
187nobodyさん:2006/05/26(金) 00:34:14 ID:???
フルブラウザ対応でJavaScript使えないやつってあったっけ?
188nobodyさん:2006/05/26(金) 00:49:58 ID:???
>>182
十分問題がある。
例えば、どっかの懸賞サイトに個人情報を入れたとする
その情報がワンクリ詐欺や架空請求業者に回ると、
Eメール(Cメール)で送られてきたアドレス(?での引数は無し)にアクセスしてサイトを観覧しただけで、
EZ番号と関連付けられたDBから情報を取得し、電話や郵便での請求が来たりするよ。

あと画像広告(img要素での呼び出し)を配信している広告代理店は、ユーザがどういうサイトを観覧しているかとかを全部把握できるしな。

Cookieでさえプライバシーの問題があって、サードパティ製を拒否したりするのが普通になってきているが、
EZ番号は全てのサイトに対して同じIDが利用され、更にユーザが変更することすらできない。(機種変更しても変わらない。一回解約すれば変わるが)

189nobodyさん:2006/05/26(金) 02:24:31 ID:???
>>188
なんかそれってEZ番号とか関係なしに
入力した個人情報が業者に回った時点で請求来ると思うんだけど
読み間違えてる?

漏れた情報をDBしてる業者があって
そこと提携してる業者のサイトにアクセスしたときそうなるってこと?

業者の運営方法とか詳しく知らないんだけど
提携してるんならDBまんまよこせよって感じだけど。
190nobodyさん:2006/05/26(金) 02:35:31 ID:???
>>189
この手の業者は互いにメールや個人情報を売買しあってるけど
それ自体が商売だから当然内容に見合った価格設定になる。
提携といっても全情報を丸ごと交換するなんてことは普通はしない。
191188:2006/05/26(金) 02:35:41 ID:???
>>189
明らかにEZ番号と関連付けられて請求が来ることがある。
例えば、3ヶ月前に懸賞サイトで個人情報を入力。

そして、ケータイのアダルトサイトを観覧(例えば、おまんこ天国というサイトだとする)
おまんこ天国のサイトを観覧しただけで、そこにメールを送ったり電話をかけたりはしてないんだから、
EZ番号以外の識別情報はおまんこ天国には伝わっていないはず。(IPアドレスやUserAgentなどの端末を識別できない情報は伝わっているが)
そして、その翌日ぐらいに、おまんこ天国というサイト名と使用日時などが明記されたメールや請求電話が来る。

つまり、EZ番号と個人情報を関連付けたDBがそういった業界で売買されてたりする。

DBそのまんま貰ってその住所に請求送ったって「身に覚えの無い請求」と扱われて放置される可能性が高いから、
ユーザがアクセスしたサイトと関連付けることは戦略として有効。


ちなみに、固定IPアドレスのプロバイダでも同じことが言える。
例えばどっかの会員サイトから登録時のログが漏洩して、Winnyに流れたとする。
そしたら、掲示板とかで第三者がIPアドレスを取得(ソースに表示される掲示板とかfusianasanとか)すればそこから住所などが特定できちゃうわけよ。
ただし、固定IPアドレスのプロバイダは全体からすれば少ないので、PCではそのDBを使った不当請求はまだ無いに等しいみたい。
192nobodyさん:2006/05/26(金) 02:36:46 ID:???
サイト閲覧しましたよね?ってゆーのが必要ってことか。
無差別にはやんないもんなのかな。
193nobodyさん:2006/05/26(金) 02:54:07 ID:???
>>192
無差別にやるとこ(いわゆる架空請求業者)もあるよ。
でもそれは労力に比べて命中率が低いんで、脅し専門の部署持ってる会社じゃなきゃやんない。
多くの裏業者では、
→あらかじめ個人情報を入手
→その個人ごとに一意のURLを記載した広告メールを配信
→アクセスした時点で請求開始
→全然入力した覚えの無い個人情報を使って「うちのサイトであなたが登録されてますから。その証拠に〜」と
 個人情報を使ってあたかも法的に根拠があるような物言いで「訴訟も覚悟してください」と脅す
って感じ。
アクセスした証拠とか無いと警察を黙らせることができないんだわ。逆に言うとそれさえあれば警察も不問。
194nobodyさん:2006/05/26(金) 02:58:56 ID:mmVqr71r
if ($fp = @fopen ("access.log", "r") != FALSE) {
        $line = fgets ($fp, 1024);
        echo $line;
}

こうやっても内容が出力されないのですが、何か原因として考えられる点はありますでしょうか?
ファイルの内容はごく普通のテキストで一行です。
195nobodyさん:2006/05/26(金) 02:59:45 ID:???
PCだと串刺したりルータ再起動でIP変えたりできるけど(固定IPじゃなければ)
携帯の個体識別はソレを買ったときからずーっと一緒だからねぇ。
196nobodyさん:2006/05/26(金) 03:00:45 ID:???
>>194
@ を外したらエラー出てこん?
197nobodyさん:2006/05/26(金) 03:02:15 ID:???
>>194
if(($fp = fopen()) != FALSE)
って感じで()で括らないとこけた気がする
198nobodyさん:2006/05/26(金) 03:02:22 ID:???
かけねなしの初心者です。
MAC OS X ver 10.3.9 に入ってるPHPを使って、
SQLiteを学ぼうと、SQLite ManagerをDLしてDocuments配下に
コピーしたんですが、次のエラーが出てうまく動作しないのです。
________
Error :
The SQLite extension can't be loaded.
________
どうしたら、うまく動作させられるんでしょうか。
199194:2006/05/26(金) 03:07:22 ID:mmVqr71r
>>196
出ませんでした。が、>>197さんのアドバイス通りに()で括ったらできました。
ありがとうございました。
200nobodyさん:2006/05/26(金) 03:12:53 ID:???
201nobodyさん:2006/05/26(金) 03:14:52 ID:???
>>198
そりゃお前ソースも見せないで分かるかコンチキショー
それになんでMACなんだ?
202nobodyさん:2006/05/26(金) 03:15:17 ID:???
>>198
SQLiteってコピーしただけじゃ動かんのじゃないかな。
http://www.php.net/manual/ja/ref.sqlite.php
> PEARインストーラで pear install sqlite を実行して下さい。
203nobodyさん:2006/05/26(金) 03:16:13 ID:???
>>201
MacOSX持ってたら標準でPHP付属なんだから、勉強したきゃそのまま使うだろう、ふつー。
204nobodyさん:2006/05/26(金) 04:10:16 ID:XdlBZLhP
PHPと全く関係ないんですが、詳しい人が多いと思うのでここで質問します。

ブラウザに「印刷」というボタンをつくって、
それをクリックするとサーバ上のファイルを
サーバのあるLAN内のプリンタで印刷を開始する
ということは可能ですか?


具体的に今やりたいのはPHPとMySQLを使って
帳簿をTeXで書いて、PHPでプロンプトの命令を送り
コンパイルしてDVIをつくり、その印刷をDVIウエアからでなく
ブラウザのボタンで印刷を実行したいのです。

DVIファイル作成まではできました。
サーバはwindowsサーバを使っています。
205nobodyさん:2006/05/26(金) 04:24:13 ID:???
>>204
サーバー側で印刷するだけなら、submitクリックで呼び出されるPHPなりのプログラムから
system()などのコマンド実行関数を使って印刷用プログラム(コマンドラインプログラムが望ましい)を実行するだけだよ。
WindowsでのDVI印刷なら ttp://akagi.ms.u-tokyo.ac.jp/dvitest.html この辺のを利用すればできんじゃない?
206nobodyさん:2006/05/26(金) 04:33:19 ID:???
>>204
PHPのスレなんで、PHPの話をすると
COMを使うといける。
>サーバはwindowsサーバを使っています。
なんでしょ。
207nobodyさん:2006/05/26(金) 08:30:12 ID:???
>>198
SQLite拡張モジュールがないといっている
モジュールを追加すればいい
Fedoracoreとかならrpmでできるんだけど
MACは知らないので追加方法は調べてね
208nobodyさん:2006/05/26(金) 08:35:03 ID:???
少なくともVodafoneはクッキー対応してない。

でもmixiで携帯からログインできてる。
mixiはどうやって携帯ログイン(セッション)を実現してんだろう?
URLにSID付けて引き回してないみたいだしね。。。
209nobodyさん:2006/05/26(金) 08:37:18 ID:???
hiddenに入れてるとかじゃないの?
210nobodyさん:2006/05/26(金) 09:04:37 ID:???
個体識別番号でも使ってるんじゃない?
211nobodyさん:2006/05/26(金) 09:04:43 ID:???
hiddenに入れたら危ないんじゃないか・・・?
あ、でも携帯は今のところJavascriptも無効だから、
hiddenの中身が漏れる危険性はないのかな??
212211:2006/05/26(金) 09:06:34 ID:???
つーかよく考えたらhiddenのワケないな。
だって、携帯mixiでページ移動するとき、いちいちPOSTしてないもん。
普通のハイパーリンクで移動してるからhiddenは持ち越せないよなぁ。
213211:2006/05/26(金) 09:09:41 ID:???
>>210
個体識別番号でやるにしても、どうやってセッションを管理するの?
最初のログイン時にサーバDB側に個体識別番号をぶち込むにしても、
結局、携帯端末側にセッションIDを渡さないと次の操作から
同一のクライアントかどうかを確認できないよね・・・

あ、それとも携帯って、サーバにアクセスするたびに個体識別番号を
勝手に送る仕様なのかな?? その辺あまり知らないんだけど。。。
214nobodyさん:2006/05/26(金) 09:10:59 ID:???
というか>>170はものスゴイ妄想を語ってるなww 亀レス恐縮だが。
215nobodyさん:2006/05/26(金) 09:55:42 ID:???
>>208
mixiは常にGETでセッションIDを送っているよ。
ログインから12時間で強制破棄されるので、長いことサーフィンしてると強制ログアウトされる。
逆に、ログインしたあとのURLを保存しとけば、12時間は再接続してもログインしたままだよ。
216nobodyさん:2006/05/26(金) 10:01:39 ID:???
mixi は暗号化したパラメータと、サイト側で発行した識別IDを渡しているんじゃないの?
217215:2006/05/26(金) 10:18:19 ID:???
>>216
home.pl?ses=[数字のID]_[ランダムな16進数列]
こんな感じ。
PHSからなんで、携帯からだとまた違うかも知れない。
218nobodyさん:2006/05/26(金) 10:46:36 ID:???
>>215>>217
えっ、マジで!?
ってことは、たとえばmixi内の誰かが悪意を持ったURLを
日記とかコミュとかに貼って、そこに飛んだらアクセス解析で
リファラからセッションIDが漏れちゃうってことだよね。それヤバくない??
219nobodyさん:2006/05/26(金) 10:52:00 ID:???
携帯でリファラ?ああ、最近の携帯はそんなもんも返すのか。
220nobodyさん:2006/05/26(金) 10:53:59 ID:???
>>219
返すのも返さないのもあるよ。
おかげで仕事が増えた。
221nobodyさん:2006/05/26(金) 11:01:46 ID:???
古いauだけどレファラ返すよ
222nobodyさん:2006/05/26(金) 11:04:37 ID:???
リファラ返す携帯の場合、GETでSID送ってたら超危険だよな・・・
mixiのセキュリティは大丈夫なのか。。。
223nobodyさん:2006/05/26(金) 11:09:36 ID:???
ラファラ
リファラ
ルファラ
レファラ
ロファラ
224215:2006/05/26(金) 11:17:39 ID:???
PHS(多分携帯も同じ)からだと、mixiはhttp://〜がリンクにはならない。
日記を外部に置いている場合は、PCから見てくださいと言われ、アクセスできない。

でも、http://〜という文字列をリンクに変換するbookmarklet使ってる人は危険かも。
あと京ぽんには、bookmarkを読み込んだときにもリファラを送ってしまうというバグがあって、ちょっと怖かった。
225nobodyさん:2006/05/26(金) 11:48:46 ID:UfRxuQYj
質問お願いします
PEARのLogクラスを使おうと思うのですが
最初にインスタンスを作ったあとで
いろんな関数でログを出力したい場合は
そのインスタンスを各関数でglobal宣言するのでしょうか?

Logクラス使ってるかたがいらっしゃったらどのように使ってますか?
各関数でインスタンスを生成?
よろしくお願いします
226nobodyさん:2006/05/26(金) 12:42:47 ID:???
>>224
なるほど、携帯でアクセスした場合はmixi外部へは飛べないようにしてあるわけか。

でも、最近の携帯って親切な(おせっかいな)機能があって、
メアドとかURLらしき文字列って勝手にリンクされちゃう場合あるよね。。。
227nobodyさん:2006/05/26(金) 12:56:56 ID:???
ジャンプページを経由したりしないのか?
普通そういう実装がしてると思うが
228nobodyさん:2006/05/26(金) 15:02:17 ID:???
あんまり携帯端末に詳しくない奴は妄想でレスするなよ

>>227
やっぱりその方法が一番楽で安全だよね
229nobodyさん:2006/05/26(金) 15:23:51 ID:???
文中にURLが含まれていたら自動リンク、というのはどうすれば実装できますか?
230nobodyさん:2006/05/26(金) 15:26:02 ID:???
>>229
preg_replaceを使う
231nobodyさん:2006/05/26(金) 17:36:54 ID:???
jp2.php.netまた落ちてんのか!氏ねっ!
232nobodyさん:2006/05/26(金) 17:39:59 ID:???
>>213
最近の機種のUA見て来い
233nobodyさん:2006/05/26(金) 18:07:11 ID:???
>>225
MyLog::hogehoge
で呼べるようにするとか
234nobodyさん:2006/05/26(金) 19:13:34 ID:???
PHPとMySQLを使っています。
ある商品表に商品データを追加していきたいのですが、
たとえば「syohin_no=1000、syohin_name=ボールペン」を入れるときに、
「すでにsyohin_noに今回の番号(例では1000番)が存在する場合はupdate、
存在しない場合はinsert」
という処理をしたいと思います。
このような場合、任意のsyohin_noが存在するか否かを確かめるだけの関数などはありますでしょうか?
235nobodyさん:2006/05/26(金) 19:17:43 ID:???
MySQL限定ならsyohin_noにユニークインデックスを張っとけば
REPLACEステートメントが使えますよ。

まぁ確かめるだけならフツーにSELECT COUNT(*)を発行するだけ。
PHP関係ないけど。
236nobodyさん:2006/05/26(金) 19:29:25 ID:???
SELECT → ある場合UPDATE、ない場合INSERT
やっぱ流れ的にはこんな感じでしょ。

$sql = "SELECT COUNT(*) FROM syohin_table WHERE syohin_no = 1000";
$result = mysql_query($sql);

if ( mysql_num_rows($result) ) {
$sql = "UPDATE syohin_table SET syohin_name = 'ボールペン' WHERE syohin_no = 1000";
} else {
$sql = "INSERT INTO syohin_table VALUES( syohin_no, syohin_name )";
}
$result = mysql_query($sql);
237nobodyさん:2006/05/26(金) 19:36:02 ID:???
mysql_real_escape_string とか、エスケープ関係は好みの箇所でやって頂戴
238236:2006/05/26(金) 19:47:57 ID:???
あ、ごめん COUNT(*) だと mysql_num_rows() は常に真になっちゃうな
COUNT(*) を syohin_no とかフィールド名に置換してくれ
239nobodyさん:2006/05/26(金) 20:29:46 ID:???
どうしても分からないので質問させてください。
さっきからこれのせいでかれこれ30分以上作業が進みません。

リモートファイルの有無に応じて結果を返すようにしたいのですが、上手くリモートファイルが取り込めません。

$TEST_READ = @fopen("http://hoge.com/", "r");
if(!$TEST_READ) echo "ng";

と書くと明らかに存在しないリモートファイルでもTRUEが返ってきます。
次に

$TEST_READ = @file("http://hoge.com/");

と書くと逆に存在するファイルも「failed to open stream: No such file or directory in XXX」とお決まりのエラーが返ってきます。

if((include "http://hoge.com/") == "OK") echo "あるある";

と書くと存在する場合勝手に内容を表示します。
どうすればファイルの存在確認のみを行えますでしょうか。
ちなみにリモートファイルの確認を行う作業が前提です。

環境→Linux バージョン:5.1.4
背低→セーフモード:Off、include_path:デフォ、allow_url_fopen:On
240nobodyさん:2006/05/26(金) 20:31:43 ID:???
っとスミマセン若干訂正が。。。

誤:$TEST_READ = @file("http://hoge.com/");

正:$TEST_READ = file("http://hoge.com/");

後、背低は設定のタイプミスです。スマソ。
241nobodyさん:2006/05/26(金) 20:39:26 ID:???
存在するかしないかだけなら、
HTTPならHEADリクエストを飛ばして200以外なら存在しないっていうのが
手っ取り早いんじゃないの?
242nobodyさん:2006/05/26(金) 20:54:09 ID:???
>>239
期待通りbool(false)が返る。
PHP5.1.2(cli)/Win32

存在確認だけなら>>241の言うとおり
HEADでチェックするのが普通だと思う。
243239:2006/05/26(金) 21:00:36 ID:???
レスありがとうございます
んーとHEADリクエストを送ると言いますと具体的にどういう感じでしょうか;

apache_request_headers() の戻り値を調べるということでしょうか。
244nobodyさん:2006/05/26(金) 21:18:14 ID:???
>>243
fsockopenを使う
HEADリクエストの意味が分かっていないならそれなりの文献を参照
質問内容からして基本的な知識が欠損している気もするが

>>239の上は404ページを取り込んでいるんじゃないのか?
下は当然の動作として(つかincludeの動作をよく理解していないでしょ?)
245239:2006/05/26(金) 21:27:39 ID:???
レスありがとうございます。

なるほどfsockopenですか。
先ほどからphpManualのサイトを読んでまして何度か見た記憶が。。。

>下は当然の動作として(つかincludeの動作をよく理解していないでしょ?)
ttp://php.s3.to/man/function.include.html
の例16-9にある感じで動作することを期待して書いてみましたが根本的に間違ってたてことでしょうか。

当方php暦1年≦ 程度なもので的外れな質問スミマセン;
246nobodyさん:2006/05/26(金) 21:41:16 ID:???
new hogeでアクセスされたクラスはどうやったらfunctionに渡せますか?
247nobodyさん:2006/05/26(金) 22:29:25 ID:???
>php暦1年≦
なにこの逆ポーランド
248nobodyさん:2006/05/26(金) 22:41:02 ID:???
forth歴が長いんじゃね?
249nobodyさん:2006/05/26(金) 22:52:37 ID:???
250nobodyさん:2006/05/26(金) 22:55:46 ID:???
>>236
ありがとうございます。
やっぱりそうやって律儀に確認するしかないようですね。。。
なんかその作業がすごくムダに思えてきまして^^;

if_exist_mysql_record($sql)みたいな関数があったらいいのになぁ・・・
動作は、ある任意のSQLを投げて、レコードが存在すればTRUE、なければFALSEを返す。
つまり、特定の条件のレコードが存在するかどうかだけを確認する関数。
で、PHP側でその真偽値をifで分岐させて、updateまたはinsertのSQLを投げられたら
スッキリすると思いませんか?
251nobodyさん:2006/05/26(金) 22:58:52 ID:???
>>250
自分でその関数作れば良いでしょ。
関数の中身は>>236だけど。
標準にあったとしても恐らくやることは一緒のはず。
252nobodyさん:2006/05/26(金) 23:17:09 ID:???
>>249 ひどいよ
253nobodyさん:2006/05/26(金) 23:19:21 ID:???
deleteしてからinsertすれば、条件分岐しなくてすむよw
254239:2006/05/26(金) 23:23:14 ID:???
うはw全然無理スorz
もう今日は諦めて寝ようかな・・・

とりあえず自分のスキルが足りてないことだけは把握できました><;
255nobodyさん:2006/05/26(金) 23:25:24 ID:???
俺は自分でsql_isset()を作った
256nobodyさん:2006/05/26(金) 23:33:04 ID:???
>>239
マニュアルのfsockopenのページを探してきてやったぞ。
ttp://jp.php.net/manual/ja/function.fsockopen.php
このページも参考になるかも。
ttp://www.arielworks.net/articles/2003/1220a

あと、curlを使うのも良いかもしれない。
257nobodyさん:2006/05/26(金) 23:48:35 ID:???
>>250
そんなもん作っても
if_exist_mysql_record()した後に、そのレコードが
「まだある」ってことを誰が保証できるの?

>>234のようなパターンの処理は良くある話なので
MySQLに限らず色々なDBMSを使った場合にどうやってるのか良く情報を探してみな。
「LOCK TRANSACTION SELECT-FOR-UPDATE SELECT-TO-INSERT/UPDATE」
258nobodyさん:2006/05/27(土) 00:59:31 ID:XR56v2Et
みません。誰か教えてください。
mktime()関数を使ったら、今日の日付より、2006年6月4日の方が
タイムスタンプの戻り値が少ないのはなんでしょう?
<?php
$year = '2006';
$month = '6';
$day = '4';
$stamp = mktime(0,0,0,$day,$month,$year);
$today = getdate(); //今日を取得
$stamp2 = mktime(0,0,0,$today[mday] ,$today[mon],$today[year]);
echo $year;
echo '-';
echo $month;
echo '-';
echo $day;
echo '<br>';
echo $stamp;
echo '<br>';
echo $today[year];
echo '-';
echo $today[mon];
echo '-';
echo $today[mday];
echo '<br>';
echo $stamp2;

出力結果:
2006-6-4
1144249200
2006-5-27
1204642800
すみません。誰か教えてください…
259nobodyさん:2006/05/27(土) 01:03:43 ID:???
>>258
マニュアルのmktimeの引数のところをよ〜く見てみよう
260239:2006/05/27(土) 01:07:53 ID:???
結局よく分かりませんでしたorz
サーバへの接続はできてもファイルが存在するかどうかを確認できない感じです。
とりあえずfsockopenで鯖の生存確認はできました。

そろそろ眠いカモ。
こういう時てよくセミコロン忘れたりするから困る。
261nobodyさん:2006/05/27(土) 01:08:07 ID:XR56v2Et
ありがとうございます。
月と日が逆でした。

マニュアルをキチンと見てなかったです。
すみません。
262239:2006/05/27(土) 01:15:06 ID:???
キタ━━━━(゚∀゚)━━━━!!!!!
一行目をGETじゃなくてHEADにしてパスを付け足せばよかったんですね。

スミマセン。数時間悩んでできたのでつい。。。
ありがとうございました。
263nobodyさん:2006/05/27(土) 01:23:11 ID:XR56v2Et
>>259さん。
ありがとうございました。
264198:2006/05/27(土) 03:48:08 ID:???
原因が分かりました。
MAC OS X 10.3だとPHP5ではなく、PHP4のため
SOLiteが入ってなかったのでした。
丁度いい機会なので、あした10.4(Tiger)を購入してきます。
265nobodyさん:2006/05/27(土) 04:25:14 ID:???
>>264
原因がわかりましたって・・・。思いっきりエラーメッセージに原因が書いてあるのだが。

それよりも、PHP4でもSQLiteは使えます。
266nobodyさん:2006/05/27(土) 06:03:22 ID:krAJ2Rr2
PHPでhttps以外のアクセスを検知できますか?
267nobodyさん:2006/05/27(土) 06:20:40 ID:???
>>266
日本語でOK
268nobodyさん:2006/05/27(土) 06:27:52 ID:???
>>265
5であれば標準添付になってる。って話でしょ。
269nobodyさん:2006/05/27(土) 08:54:13 ID:???
そのためだけに1.5万出すとは・・・
アップグレードならもうちょっと安いのかな?
270nobodyさん:2006/05/27(土) 08:56:44 ID:???
>>266
スキーマやプロトコルに関する話題ならこのスレじゃないと思う
271nobodyさん:2006/05/27(土) 09:12:05 ID:???
>>ホゲさん
この部分だけ<font>で色づけしたいのですがどのような方法が効率的でしょうか?
自分で書いてみたんですがうまくいかないとです(;´ω`)
mb_ereg_replace("[>>]+[<br />]","<font color=\"red\">\\0</font><br />",$msg);
272nobodyさん:2006/05/27(土) 09:20:45 ID:???
ドコモ リファラ× クッキー×
ボーダ リファラ〇 クッキー〇
あう リファラ〇 クッキー〇
273nobodyさん:2006/05/27(土) 09:21:57 ID:???
>>271
ホゲさんてだれだ?
とりあえず↓を見ることをオススメする
ttp://www.kt.rim.or.jp/~kbk/regex/regex.html#PHP

あと、こういう場合、文字列を囲むのは " より ' の方が見やすいべよ
274271:2006/05/27(土) 09:29:13 ID:???
>>273
朝っぱらから即答していただき感謝です
>>ホゲさん
↑この部分だけを色づけしたいということでした^^;
正規表現ムズイとですね・・・
275nobodyさん:2006/05/27(土) 09:50:04 ID:???
オレはなんて親切なんだ
http://pc8.2ch.net/test/read.cgi/tech/1131028296/
276nobodyさん:2006/05/27(土) 09:59:00 ID:???
画像をアップロートするスクリプトを作ったのですが、
アップされた画像の「所有者」が「Apache」になっており、
FFFTPでそのファイルのパーミッションを変更しようとしても出来ません。
(スクリプト内からのchmodやchownも効きません)

これはどうしてなのでしょうか? また、どうしたらパーミッションを変更できるのでしょうか。
277nobodyさん:2006/05/27(土) 10:02:01 ID:???
>>276
Apacheがアップロードしたから
ディレクトリのパーミッションや所有者も調べてみたら?
SELinuxとか使ってる?
278nobodyさん:2006/05/27(土) 10:07:47 ID:???
>>277
ディレクトリのパーミッションは「707」で、
所有者はFTPアカウントとして設定したユーザです。

SELinuxは使ってるかどうか分かりません。OSはFC2です。
279nobodyさん:2006/05/27(土) 10:20:44 ID:???
スレ違いの気がするが・・・
シェルでsu apacheとかしてもchownできない?
というかなんで所有権の変更がしたいんだ
所有者apacheでなんか不都合とかある?
280276:2006/05/27(土) 10:26:07 ID:???
最終的には任意の画像ファイルをスクリプトから削除したかったのですが失敗し、
FFFTPで接続してみると所有者が「Apache」になっており、
しかもパーミッション変更は出来ないのに削除は可能だったりして、混乱しました。

ですが、もう一度スクリプト内からunlinkで削除してみたらなぜか出来ました。
お騒がせしてすみませんでした・・・。

(ただ、UNIXの知識があまり無いので、なぜファイルの所有者がApacheになるのか、
なぜApache所有のファイルをFFFTPで属性変更できないのか、なぜ削除は可能なのか…の
仕組みが全く理解できていません)
281nobodyさん:2006/05/27(土) 10:30:52 ID:???
198はもう10.4を買いにいったのかな。PHPだけが目的じゃ
ないなら構わないのだが、それが目的なら悲しい目にあうぞ。
282nobodyさん:2006/05/27(土) 11:32:29 ID:???
>>280
>なぜファイルの所有者がApacheになるのか、
スクリプトはApacheというユーザがコピーしてきてるから

>なぜApache所有のファイルをFFFTPで属性変更できないのか
キミのファイルを誰かが勝手に消したら困るでしょ?
それと同じで今回はApacheさんのファイルをキミが変更しようとしてたんだよ。

>なぜ削除は可能なのか…
削除はできなかったんでしょ?

FTPでアップロードしたファイルはキミのファイル
キミのファイルはキミが自由に変更・削除できる
WebブラウザからPHP等のスクリプトでアップロードしたファイルはApacheさんのファイル
Apacheさんのファイルはキミが変更することはできない

オレもUNIXのこと知ってる方じゃないが、Webプログラミングするならこれくらいは知っとこう
間違ってたらフォローよろ
283nobodyさん:2006/05/27(土) 12:14:54 ID:???
apacheさん萌え
284276:2006/05/27(土) 12:19:08 ID:???
>>282
>削除はできなかったんでしょ?

いえ、FFFTPでパーミッション変更は不可(変更操作しても反映されない)でしたが、
なぜか削除は出来ました。
だからなおさら混乱しております。。。
285nobodyさん:2006/05/27(土) 12:20:13 ID:???
Webプログラミングするなら権限の問題は常に頭に入れとかないと嵌るからな。
286nobodyさん:2006/05/27(土) 12:53:44 ID:???
>>283
     [*゚∀゚]ゞ
     /[_]
      | |
287 ◆.mm8HzTdfY :2006/05/27(土) 12:55:19 ID:l68IManM
header()関連で質問です。 <br> <br> $_SERVER[
288 ◆.mm8HzTdfY :2006/05/27(土) 12:57:26 ID:l68IManM
287です。先ほど投稿したのですが、何か表示がおかしいのでもう一度。申し訳ないです。


header()関連で質問です。

PATH_INFOで受け取ったパスにあるデータファイルの更新時刻をgetlastmod()で調べ、
次にUAから送られてきたIf-Modified-Sinceの時刻と比較して、
呼び出すべきファイルが更新されていれば改めてページデータを送信・交信されてなければNot-Modifiedを送って
キャッシュから表示させるようにしようとしていますが、躓いています。

データファイルの更新時刻の取得とUAから送られてくるIf-Modified-Sinceの取得は上手く行き、
両方をUNIXタイムスタンプにして比較するところまでは出来たのですが、
データが更新されている場合にもNot-Modifiedを送信してしまいます。
header()関数のマニュアルを読んでみたところ、「HTTPで始まるヘッダは正確な情報を返さなければならない」とあって、
おそらく処理を行うスクリプト本体が更新されていない為に、常にNot-Modifiedが送信されているようです。

何とかして「データ処理のスクリプトは更新されていないがデータファイルが更新されている状態」で
Not-Modifiedの送信を行わないようにしたいのですが、可能でしょうか?

解決策を知っている人がいれば教えてください。
289nobodyさん:2006/05/27(土) 12:58:16 ID:Yd7sUiu8
質問させて下さい。
mysqlとの連携なのですが、本を参考にしショッピングカートを作っています。
ソースを丸写ししたのにも関わらず訳の分からないエラーに悩まされています。
よく見ると本のソースにもかなり間違いがあるようで、調べても解決できませんでした。
-----------------------------------------
$sql = "select * from zaiko where serial = {$_POST['s']} and num >= {$_POST['n']}";
$rs = mysql_query($sql);
$n = mysql_num_rows($rs);
switch($n) {
case "0":
echo "在庫切れです";
exit;
break;
case "1":
$row = mysql_fetch_array($rs);
$basket = $_SESSION['basket'];
$basket[$_POST['s']] = "{$_POST['n']}\t{$row['product_name']}\t{$row['price']}";
$_SESSION['basket'] = $basket;
break; }
-----------------------------------------
このように記述しているのですが、mysql_num_rows に原因があるらしく
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in 〜
というエラーが出ています。
mysql_num_rows に関してはsqlのselect文には有効のようですし、何か別の問題等あるのでしょうか。
データベースには接続できています。
何かアドバイスもらえたらな、と思います。よろしくお願いします。
290 ◆.mm8HzTdfY :2006/05/27(土) 13:07:44 ID:l68IManM
SQL詳しくないですが、mysql_query()の返り値をダンプしてみてみると良いかもと思います。
クエリーを送った時点でエラーが出てると、当然その後は続かないので。
291nobodyさん:2006/05/27(土) 13:08:49 ID:???
>>284
パーミッション変更はオーナーとroot以外できないよ
292271:2006/05/27(土) 13:09:53 ID:???
271です
$bbs_log = ereg_replace('>>+([a-z]|[0-9]+)+<br />', "<font color=\"pink\">\\0</font>", $bbs_log);
ここまでできたのですが、日本語の場合がどうしてもできないとです・・
$bbs_log = ereg_replace('>>+([a-z]|[0-9]|[\S]+)+<br />', "<font color=\"pink\">\\0</font>", $bbs_log);
[\S]入れても無理ですた・・
ご教授お願いします
293nobodyさん:2006/05/27(土) 13:11:43 ID:???
質問させてください <br> phpinfo(); で表示されるOSやApacheの情報を、隠すことってできませんか? <br> <br>
294nobodyさん:2006/05/27(土) 13:28:53 ID:???
>>293
多分、phpinfo自体を使えなくするか、
またはちょこちょことCソースをいじれば出来なくもない。
ちょっと見た感じでは、ext/standards/info.c の920行目くらい。

>>284
たぶん、そのディレクトリの実行権限が君のユーザにあったから、
削除できたんだと思うよ。
295nobodyさん:2006/05/27(土) 13:41:18 ID:???
>>293
古いバージョンだとphpinfoはXSS脆弱性もってるからね。
296nobodyさん:2006/05/27(土) 13:48:57 ID:9//qB9Iw
submitを使用するとサーバーエラーになり、POST先に進めません。
ソースは以下のようにsubmitを1つ用意しているだけです。
<form method="POST" action="hoge.php">
<input type="submit" name="hoge" value="hoge" />
</form>

apacheのログでは、
[Sat May 27 00:00:00 2006] [error] [client 127.0.0.1] (OS 2)指定されたファイルが見つかりません。 : Could not open password file: C:/Program Files/xampp/security/htpasswd.webdav, referer:
と言われていますが、ファイルは存在しています。

なぜsubmitを使用できないのかわかりません・・・
apacheの問題でしょうか?

どなたかご教授をお願いします。
297nobodyさん:2006/05/27(土) 13:56:48 ID:???
エスパー エスパー お呼びですよー
298nobodyさん:2006/05/27(土) 13:59:22 ID:???
>>296
C:/Program Files/xampp/security/htpasswd.webdav
にあるはずのパスワードファイルが開けないってエラーですよ。
webdavの設定の問題でしょ
299nobodyさん:2006/05/27(土) 14:03:30 ID:???
>>289
$sqlをprintして、正しいかどうか調べてみた?
あとは、2種類のDBに対しsql_connectしてて、違う方にクエリー送ってるとか。
300nobodyさん:2006/05/27(土) 14:10:06 ID:???
>>292
eregは使ったことないんだけど、これでどうだ?
'>>([^<>]+)<br />'
301nobodyさん:2006/05/27(土) 14:12:08 ID:???
正規表現ちょーべんり

\(\*\^\_\^\*)
302nobodyさん:2006/05/27(土) 14:14:08 ID:???
>>292
'>>+([\S+?])+<br />'
303nobodyさん:2006/05/27(土) 14:32:11 ID:???
>>288
スクリプトが更新されてないからといって、勝手にNot-Modifiedが送信されることはない。
ただ、送るデータに変化がない場合には、通信データを減らすために、勝手にNot-Modifiedを送るサーバがある。
(何を基準に判断してるのかは分からないけど、ETagか何かかな?)

>>302
eregって最短マッチの"?"使えるの?
マニュアルやmanみても、あんまり詳しく書いてないもんで。
304nobodyさん:2006/05/27(土) 14:41:28 ID:9//qB9Iw
レスありがとうございます。
別のPCに同じ設定でインストールしているapacheでは
問題なく動作するのですが、
一方ではエラーになっています。

httpd.confの設定は変更していません。
305289:2006/05/27(土) 14:54:49 ID:Yd7sUiu8
>>290>>299
ありがとうございます。dbは3つありリレーションさせています。
二つのdbにコネクトしている場合クエリーも両方に送らなくてはいけないんでしょうか。
とりあえず、教えていただいた方法で確かめてみようと思います。
306271:2006/05/27(土) 15:08:30 ID:???
>>300,>>302さん
ありがとうごさいました(><)
もしよろしければ参考にしたサイトや書籍など教えていただけますか?

>>302さんのはできなかったとです
307nobodyさん:2006/05/27(土) 15:35:40 ID:???
php-5.1.4 って、Apache 2.2 系で使えますか?
308nobodyさん:2006/05/27(土) 15:59:45 ID:???
そもそも2.2系て2.1とどう違うの?
309nobodyさん:2006/05/27(土) 16:28:50 ID:???
2.1はデベロッパ向け
310296:2006/05/27(土) 17:16:51 ID:9//qB9Iw
デフォルトの状態で、submitは使えないんですか?
何か特別な設定が必要?

初めてsubmitを使ったとき、
ユーザー名とパスワードを求められたのですが・・・
311nobodyさん:2006/05/27(土) 17:44:01 ID:???
SimpleXML関数でXMLの変更を行おうと思っています。

simplexml_read_file関数で読み込んだSimpleXMLElementオブジェクトのユニークでない特定の要素の先頭にSimpleXMLElementオブジェクトを追加するにはどうしたらいいのでしょうか。
通常の配列みたくarray_unshift関数で追加しようとしたのですが配列じゃないと怒られてしまいました。
312nobodyさん:2006/05/27(土) 18:04:39 ID:Bnrg0iLL
ブラウザから、オンラインのphpを呼び出したところ
PHP本体の上に

Warning: Missing argument 3 for chrdat() in /home/sites/lolipop.jp/users/○○○ on line 308

と表示されています。
どうすればこの表示を消すこと、この文はなにを意味しているのでしょうか?
どなたかよろしくおねがいします。
313nobodyさん:2006/05/27(土) 18:12:20 ID:???
>>312
エラーメッセージのまんま
/home/sites/lolipop.jp/users/○○○ on line 308行目で
chrdatを呼んでいるとこで引数が関数の引数とあっていない
314nobodyさん:2006/05/27(土) 18:53:00 ID:???
>>311
SimpleXMLとか使ったこと無いけど、詰まるならDOMでやったら?
315nobodyさん:2006/05/27(土) 19:05:55 ID:???
>>313
お陰様で解決しました。
ありがとです。
316 ◆.mm8HzTdfY :2006/05/27(土) 19:09:01 ID:???
>>303

レス有り難うございます。
どうにも上手く行かないので、躓いている所を短いスクリプトにしてみました。

http://www.uploda.org/uporg401728.zip.html

これです。
やろうとしていることは
 1.PHPからデータファイルを読む
 2.HTTPリクエストにIf-Modified-Sinceがあれば
  データファイルのタイムスタンプと比較して・・・
    2-1.データファイルの方が新しければ内容を送信
    2-2.そうでなければNot-Modifiedを送信
です。

上のスクリプトは、何故かスクリプト本体が更新されていない場合にNot-Modifiedを送信していて、
データファイルが更新されていてもUAにデータをおくれない状態です。

どなたか解決方法やヒントがあれば教えてください。
317nobodyさん:2006/05/27(土) 19:36:06 ID:???
>>316
サーバ側ってキャッシュ情報持ってなかった?
318nobodyさん:2006/05/27(土) 19:39:34 ID:???
319 ◆.mm8HzTdfY :2006/05/27(土) 19:42:14 ID:???
>>316
レス有り難うございます。
レンタルサーバなのですが、どの辺を見れば分かるでしょうか?
320303:2006/05/27(土) 20:11:26 ID:???
>>316
すまん。的外れな303は的外れだった。
getlastmod()は現在のページの更新時刻を得るもので、
違うファイルのを知りたいときはfilemtime()を使う。
321271:2006/05/27(土) 20:11:38 ID:???
教えろやコラ!!
322nobodyさん:2006/05/27(土) 20:22:31 ID:???
323nobodyさん:2006/05/27(土) 20:39:31 ID:???
324 ◆.mm8HzTdfY :2006/05/27(土) 20:42:38 ID:???
>>303
有り難うございます!!
いまマニュアル見てみたらint getlastmod (void)と書いてあり、この半日の苦労はなんだったんだとか思いました・・・。
助かりましたー。

テンパると視野が狭くなってダメですねー。
325nobodyさん:2006/05/27(土) 20:48:38 ID:???
>>321

<?php

$str = ">>hoge hoge >> hage >>ホゲさん";

header("Content-Type:text/html; charset=".mb_detect_encoding("京"));
exit(preg_replace('/>>([^< >]+)/e','"<em style=\"color:red; background:transparent;\">".htmlspecialchars("$0")."</em>"',$str));

?>
326nobodyさん:2006/05/27(土) 20:53:29 ID:???
class test
{
function &getInstance() {
static $obj;
if (!isset($obj)) $obj = new test;
return $obj;
}
function add($val) { $this->var[] = $val; }
}
$o1 = call_user_func(array('test','getInstance'));
$o1->add('a');
$o1->add('b');
$o2 = call_user_func(array('test','getInstance'));
$o2->add('c');
print_r($o1);
> [0] => c

ほんとうはこうなって欲しい↓
> [0] => a
> [1] => b
> [2] => c

クラス名が動的なためcall_user_funcを使っているんですが、参照になてくれません。
PHP5のような動作をさせるにはどうしたらいいのでしょうか。
327nobodyさん:2006/05/27(土) 20:57:59 ID:???
PHP5.0.3から最新のPHP5.1.4にバージョンアップさせるにはどうしたらいいですか?
最新バージョンをダウンロードしてきてphp.iniを今までと同じ値に編集ですか?
328 ◆.mm8HzTdfY :2006/05/27(土) 21:05:05 ID:???
class test
{
 function test()
 {
  $this->count=0;
 }
 function &getInstance()
 {
  static $obj;
  if (!isset($obj)) $obj = new test;
  return $obj;
 }
 function add($val)
 {
  $this->var[$this->count++] = $val;
 }
}

$o1 = call_user_func(array('test','getInstance'));
$o1->add('a');
$o1->add('b');
$o2 = call_user_func(array('test','getInstance'));
$o2->add('c');
print_r($o1);

取りあえずこうしたら出来ましたよ。
これで良いのか分からないですが。
329nobodyさん:2006/05/27(土) 21:07:39 ID:???
>>327
OSは?
330nobodyさん:2006/05/27(土) 22:12:56 ID:???
>>327
ウチではyum
331nobodyさん:2006/05/27(土) 22:33:03 ID:???
>>327
設定ファイルが大きな影響があるほど変わった記憶がないので
上書きで大丈夫だと思うけど、念のためdiffぐらい取ったら?手間でもないし。
332266:2006/05/27(土) 22:53:42 ID:krAJ2Rr2
>>270
すみません、書き方が悪かったみたいです。
仮にadminというフォルダにindex.phpというファイルを置いたとして
ブラウザからアクセスする時に

https://example.com/admin/ → ○
http://example.com/admin/ → ×

としたいのです。
333327:2006/05/27(土) 22:54:17 ID:???
>>329-331
OSはWin2000sp4です。ちなみにPHPはXAMPP1.4.13でインストールしました。
Apacheは2.0.53のようです。
とりあえず設定ファイルのdiffとって様子見てから上書きしてみます。
334 ◆.mm8HzTdfY :2006/05/27(土) 23:13:34 ID:???
>>327

WIndows+Apache2+PHP5+MySQLの環境は、別個にインストールして設定ファイルを弄るのでも
そんなに手間じゃないですよ。
設定ファイルを触るのが勉強になったりもするから、手作業でやるのもお勧めです。

335nobodyさん:2006/05/27(土) 23:30:17 ID:???
>>332
>>270 コレが全て
336nobodyさん:2006/05/27(土) 23:38:15 ID:???
>>332
SSLでアクセスしたときは、$_SERVER[HTTPS]が定義されるから、
これの有無で判断すれば。
337nobodyさん:2006/05/28(日) 01:00:42 ID:???
>>308
2.1では使えるのですか?
338nobodyさん:2006/05/28(日) 01:10:58 ID:???
>>337
2.1でも2.2でも使えるでしょ
339nobodyさん:2006/05/28(日) 03:26:32 ID:???
headerについての質問です

/index.php

header("Location: http://www.google.com/");
とした場合
/
でアクセスした場合に "HTTP/1.1 200 OK" が返されて
リダイレクトされません。
/index.php にアクセスした場合の動作は問題ありません。

両方でリダイレクトできる良い方法ないでしょうか?
340nobodyさん:2006/05/28(日) 03:30:30 ID:???
>>339
単にindex.phpにアクセスできてないだけじゃないの?
DirectoryIndexの設定はどーなってんのよ
341nobodyさん:2006/05/28(日) 03:34:34 ID:???
>>339
スレ違い
というか、 http://〜/ にアクセスした場合にindex.phpが処理されてるか見れ
処理されてればこのスレでOK
処理されてなければWebサーバ(Apache)の管轄
342nobodyさん:2006/05/28(日) 03:44:34 ID:zxjIhcD+
PHPでメールが送れません。

<?php
mail(
343↑ちゃんと書いたのに途中で途切れましたね。:2006/05/28(日) 03:45:19 ID:zxjIhcD+
名前:
E-mail:
内容:
PHPでメールが送れません。

<?php
mail ("******@hotmail.co.jp","test","てすと");
?>

という文を実行させると

Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing in

というエラーが返ってきます。

php.iniの設定は

[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25

; For Win32 only.
;sendmail_from = [email protected]

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

です。
Apacheで実行しているのですけど、どうすればよいのでしょうか?
344339:2006/05/28(日) 03:46:11 ID:???
/ で index.php にアクセスはできてます。
書き忘れましたがサーバーはxrea(apache1.3.34 php4.4.2)です。
345339:2006/05/28(日) 04:02:35 ID:???
失礼しました。
xreaの広告関係の mod_rewrite が原因のようでした。

LayoutIgnoreURI /index.php
としてやると、"/" でも "/index.php" でも期待通りの動作をしました。
346nobodyさん:2006/05/28(日) 04:02:53 ID:???
>>343
1.マニュアルの下のほう「additional_headers(オプション)」の部分をよく読む
2.設定ファイルでは「;」があるとコメントとみなされる


347nobodyさん:2006/05/28(日) 05:10:21 ID:???
>>343
匿名でメールなんてすんなよ、ってことさ
348nobodyさん:2006/05/28(日) 11:13:54 ID:zxjIhcD+
>>346-347
mail(
349nobodyさん:2006/05/28(日) 11:14:42 ID:zxjIhcD+
>>346-347
mail ("[email protected]", "the subject", "内容","From:");

にして、

; For Win32 only.
sendmail_from = [email protected]

のように、;をはずしました。
すると、
Warning: mail (): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in

とエラーが返ってきました。
もうダメポです。
教えてください。
350349:2006/05/28(日) 11:34:05 ID:zxjIhcD+
phpinfoでsendmail_fromの部分を見たところ
no valueとなっているのですけど、これは何か関係ありますか?
351nobodyさん:2006/05/28(日) 11:38:04 ID:???
>>349
メールの送信自体はSMTPサーバが行い、PHPはSMTPサーバに送ってと命令を送るだけ。
SMTP=localhostになっているので、そのコンピュータにSMTPサーバを入れないと送信できないよ。

もしどこかのプロバイダに契約してるなら、そこのSMTPサーバ指定して送れると思う。
ただ最近はセキュリティが厳しいので、sendmail_fromをプロバイダから渡されたメールアドレスにする、
直前に受信するとかしないと送れないことが多いよ。
352nobodyさん:2006/05/28(日) 11:40:01 ID:???
>>349
>>343によるとキミんちの設定では
SMTP = localhost
smtp_port = 25
自分のパソコンにSMTPサーバーがインストールされていることになってが
実際にはそんなものはないので送信できないよ、と文句言われてる。
掲示板上で手順を1から説明するのは厳しいので「Windows PHP メール送信」辺りでググるといいかと。
>>350
[email protected]」なんて設定にしたことないのでよく分からん。
一目見りゃわかると思うんだがこれはサンプルのメアドであって、そんなの設定しちゃいかんよ。
353nobodyさん:2006/05/28(日) 12:59:33 ID:???
354nobodyさん:2006/05/28(日) 17:54:01 ID:???
$_GET[url] に格納される

くだらねぇ質問
%E3%81%8F%E3%81%A0%E3%82%89%E3%81%AD%E3%81%87%E8%B3%AA%E5%95%8F
%A4%AF%A4%C0%A4%E9%A4%CD%A4%A7%BC%C1%CC%E4

エンコードされていない物 エンコードされていても文字コードが違うもの

これらを内部で一定にして扱う為にはどのようにしたら良いのでしょうか?
355nobodyさん:2006/05/28(日) 17:56:25 ID:???
おまいら親切だな
エラーメッセージ読め、で済みそうなもんなのに
(実際エラーメッセージに書いてあるし)
英語とはいえ中卒レベルで読めると思うんだが
356nobodyさん:2006/05/28(日) 18:00:51 ID:???
直接PHPに関わることじゃないんですが、
配布してるPHPで書かれたプログラムを、改造して利用するのはまずいですか?
利用と言うのは個人で利用するだけで、再配布するって意味じゃありません。
配布元にはその辺に関して何も書いてませんでした。
一般的にどうなのか教えてもらえると嬉しいです。
357nobodyさん:2006/05/28(日) 18:08:00 ID:???
>>354
mb_convert_encoding()
rawurlencode()

>>355
あ、英語が義務教育になったのはいつからじゃ?

you is a big fool man.
こう?
358nobodyさん:2006/05/28(日) 18:21:30 ID:???
>>354
入ってくる文字、出力する文字それぞれの文字エンコーディングを常に意識してスクリプトを書いていれば悩む必要は無いんでは?
全部mbstring.internal_encoding更にはmbstring.script_encodingに合わせておけばいいっしょ。

>>356
その人に聞くしかあるめえ
359nobodyさん:2006/05/28(日) 18:28:47 ID:???
>>357
知っていてしかるべき(と世間一般では思われている)
知識レベルって意味だろ。

義務で教育されても出来ないやつは出来ないんだし。
ただ「英語だと類推して英語の辞書を引く」のは
360nobodyさん:2006/05/28(日) 18:38:52 ID:???
そうだな。無料で辞書はたくさんあるわけだし。
361nobodyさん:2006/05/28(日) 18:41:21 ID:???
レンタルサーバー(共有Linux鯖)で、セッションで認証を維持するページを作ろうと思います。
session.save_pathをデフォルトの./tmpから、/home/hogehoge.com/public_html/ses_dir
に変更したのですが、このディレクトリでは自動でガベージコレクションってされないですよね?
ログアウト処理せずにブラウザ閉じるとセッション情報のファイルが値を保持したまま残りっぱなし…

ガベージコレクションに類似したスクリプトを自動実行するような対策をするしかないですか?
362nobodyさん:2006/05/28(日) 18:58:06 ID:???
コールバック関数を登録してデータベース使うのが一番楽なんじゃない?
363361:2006/05/28(日) 19:03:38 ID:???
申し訳ない自己レスです。GCちゃんとされるみたいですね。
セッション保持を短く・GC確率を100パーセントにするよう.htaccessに
php_value session.gc_maxlifetime "60" と php_value session.gc_probability "100"
として別々のブラウザでアクセス繰り返したら、
60秒なにもしなかったセッションのファイルが消えるの確認できました。

http://php.morva.net/manual/ja/ref.session.php には
「session.save_pathのパスの深さが2より大きい場合、ガーベッジコレクションは行われません」
ってあったのでできないと思いこんでましたが…これはどういう意味なんだろう…

板汚し失礼しました。もう少し試験を繰り返してみます。
364nobodyさん:2006/05/28(日) 19:25:56 ID:???
MAC OS X 10.4で、PHPをPHP5.1.4にアップしたところ、
コードが正常に記述されていればちゃんと動くものの、
エラーがある場合にエラーメッセージを返さず、白紙状態に
なってしまいました。
いくつかのソースを書いてみたものの、結果は同じでした。

この状況について御存知の方、いらしたらお知恵を貸してくださいませんか。
なお、PHP5はentropy-phpのインストーラでインストールしました。
365nobodyさん:2006/05/28(日) 19:27:54 ID:???
>>363
日本語の方にはあるけど
ttp://www.php.net/manual/ja/ref.session.php
英語の方には書いてないね。
ttp://www.php.net/manual/en/ref.session.php

CVSで見ると英語の方はRevision 1.13 (Wed May 14 14:19:03 2003 UTC (3 years ago))で修正されてるから、
ずっと翻訳されないままなんだろうね。

>>364
この辺りを自分の希望通りに設定しておいで。
ttp://www.php.net/manual/ja/ref.errorfunc.php
366nobodyさん:2006/05/28(日) 19:43:53 ID:???
>>356
一般的な基準、だと再配布なしなら、
軽度改造は特に問題なし、
かなり派手に改造を加える場合は著作権表示の横に改造した旨を併記、
ってくらいじゃないかと思う。
(大幅に改造したのが他所で動いてるとたまに本家に質問が飛んできて困るのよね)
全然気にしない人も多いから聞いてみた方がいいと思うけどね。
367364:2006/05/28(日) 20:36:00 ID:???
>>365
ありがとう。おかげで解決したです。
では、勉強に戻りますノシ
368nobodyさん:2006/05/28(日) 21:55:07 ID:???
>>366
法律って知ってるか?
369nobodyさん:2006/05/28(日) 21:57:15 ID:???
>>368
知ってるよ
370nobodyさん:2006/05/28(日) 22:11:08 ID:???
「一般」つうのは適用される場所や捉える人によって変わってくるからな。

他人の著作物を許諾を得ずにうpる人は、
一般的に良い人と見なされ神。
371nobodyさん:2006/05/28(日) 22:24:13 ID:???
ていうかそういう質問は安易に答えない方が良いぞ。
>>356みたいにスレ違いなことを平気でしてくるんだから
あとで問題が起こったら>>366のせいだとか言われるかもしれないぞ。

まぁ俺なら間違いなく配布元に聞けとしか言わないけど。
他人のファイルをどうして俺たちが判断できようか。
372nobodyさん:2006/05/28(日) 22:41:29 ID:???
フリーソフトとして配布してるなら作者本人に聞いても
多くは>>366みたいな回答が返ってくることが多いな。
神経質な人ならちゃんと明記するかライセンス形態を書いてるだろうし。

ただ>>356が根本的に無知で空気も読めないバカなだけに
そういうやつに安易に答えるもんじゃない、って意見も分かる。
そういうやつだと作者が暗に要求してるような事柄も
「明記されてないから分かりません」とか言って無視しそう。
373nobodyさん:2006/05/28(日) 22:46:50 ID:???
著作物の権利についての議論は板違い
374nobodyさん:2006/05/29(月) 00:12:39 ID:???
改造して使うのが普通だと思ってた・・・
375nobodyさん:2006/05/29(月) 00:16:07 ID:VLMle6lT
教えてください。
DOSプロンプトからphpを実行して、そこで日本語を表示しようとすると文字化けします。

<?php print('2ch'); ?>

どっかでキャッシュ→自動変換されているんだろうと思ってmb_convert_encodingやら、
ob_start();を筆頭に書いてキャッシュしないようにやってみましたが変化がありません。
なぜ化けるのか教えてください。

PHP 5.0.3、winxp、文字コードはsjisで書いてます。
376nobodyさん:2006/05/29(月) 00:40:06 ID:???
>>375
php.inの設定でoutputの文字コードがUTF-8かEUC-JPになってるんじゃない?
377375:2006/05/29(月) 01:07:44 ID:???
mbstring.http_outputのことでいいですか?
eucになってたんで = SJISに変更しましたが一切変化なし…。
378nobodyさん:2006/05/29(月) 01:24:31 ID:???
internal_encodingはどうなってるんだよ
379375:2006/05/29(月) 01:39:26 ID:???
internal_encodingもSJISにしたらうまくいきますた!
んが、今度はeucで書いたapache通して使うほうが文字化けしたんで、
両方コメントアウトしたら成功しますた。

…今後どこに影響でるんだかやや心配ですがありがとうございますた!
380nobodyさん:2006/05/29(月) 02:32:02 ID:???
>>375
・プロンプトで「type そのスクリプト」してSJISなのを確認する。
・そのPHPがenable-zend-multibyteでコンパイルされていることを確認。
(Windowsなら廣川さんがビルドしてるのを使うのが手っ取り早い)
・output_handlerに出力ハンドラは何も指定せずに、output_buffering = Off
・mbstring.language = Japanese、mbstring.encoding_translation = Off
・mbstring.internal_encoding = SJIS、mbstring.script_encoding = SJIS
(全てSJISなんだから、余計な自動変換の設定はいらない。)
381nobodyさん:2006/05/29(月) 03:21:03 ID:???
>>380
>>379によるとeucで描いてるスクリプトも別にあるそうだぞ
382nobodyさん:2006/05/29(月) 03:48:31 ID:???
>>381
他に
・UTF-8で格納してあるSQLite
・バイナリをアップロードするform
・EUC-KRなRSS
とかありそうなんで、ざっくり割愛。
383nobodyさん:2006/05/29(月) 09:25:36 ID:???
PDO 使ってんだけど、SQLの文法は正しいのに
prepareすると、エラーを返さずページリダイレクトされるのは
なんで?
384nobodyさん:2006/05/29(月) 09:38:55 ID:???
>>383
とりあえずコードを晒しなさいな。それだけじゃわかんないよ。
385nobodyさん:2006/05/29(月) 14:28:37 ID:???
こんにちゎ。
PHPは4の初期頃までしかやっていなく、今は5になってかなりかわったみたいですね。
フォームからの投稿データは、

$name = $_POST["name"];

とかってやってていいんでしょうヵ?
386nobodyさん:2006/05/29(月) 15:28:00 ID:???
キモイので答えることができません。お帰り下さい
387nobodyさん:2006/05/29(月) 15:32:38 ID:???
あなたのほうがキモいです。
388nobodyさん:2006/05/29(月) 16:08:29 ID:???
function speed_return( $res387 )
{
return ">>" .$res387. "<br>\nそれはありえません。鏡を見てから言ってください。";
}
389nobodyさん:2006/05/29(月) 16:31:20 ID:???
$res387 とはセンスないよね。
$res[387]とかのほうがいいよ。
配列は覚えた方がいいからね。
390nobodyさん:2006/05/29(月) 17:03:53 ID:???
しかも関数内の暫定的な変数に $res387だって頭わるそー
そういうときには番号つけずに、
$res とだけやるのが普通だよ。ばっかじゃないの?
391nobodyさん:2006/05/29(月) 17:05:18 ID:8hg7YXeL
2chで最近評判が悪いレッツPHPにあるスクリプトに
ファイルの書き込み処理として

$fp = fopen($logfile,"a");
set_file_buffer($fp, 0);
flock($fp, LOCK_EX);
fputs($fp, $data);
fclose($fp);

とあるのですが、これは一般的に見て安全な書き込み方法なのでしょうか?
ちなみにこれはアクセス解析のlog.phpの最後の部分です。

読み込み処理は file("〜") とするだけでロックなどしなくても大丈夫でしょうか?

宜しくお願いします。
392nobodyさん:2006/05/29(月) 17:25:23 ID:???
>>391
単にログを追加していくだけのスクリプトなら安全。
393nobodyさん:2006/05/29(月) 17:32:05 ID:???
レンタルサーバ(エックスサーバー)でPHP(4.4.1)を使ってるんですけど、
テキストエリアのテキストをフォームでPHPモジュールに送信して
それをプレビューとしてHTMLとして出力すると10%くらいの確率で文字化けしてしまいます。
文字化けしてる時はSJISで出力されてしまってるみたいです。
プログラムは全てEUC−JPで作成してます。

本を参考にして
送信先のプログラムの先頭でmb_http_output('EUC-JP');としてみましたがダメでした。
そのすぐ後にob_start('mb_output_handler');も追加してみましたが文字化けが酷くなりました・・

・。

たぶん、レンタルサーバを使ってる他の人がSJISを使うように設定を変更してその影響を受けると推

測したんですが、 対処の仕方がわかりません。
原因とか対策が分かる方、よろしくお願いします。
394390:2006/05/29(月) 17:37:10 ID:8hg7YXeL
>>392
逆に聞きますと、どういうスクリプトで使用すると危険なのでしょうか?
このファイルの入出力の部分を流用とかはあまりしない方がいいのでしょうか・・。
395nobodyさん:2006/05/29(月) 17:40:38 ID:???
>>393
METAタグの文字コード指定か、出力前に

header("Content-Type: text/html charset=euc-jp");

としてみてはどうでしょうか
396nobodyさん:2006/05/29(月) 17:41:37 ID:???
>>394
ログファイルを一旦全部クリアして書き直すような
(特定のレコードの削除や、行頭へのレコード追加等)
処理の場合には、きちんとしたロック制御をしないとまずいです。
397nobodyさん:2006/05/29(月) 17:45:47 ID:???
具体的には、処理全体を関係ないロック専用のファイルに flockして囲うか、

ログ読み込み時は fopen を r+ で開き次の行で flock をLOCK_EXでかけて、その後データを読み込み、
その読み込んだデータなどに基づき、書き込みデータを作成して、
ftruncateでファイルサイズを0にし、rewindで先頭に戻し、
fputsで書き込む。

このように、(読み込み→書き込み)までの一連が排他制御されてないといけません。
398nobodyさん:2006/05/29(月) 17:50:51 ID:???
>>395
レスありがとうございます。

メタタグの指定はやってるんですけど、ブラウザの文字コード解釈ではなくて、
PHPが生成して返してくるHTML自体の文字コードが
全く同じリクエストを投げてもEUCだったりSJISだったりするんです。
なのでSJISで出力されると文字化けするんです。
たぶんPHPの方で勝手にEUCの文字列をSJISに変換して返してるんだと思うんですけど、
これを必ずEUCで出力するようにしたいんです。
これはレンタルサーバの仕様でしょうがないんでしょうか?
399nobodyさん:2006/05/29(月) 17:59:14 ID:???
>>398
昔の古いテクニックで、
フォーム投稿データに hiddenで特定の漢字を入れるのと、
出力するhtml文に、コメントで特定の漢字を入れる、ってのがあったけどそれはどうかな?
400nobodyさん:2006/05/29(月) 18:02:20 ID:???
>>399
それを調べて試してみます。
ありがとうございました。
401軟式PHP:2006/05/29(月) 18:07:44 ID:???
>>391
>2chで最近評判が悪いレッツPHPにあるスクリプトに
ウケタ。そんな噂があるのか。
まぁ、あそこに置いてあったスクリプトで、ファイル処理で
$fp = fopen("aaa.txt","w");
flock( $fp, LOCK_EX );
っていうのがあったのがウケた。意味ないじゃーん。
402nobodyさん:2006/05/29(月) 18:11:28 ID:???
>>401
CGI-Perl or PHP初心者にありがちな罠だよね^^;
403nobodyさん:2006/05/29(月) 18:23:50 ID:???
>>399
美乳 か
404390:2006/05/29(月) 18:40:04 ID:???
>>396-397
ありがとうございます!
例えば掲示板などのスクリプトでログの一部を変更して書き込むなどの時は

$data = "";
$fp = fopen($logfile,"r+");
if ($fp) {
  flock($fp, LOCK_EX);
  while (!feof($fp)) {
    $buffer = fgets($fp, 4096);
    $data .= $buffer;  // 書き込みデータを作成
  }
  ftruncate($fp, '0');  // ファイルサイズを0
  rewind($fp);      // 先頭に戻す
  fputs($fp, $data);
  fclose($fp);
  flock($fp, LOCK_UN); // ロックを解放する
}

書き込みデータ作成処理は何もしていませんが、こんな感じでしょうか?

ログを表示するだけの時にも file(〜) よりも fopen +共有ロックを使用した方が
安全という認識で良いでしょうか?
マニュアル見ると色々とファイルの入出力の方法があるのですが、「これこそが王道」みたいな
ものを見定めるだけの能力がないので・・・('A`)
405390:2006/05/29(月) 18:41:21 ID:???
あっ

  flock($fp, LOCK_UN); // ロックを解放する
  fclose($fp);

でした。閉じた後に$fp使っても意味が無いですよね
406nobodyさん:2006/05/29(月) 18:54:16 ID:???
>>404
私的にはそれでばっちり。
念を入れるなら flockの返り値などもチェックするにこしたことはないけど、
それで充分だとおもいまふ。

file()関数も便利だけど、
flock()がかかっている最中のファイルに対する挙動とかっていまいち不明なので、全体処理ロックの中でしか使わない。
407nobodyさん:2006/05/29(月) 19:21:06 ID:???
関連質問。
flockで排他されている方は、処理が終わるまでジッと待っていてくれるもんでしょうか。
408nobodyさん:2006/05/29(月) 19:46:30 ID:???
>>405
その前に名前390ってのは合ってるのか?
専ブラ使ってるとポップアップでレス抽出できるから、その辺も気を付けてくれ
409nobodyさん:2006/05/29(月) 20:28:32 ID:???
>>407
flock中にsleepで10〜20秒眠って、
その間に別ブラウザでアクセスしてみたらどうだ?
410nobodyさん:2006/05/29(月) 20:33:08 ID:Bdw+FLsC
Web上でPHPのエラーが出てしまうのを防ぐようにするには
どのような設定が必要ですか?
Apacheの設定でしょうか?
411nobodyさん:2006/05/29(月) 20:47:50 ID:???
>>410
error_reporting(0)でエラー出力をなくせるが、
これに頼らずエラーの出ないスクリプトを書いてくれ。
412nobodyさん:2006/05/29(月) 20:50:34 ID:???
>>410
display_errorsをOffにして、log_errorsをOnにする。
でもってerror_logにエラーログを記録するファイルを絶対パスで記述するのがオススメ。
まかり間違ってもerror_reportingを0にしてエラー自体を出さないようにすることは止めた方がいい。
413nobodyさん:2006/05/29(月) 20:51:07 ID:???
>>410
<?php
error_reporting(0);
function manual_yomeyo($str) { return 'manual yomeyo '.$str; }
echo manual_yomeya('boke');
?>
もしくは
<?php
function manual_yomeyo($str) { return 'manual yomeyo '.$str; }
echo @manual_yomeya('boke');
?>
414nobodyさん:2006/05/29(月) 20:59:48 ID:???
というわけで>>411が最も正論だな。
頼むからWarningレベルの警告が出るようなスクリプトは書かんでくれ
415nobodyさん:2006/05/29(月) 21:48:04 ID:IjgGbccK
メール送信のフォーム作って
テストメール送信したんだが、
受信メールが文字化け↓

?\?????C?x???g???o?^???????????B
-------------------------------------------------
?J?????F2006/06/23
-------------------------------------------------
test2?e?X?g
-------------------------------------------------
?Q???E?s?Q?????o?^?????L?t?q?k?????¨???¢???????B

ソースの一部↓
function _mailSend($_mode,$_date,$_name,$_detail,$_email,$_keitai){
// ヘッダ作成
$headers =
416415:2006/05/29(月) 21:50:05 ID:IjgGbccK
// ヘッダ作成
$headers = "";
$headers .= "Content-Type: text/plain; charset=ISO-2022-JP\n";
$headers .= "Content-Transfer-Encoding: 7bit";
サーバApacheのデフォルトcharsetはnone、shift_jisどちらも試したが×
どこかの設定で文字コードが合わないのかもしれない。
わかる人いませんか?
417nobodyさん:2006/05/29(月) 21:53:51 ID:???
>>416
none っておいおい。
AddDefaultCharset none は完全に間違っている。
AddDefaultCharset off が正しい。
418nobodyさん:2006/05/29(月) 21:54:14 ID:???
文字列を指定すると、特定のフォルダ以下に含まれる全てのファイルの内容を走査し
その文字列が含まれるファイル名をリストアップする、
という感じの検索システムを作ろうと思っています。

そこで質問なのですが、
ディレクトリ関数やファイル関数を使ってひとつひとつ内容を調べていこうと思ってるんですけど
これはサーバーに対してかなり負荷をかけてしまうものなのでしょうか?
レンタルサーバーを借りて使っているので気になります。
419415:2006/05/29(月) 21:55:03 ID:IjgGbccK
>>417
返答どもです。
offで文字化け回避できますか?
今試してみます。
420nobodyさん:2006/05/29(月) 21:57:03 ID:???
>>354 です

いろいろ試しましたがうまくいきませんでした

formからのリクエストに対してはある程度対応できますが ブラウザからの直接のGET参照がうまくいきません

ブラウザによってアクセス方法がまちまちで

?u=くだらねぇ質問
?u=%E3%81%8F%E3%81%A0%E3%82%89%E3%81%AD%E3%81%87%E8%B3%AA%E5%95%8F
?u=%A4%AF%A4%C0%A4%E9%A4%CD%A4%A7%BC%C1%CC%E4

とアクセスしたきた場合の処理でつまづいています。
421415:2006/05/29(月) 21:59:42 ID:IjgGbccK
>>417
ダメでした。
ほかに文字化け原因箇所ってありますか?
ぐぐって見ましたが、書いてませんでした。
422415:2006/05/29(月) 22:03:37 ID:IjgGbccK
受信メール文字化けでこまってます。
function _mailSend($_mode,$_date,$_name,$_detail,$_email,$_keitai){
// ヘッダ作成
$headers = "";
$headers .= "Content-Type: text/plain; charset=ISO-2022-JP\n";
$headers .= "Content-Transfer-Encoding: 7bit";
文字化けでこのソースが間違っているわけではないと思うの
ですが。どこかの設定(confファイル)が原因でなっている
と推測ですが。。考えられる原因箇所お願いします。
423nobodyさん:2006/05/29(月) 22:23:51 ID:???
>>415
<?php
function mail_encode($str, $mime_encode = false) {
  $str = mb_convert_encoding($str, 'ISO-2022-JP', 'auto');
  if ($mime_encode)
    $str = mb_encode_mimeheader($str, 'ISO-2022-JP', 'auto');
  return $str;
}

function mail_send($to_name, $to_addr, $from_name, $from_addr, $subject, $message) {
  $to_name = mail_encode($to_name, true);
  $from_name = mail_encode($from_name, true);
  $subject = mail_encode($subject, true);
  $message = mail_encode($message);
  $headers = "MIME-Version: 1.0\r\n"
    ."Content-type: text/plain; charset=ISO-2022-JP\r\n"
    ."Content-Transfer-Encoding: 7bit\r\n"
    ."From: {$to_name} <{$to_addr}>\r\n"
    ."Reply-To: {$from_name} <{$from_addr}>\r\n";
  return mail($to_addr, $subject, $message, $headers);
}
mail_send('ボケ', '[email protected]', '俺', '[email protected]', 'ボケへ', 'マニュアル・RFCくらい嫁やボケ');
?>
424nobodyさん:2006/05/29(月) 22:36:18 ID:???
>>420

>>357がほとんど正解を教えてくれてるのに、お前はほんとに試したのか?
マニュアル読まない、ヒントもらっても試さず動かないと言う。
どうしようもない奴だな。

$a = array(
  'くだらねぇ質問',
  '%E3%81%8F%E3%81%A0%E3%82%89%E3%81%AD%E3%81%87%E8%B3%AA%E5%95%8F',
  '%A4%AF%A4%C0%A4%E9%A4%CD%A4%A7%BC%C1%CC%E4',
  );
foreach ($a as $u) {
  echo mb_convert_encoding(urldecode($u), 'utf-8', 'auto').'<br />';
}
425nobodyさん:2006/05/29(月) 22:49:24 ID:???
>>406
前々から思っているんだが、fcloseの前にflockで明示的にロックを解除してんのに
その前でfflushを使っているスクリプトを(あるかも知れんが)見たことが無い。
実際、fcloseの前にflock/fflushは不要で、単にfcloseのみをすれば暗黙的に
fflush→flock→fcloseの順で処理してくれるハズなのでうまく行くハズなんだが、
先に明示的にロックを解除すると、flock→fflush→fcloseの順で処理されて
まずいような気がするんだが。

>>422
mailSend()の中の処理を推測して回答しろ、と?
426nobodyさん:2006/05/29(月) 23:22:11 ID:???
>>422
まずinternal_encodingとhttp_inputの値ぐらい出せんか。
そして素直にmb_send_mail関数使え。
427nobodyさん:2006/05/29(月) 23:38:15 ID:???
>>424
説明が足りませんでした

?u= に入った値に fopen で接続を試みます。

428nobodyさん:2006/05/29(月) 23:39:45 ID:vMvjotbL
質問があります。
とあるキーワードを変数$keyに入れたいのです。

私が$keyに入れたいキーワードは
「パソコン 激安 販売」の「パソコン」部分だけです。

「メガネ 高値 販売」の「メガネ」部分だけです。

「パソコン 激安 販売」には
計2つの半角スペースが入っているのですが
1つめの半角スペースから左の部分を$keyに入れる 見たいな事をコード化することは可能なのでしょうか?
429nobodyさん:2006/05/29(月) 23:44:37 ID:???
可能です。strpos substr
430nobodyさん:2006/05/29(月) 23:45:03 ID:???
list($key) = expload(' ', 対象文字列);
431nobodyさん:2006/05/30(火) 00:02:58 ID:???
display_errorsがonなのに、エラーが画面に表示されず、真っ白のままです。
でもログにはエラーがきちんと記録されています。

どうして画面にエラーが出力されないのでしょうか・・・?
display_errors以外にチェックすべきポイントはありますでしょうか。
432391:2006/05/30(火) 00:12:56 ID:???
>>401
extract を利用したスクリプトが多いのが原因だと思います。
たしか前スレあたりでその話が出てたと思います。

>>408
ま、間違えていました・・・>>391でした(汗

>>406
ありがとうございました。とても勉強になりました。

>>425
という事は>>391

$data =
433nobodyさん:2006/05/30(火) 00:13:08 ID:???
>>418
find & grepか。
ディスクアクセスが必要な処理だから、相応に負荷はあるけど
そういったベタなやり方は禁じ手という訳でもない。
常用するならもちっと工夫するなりDB活用するなりしろといった感じ。

ファイルが多くて容量も大きければ、(Web経由なら)ブラウザのタイムアウトへの工夫とか、
PHPのタイムアウト、無限ループのプロセスと見なされないよう管理者との相談や
別サービスへの移行勧告とか出てくるかもね。
434nobodyさん:2006/05/30(火) 00:13:48 ID:???
>>427
説明が足りない、お前の頭と同じくらい足りない。
質問するなら、何をどうしたいのか的確に書けよ、ボケナス。
で、allow_url_fopenはOnになってるんだろうな?
435nobodyさん:2006/05/30(火) 00:19:20 ID:???
>>427
Path Traversal作るなよ
どうでもいいが多バイト文字でfopenかますという設計に疑問を抱かざるを得ない
436nobodyさん:2006/05/30(火) 00:28:34 ID:pEJEKC/o
なるほど、えと もう既に $keyに文字列が入っている場合 それから
1つめの半角スペースから左の部分を削った上で再度$keyに入れるみたいな感じでやってみたのですが今一わかりません。
<?php
〜略
$key = $afafa[1]; //既にここで$keyにキーワードが入っている
$key = expload(' ',"$key"); //ここで1つめの半角スペースから左の部分を削った上で再度$keyに入れる
echo $key; //ここで削ったキーワードを表示
?>

こんな感じでやりたいのです。
437nobodyさん:2006/05/30(火) 00:38:41 ID:???
>>436
$keyには1つの値しか入らん。
従って$keyに削った後の文字列とキーワードを同時に入れることは不可能。

あと変数だけをダブルクォーテーションで括るのは気持ち悪いから止めた方がいい


$key = expload(' ', $key);
echo array_shift($key);

$key = join(' ', $key);
438437:2006/05/30(火) 00:42:23 ID:???
上のコードは$keyを配列にして先頭要素を除去、再び文字列に〜というあまり気持ちよくないコード(見れば分かるか)

expload→explode
joinよりimplodeの方がいいな、どう考えても
439nobodyさん:2006/05/30(火) 00:46:29 ID:pEJEKC/o
ご丁寧に有難う御座います、早速やってみます。
440nobodyさん:2006/05/30(火) 00:48:16 ID:pEJEKC/o
1つめの半角スペースから左の部分を削った上で再度$keyに入れる 訂正です。。

右の部分でした。すいません。やってみます。
441nobodyさん:2006/05/30(火) 01:06:50 ID:???
>>425
そういえばどっかでみたような気がする。
>flock解除を明言するなら、フラッシュしてから。
Perlの青らくだだったかな
442nobodyさん:2006/05/30(火) 01:07:04 ID:???
hogehoge
443nobodyさん:2006/05/30(火) 01:20:25 ID:pEJEKC/o
>>437
できました〜!えとarray_shiftでやはり最初以外の右部分が挿入されていました。
類似関数を調べたところ
array_pop辺りしかないようですね。削る関数は。
一応これで満足です!ご丁寧にありがとうございました。色々関数があって面白いですね。
444nobodyさん:2006/05/30(火) 01:34:35 ID:???
確かにPHPって関数多いよな〜
445nobodyさん:2006/05/30(火) 02:05:29 ID:???
うん
1000個もある
446nobodyさん:2006/05/30(火) 02:18:09 ID:KRBUwnPN
質問です。
どこで質問すればいいか全くわからないので、スレ違いなら誘導願います。

HTMLのIFRAMEを使ったプログラムを書いているのですが、
IE6でのみクッキーが取れなくて困っています(FirefoxとOperaでは取れました)。
以下がそのソースコードです。

http://a.com/cookie_get.php
---------------
<?php
setcookie('t',$_SERVER['HTTP_HOST'],time()+1000);
echo 'cookie:'.$_COOKIE['t'];
?>
---------------

http://b.com/test.html
---------------
<iframe src=
447nobodyさん:2006/05/30(火) 02:18:49 ID:KRBUwnPN
http://b.com/test.html
---------------
<iframe src="http://a.com/cookie_get.php"></iframe>
---------------

ブラウザ(IE6)で、
http://a.com/cookie_get.php にアクセスすると、意図通りに
「cookie:a.com」と表示されますが、
http://b.com/test.html にアクセスすると、IFRAMEの中には
「cookie:」とのみ表示されます。クッキーは取得できません。

重ねて書きますが、FirefoxとOperaでは問題なく取得できています。
IEのセキュリティが厳しいのかもしれませんが、
IEでIFRAMEの中からクッキーを取得できる方法があるのでしょうか?
448nobodyさん:2006/05/30(火) 03:32:38 ID:???
>>447
IEのインターネットオプション>セキュリティ>信頼済みサイト>サイト>次のwebサイトを・・・
にa.comを追加してみる
449nobodyさん:2006/05/30(火) 04:19:00 ID:???
>>448
レスありがとう。
その方法でうまく行くだろうことはわかりますが、
サイトを見てくれる第三者にそれを要求することは出来ないので、
別の解決策をどうかよろしくお願いします。
450nobodyさん:2006/05/30(火) 04:24:51 ID:???
まずそんなフィッシングサイトみたいな構成を見直すところからかな?
451nobodyさん:2006/05/30(火) 07:01:27 ID:???
>>446
> HTMLのIFRAMEを使ったプログラムを書いているのですが、
iframeだけなら問題ないと思うが、iframeの中で別ドメインのページを呼ぶのは
セキュリティ的に問題があるので正常な動作を期待しない方がいい
452nobodyさん:2006/05/30(火) 07:15:36 ID:???
PHPでGDライブラリを導入したいのですがやりかたがわかりません
手助けしていただけるとありがたいです

今、GD2.0.33をダウンロードしたところですがここからどうすればいいのでしょうか??
453452:2006/05/30(火) 07:18:30 ID:???
PHPのヴァージョンは5.1.4です
お願いします
454nobodyさん:2006/05/30(火) 07:30:14 ID:???
>>452
ぐぐったらいくらでもでてくるけど
何やって何がだめなのさ?
455452:2006/05/30(火) 07:34:32 ID:???
>>454
PHP グラフィック ライブラ
PHP GD
PHPGD 導入
等でググってみたのですが、古い情報ばかりで…
今、GDライブラをダウンロードしたところでこれをどうすればいいのかさっぱりな状況です
456nobodyさん:2006/05/30(火) 07:39:56 ID:t5k6Siqf
>>436
お前>>430見たのか
list($key) = explode(' ', $key);

expload('A`)
457nobodyさん:2006/05/30(火) 07:43:07 ID:???
>>452
OSは?
458nobodyさん:2006/05/30(火) 07:44:09 ID:???
>>455
PHP5 GD2
で検索すると例えばこんなのが出てくる
ttp://bbs.fedora.jp/read.php?FID=8&TID=2864
459452:2006/05/30(火) 07:48:23 ID:???
>>457
WinXPです

>>458
それをどこに追加すればいいのかがわからないです
もう少しググってみます(TдT)
460nobodyさん:2006/05/30(火) 08:13:13 ID:???
>>459
>>458のはLinux用のインストール方法でWindowsでは使えない。
だからインストール関係なら最初からOSとか書いてなきゃダメなんだっつの。
Windows用ならさっきと同じ検索の中に
ttp://homepage1.nifty.com/yito/anhttpd/faq/php5.html
とか
ttp://www.dentuku.com/modules/tinycontent4/index.php?id=7
とか、色々引っかかる。
461nobodyさん:2006/05/30(火) 09:04:49 ID:???
>>451

> iframeだけなら問題ないと思うが、iframeの中で別ドメインのページを呼ぶのは
> セキュリティ的に問題があるので正常な動作を期待しない方がいい

はい、同じドメインでは問題ありませんでした。
とりあえず現状ではIEのみ非対応ということにせざるを得ないですね。
462nobodyさん:2006/05/30(火) 09:47:17 ID:???
すみません、質問させてください。
php4.3.10でセッションを使ったログイン処理をやっています。
「session.cookie_lifetime」がデフォルトの「0」のままなのですが、
「ブラウザを閉じるまで」セッションが有効になりません。

だいたい1時間くらいで勝手にセッションが切れてログアウトしてしまいます。
どうしてなのでしょうか??
463nobodyさん:2006/05/30(火) 10:03:41 ID:???
strlen("漢字");

は4と返ってきますが、これで2と返るようなのはありませんか?
464nobodyさん:2006/05/30(火) 10:06:36 ID:???
mb_strlen
465nobodyさん:2006/05/30(火) 10:50:47 ID:???
少し気になったことがあるので聞かせてください。
表示するまでにかなり時間のかかるphpファイルがあるのですが、
(内部でサーバローカルの特殊な処理をしていて、10秒ほどかかります)
そのページに複数アクセスが集中したときにコネクションが貼れるのかどうか心配です。

現状では同時に3〜4クライアント程度しかアクセスしてこないため大丈夫ですが、
例えば10秒の間に100〜1000クライアントが同時にアクセスしてきた場合、
Webサーバのコネクションは維持できるのでしょうか?

環境はLinux上でApache1.3.27とPHP4.4.2です。
コネクションの最大数の制限が、カーネルなのかWebサーバなのかPHPなのかわからないので
ご存知の方はそちらも教えていただけると助かります。

よろしくお願いします。
466nobodyさん:2006/05/30(火) 11:05:41 ID:???
>>459
Windowsの場合、ディフォルトでPHPにGDが同封されているので、
php.iniのGDの項目をコメントアウトすれば使えるよ。
467nobodyさん:2006/05/30(火) 11:10:51 ID:???
>>462
session.cookie_lifetimeのディフォルトは1440だと思うが、、、
共有のレンタルサーバで、session.save_pathをディフォのままにしておくと、
他の人に消されることがあるよ。
468nobodyさん:2006/05/30(火) 11:50:53 ID:???
>>467
1440がデフォルトなのは「session.gc_maxlifetime」ですよね?
「session.cookie_lifetime」は「0」がデフォルトです。

ちなみにVPSなので他の人に消されるということはありません。
469nobodyさん:2006/05/30(火) 12:34:25 ID:???
Getメソッドで"蟲"の字が取れないんだけどなんで?
470nobodyさん:2006/05/30(火) 13:22:26 ID:???
>>469
なんて読むの?
471452:2006/05/30(火) 13:25:41 ID:???
>>466
コメントアウトしてアッパッチの再起動
phpinfo()見てみたのですが、やっぱりできてないみたいでデス
(TдT)ウウ〜
神様光臨を待ちます。。。
472nobodyさん:2006/05/30(火) 13:28:15 ID:???
>>470
むし(虫)の古い字かなにか分かんないけど難しい字

>>469
エンティティしても取れない?
473nobodyさん:2006/05/30(火) 13:54:26 ID:D/hvuKGf
>>471
コメントアウトはコメントにしちゃうことなのでコメントを外すとか言う
アッパッチな
まぁ落ち着いてな。焦ると見えるものも見えなくなるもんだ。

phpinfo()で表示されるphp.iniの位置は修正した場所のphp.iniになっている?
Apacheのエラーログを参照して.dllがロードエラーになっていないか確認
エラーがあれば.dllのパスとファイルの存在を確認

一つずつ確認
474nobodyさん:2006/05/30(火) 14:32:47 ID:???
$date1と$date10の変数があったとして、出力した時に$date10の表示が
$date1の表示になります。

おそらく数字の部分が被っているからだと思うのですが、
それぞれ別物だと判断させる関数・方法はないでしょうか?
475nobodyさん:2006/05/30(火) 14:38:03 ID:???
${data10}
476nobodyさん:2006/05/30(火) 14:41:01 ID:???
>>311

AM 4:30
| ̄/|ワー   (^ω^) サッカー楽しいお
|□  | ワー  σ ノ) 
| ̄ ̄ ̄ ̄ ̄|
477nobodyさん:2006/05/30(火) 14:41:47 ID:???
>>474
そもそもそんなのは配列使えと
478nobodyさん:2006/05/30(火) 14:43:11 ID:???
>>474
ていうかこうやてるんだろ?
echo "hogehoge$data10hogehoge";

こうしろ。
echo "hogehoge".$data10."hogehoge";
479474:2006/05/30(火) 14:50:19 ID:???
みなさん、ありがとうございます。
教えていただいたのを試してみます
480nobodyさん:2006/05/30(火) 16:19:18 ID:???
>>433
ありがとうございます。
禁じ手ではないんですね。
検討してみます。
481nobodyさん:2006/05/30(火) 17:07:35 ID:???
正規表現がハローワールド級なんですが、駄目だしをお願い致します。


$table = $_POST['MySQL_Table_Name'];

$pattern = '/[A-Za-z]+/';

if ( !preg_match($pattern,$table) ) { die("error : not is_alpha"); }
482軟式PHP:2006/05/30(火) 17:14:39 ID:???
>>481
/^[A-Za-z]+$/
じゃないと、$tableに"aaaテスト";とかでもTRUEになってしまうんじゃ?
483481:2006/05/30(火) 17:20:11 ID:???
>>482
即レスありがとうございます。修正しました。
$pattern = '/[A-Za-z]+/';

それと if ( !preg_match ) とするより、
正規表現で「英字以外を含む時」にしておいて if ( preg_match ) の方がいいでしょうか?
484481:2006/05/30(火) 17:22:36 ID:???
$pattern = '/^[A-Za-z]+$/'; // しまった、ちゃんとこれに修正しました。
485nobodyさん:2006/05/30(火) 17:40:20 ID:???
>>481
PHPでは正規表現使わない方法を探したら結構見つかるぜ
しかも正規表現使わない方が普通は速い
ctype_alpha($table)
486481:2006/05/30(火) 17:52:51 ID:???
うおお!ctype_alpha() 凄いっす。ありがとうございます
487nobodyさん:2006/05/30(火) 17:54:59 ID:???
ctypeとか大垣リファレンス本の旧版に載ってないから、
ついつい存在を忘れちゃうんだよなぁ・・・。

そろそろ最新のリファレンス買わないとダメかな。
488nobodyさん:2006/05/30(火) 20:58:29 ID:???
色々調べてみたのですが解決方法が見つからないので質問させて下さい。
DebianLinux+Apache2+PHP4という構成なのですが、Permission deniedになってphpの実行が出来ません。
Apacheのログを見ると
>(13)Permission denied: exec of '/home/www/html/info.php' failed
>Premature end of script headers: info.php
といった感じになっています。

info.phpは
<?php phpinfo()?>
な内容です。

php自体の起動は出来ているようなのですが、権限が無いというのが分かりません。
なお、perlスクリプトは問題なく動作します。
(apache2やphp4周りの設定は特におかしな所は無いようです)
489nobodyさん:2006/05/30(火) 21:08:53 ID:pEJEKC/o
urlencode(
490nobodyさん:2006/05/30(火) 21:21:20 ID:pEJEKC/o
urlencode ("オフコース"); 

%83I%83t%83R%81%5B%83X

こんな風に表示したい

%E3%82%AA%E3%83%95%E3%82%B3%E3%83%BC%E3%82%B9


オフコースという文字列を
↓のようにするにはどうすれば良いでしょうか?

%E3%82%AA%E3%83%95%E3%82%B3%E3%83%BC%E3%82%B9
491nobodyさん:2006/05/30(火) 21:28:10 ID:???
>>488
phpがCGIとして動いてたりしない?
492nobodyさん:2006/05/30(火) 21:32:30 ID:???
>>490
urlencode(mb_convert_encoding('オフコース', 'utf-8', 'sjis'))
493nobodyさん:2006/05/30(火) 21:39:17 ID:???
>>491
phpがcgiとして動く、というのがよく分かりませんが
shell上から、# php info.phpを実行する分には正常に動作します。
#./info.phpの場合は
>bash: ./info.php: 許可がありません
と返ってきます。(sudo suにて)
494nobodyさん:2006/05/30(火) 21:51:32 ID:???
$ ls -l info.php
の結果を、ぽん。
495nobodyさん:2006/05/30(火) 21:58:57 ID:???
>>494
755 644 646 の3パターンでやってみましたが、全部同じ結果になります。
-rwxr-xr-x 1 www-data www-data 18 2006-05-30 20:32 info.php
-rw-r--r-- 1 www-data www-data 18 2006-05-30 20:32 info.php
-rw-r--rw- 1 www-data www-data 18 2006-05-30 20:32 info.php
496nobodyさん:2006/05/30(火) 22:06:54 ID:???
解決しました。
AddHandler cgi-scriptから.phpを外してok。
これのせいでDSOではなくCGI動作しようとしていたって事なんでしょうか。
497nobodyさん:2006/05/30(火) 22:08:53 ID:???
>>496
そうだね。
CGIの場合は、1行目に#!/path/to/php、パーミッションを0755で動くよ。
498nobodyさん:2006/05/30(火) 22:10:12 ID:pEJEKC/o
>>492
出来ました。ありがとうございます。最後にお聞きしたいたいことが一つ、、
既に$haefという変数にオフコースという文字列が入っている場合、
urlencode(mb_convert_encoding($haef), 'utf-8', 'sjis')

こんな感じでやりたいのですが。

でやってみたのですがやはりエラーがでました。よろしければ教えていただけませんか?
499nobodyさん:2006/05/30(火) 22:13:46 ID:19Dhj3ir
/home/www/hoge
配下はPHPのエラーがWEB画面に表示されないように

一方、
/home/www/hogetest
配下はPHPのエラーを画面表示するようにするには
どのような設定が必要でしょうか?
500nobodyさん:2006/05/30(火) 22:20:29 ID:???
501nobodyさん:2006/05/30(火) 22:31:56 ID:???
お問い合わせフォームで受け付けたメールアドレスが、実際に
存在するかどうか確認するにはどうすればよろしいでしょうか。
502nobodyさん:2006/05/30(火) 22:34:16 ID:???
>>498
何のエラーか知らんが、その行だけを見てもparse errorが出るはずだな。
503nobodyさん:2006/05/30(火) 22:34:59 ID:???
>>501
蓋を開けるまで猫が生きてるかどうか分からんよ
504nobodyさん:2006/05/30(火) 22:40:35 ID:pEJEKC/o
>>502
そうです、そのエラーが返ってきます。難しいです。
505nobodyさん:2006/05/30(火) 22:44:06 ID:???
>>501
SMTPのVRFYコマンドで問い合わせたら 解るカモ知れない
506nobodyさん:2006/05/30(火) 22:45:26 ID:???
あくまで「かも」レベルな。
507nobodyさん:2006/05/30(火) 23:20:02 ID:???
>>504
その行だけをよ〜く見てみて
スッゴイパラレルワールドだから
508nobodyさん:2006/05/30(火) 23:28:43 ID:pEJEKC/o
パラレルですか?

一応マニュアル見たりして調べたんですが載ってないんですよね。
”;”が無いとかですか?


($haef), 'utf-8', 'sjis') →($haef, 'utf-8', 'sjis') ;

にしてもエラーです。おかしいです。
509nobodyさん:2006/05/30(火) 23:35:22 ID:???
>>508
・urlencode() に渡すべき引数を調べる
・mb_convert_encoding() に渡すべき引数を調べる

> 一応マニュアル見たりして調べたんですが載ってないんですよね。
どっちも載ってますってば。
510nobodyさん:2006/05/30(火) 23:36:43 ID:pEJEKC/o
>>509
再度確認してみます。
511nobodyさん:2006/05/30(火) 23:37:55 ID:???
>>508
なんで、単に>>492の 'オフコース' を $haef に置き換えないんだろう…
512nobodyさん:2006/05/30(火) 23:46:51 ID:pEJEKC/o
おぉで、できました〜!
http://php.s3.to/man/function.mb-convert-encoding.html

ここに載ってました。
<?php
$haef = mb_convert_encoding($haef,'utf-8','sjis');
echo urlencode($haef); ?>

ありがとうございましたぁよかったぁ〜実は今週プログラミング触り始めた者なのです。
またどうしてもわからないときは質問させていただきます!

>>511
括弧が多かったんですかね。。エラーでしたので。
513nobodyさん:2006/05/31(水) 00:38:24 ID:???
>>512
ところで、$haefってhrefのtypoじゃないだろうな?
514nobodyさん:2006/05/31(水) 02:13:51 ID:???
<? include("date.php");?>
で外部ファイルを読み込むのですが、外部ファイルの指定箇所を読み込む
と言うことは出来るのでしょうか?
例えばdata.phpの中身が

//テストデータの読み込み
$test="テスト";
//hogeデータの読み込み
$hoge="hoge";

みたいな内容だとして、「$test」の方だけ読み込むとか。
(実際には複雑なソースがあるとします)
515nobodyさん:2006/05/31(水) 02:26:39 ID:???
>>514
無理だと思う。
516nobodyさん:2006/05/31(水) 03:01:23 ID:6RpSrScb
Testというクラスを作り、そのクラス内で関数と変数も以下のように作り
private $_test;
public function set_iti($test) {
      $this->_test=$test;
}
(同様にクラス内にて、set_niとset_sanのset用の関数と変数も作りました)
set_iti($test)やset_ni($test)の関数に値をsetしたいのですが、
$aarray = array(
517516:2006/05/31(水) 03:07:28 ID:6RpSrScb
すみません516ですが途中で切れてしまいましたので続きから書きます

$aarray = array("iti","ni","san"); //配列を作り
$db_count = (count($aarray)) - 1; //配列の数をカウントし、

$test = new Test();
for ($i = 0 ; $i <= $db_count; $i++) { // for文の中にて
$set_name = "set_" . ($aarray[$i]);
$test->$set_name(3);
このようにしてsetしようとすると
$test->$set_name(3);この行にてエラーとなってしまいます。
以下のようにすればエラーにならないのですが、
$set_name = "set_" . "iti";
$set_name = "set_ni";
配列をくっつけようとしている所に問題があるのでしょうか?
すみませんが、皆様よろしくお願い致します。
518nobodyさん:2006/05/31(水) 03:30:33 ID:???
>>514
・変数で分岐する
--- a.php ---
$a = true;
include('b.php');

--- b.php ---
if ($a) {
echo 'a = true';
} else {
echo 'a = false';
}

・関数化する
--- a.php ---
include('b.php');
b_1();
//こういうのでもいい
// $b = 1;
// call_user_func("b_{$b}");

--- b.php ---
function b_1() { echo 'b_1 called'; }
function b_2() { echo 'b_2 called'; }
519nobodyさん:2006/05/31(水) 03:39:29 ID:???
>>516
エラーメッセージくらい書けよ?
それとphp5なんだろうから、__setや__callを使えばいい
要するにだマニュアル嫁タコ
520nobodyさん:2006/05/31(水) 04:08:11 ID:???
メソッドが存在しないと先読み予想
521516:2006/05/31(水) 04:24:52 ID:6RpSrScb
>>516さん
以後気をつけます。
ご回答ありがとうございます。
__set __get次回試してみようと思います。

>>520さん
すいません。
それはありえないと思いつつ
519さんの「エラーメッセージくらい書けよ? 」で
エラー内容を見直していたらメソッド無いのエラー内容でした。
set_idで試していると思い込んでいたのですが、
新しく結合用に作っていた変数d_idのセッターを作っておりませんでした。
問題解決致しました。
ご回答ありがとうございました。

初歩的な間違いの質問してしまい皆様申し訳ありません。
522nobodyさん:2006/05/31(水) 09:13:16 ID:???
以前はPHPは関数を先書きしなければならなかったんですが、
PHP5で、後書きにしても普通に動作しました。
完全サポートされてるとしてこのままでいいんですかね?
523nobodyさん:2006/05/31(水) 09:26:03 ID:???
クラスを配列にしたいと思います。

$a = array();
$a[0] = new MyClass();
$a[1] = new MyClass();
このように要素ごとにクラスの宣言をせずに、
$aにこれから追加される要素もすべて MyClassとして扱えるような簡単な方法はないでしょうか?
524nobodyさん:2006/05/31(水) 10:35:04 ID:???
>>522
クラスならともかく、関数はPHP4でも後ろで定義できるだろ
525523:2006/05/31(水) 10:38:16 ID:???
$a = array(new MyClass());
でできました。
526nobodyさん:2006/05/31(水) 14:13:46 ID:???
>>514
file()で取り出して、指定行をPHPコードとして扱うとか。そんな関数なかったっけか?
527nobodyさん:2006/05/31(水) 14:52:03 ID:???
>>526
ねーよ。
そういうのをやるなら適当だがこんな感じだな。
こんな関数使う意味ねーけどなwww

function exec_file_lines($path, $start = 0, $end = -1) {
  $result = false;
  if (($file = file($path)) !== false) {
    $total = count($file);
    if ($end == -1 || $end >= $total)
      $end = $total;
    $file = array_slice($file, $start, $end - $start);
    $result = eval(implode('', $file));
  }
  return $result;
}
528nobodyさん:2006/05/31(水) 16:33:16 ID:???
>>514
そもそもどういう基準で読む場所を切り替えようとしてるんだろ。
例えば

[data.php]
if($testmode) {
include("data_test.php");
return;
}
$hoge = "hoge";

[data_test.php]
$test = "テスト";

とかいう感じは?
529nobodyさん:2006/05/31(水) 18:02:44 ID:???
すべてのリクエストパラメータをセッションに格納したいのですが簡単な方法はありませんか?
パラメータの名前は不定で毎回変わります
530nobodyさん:2006/05/31(水) 18:19:26 ID:???
$_SESSION['request'] = $_REQUEST;
531nobodyさん:2006/05/31(水) 18:20:16 ID:???
「JACK THREE FIVE」のさ
「IntroGraphic [ Visible / Hide ] >1>2>3>4>5>6>7>8>9>10>11>12>13」
てなってるじゃんHide押したら消えてVisible押したら表示される
あれってphpの仕組みどうなってんの?
532nobodyさん:2006/05/31(水) 18:26:36 ID:???
>>530
説明不足ですいません、パラメータの名前は毎回変わるんですが
過去のリクエストでのパラメータも全て残しておきたいんです
533nobodyさん:2006/05/31(水) 18:39:20 ID:???
>>532
同じ名前のが上書きされても良いなら、
$_SESSION['request'] = array_merge($_SESSION['request'], $_REQUEST);
534nobodyさん:2006/05/31(水) 18:41:10 ID:???
なるほど!ありがとうございました
535nobodyさん:2006/05/31(水) 19:11:06 ID:???
2次元配列の2次元目の項目でソートしたいときなどはどうやればいいんでしょうか?

$ar[name][addr]
$ar[name][age]

たとえば上記のような形で、$arをageでソートしたいときです。
536nobodyさん:2006/05/31(水) 19:13:08 ID:???
例がよくなかったです。

$ar[fred][age] = 18;
$ar[nancy][age] = 19;

のような感じで、ageでソートしたいです。
537nobodyさん:2006/05/31(水) 19:42:11 ID:???
ageがfredやnancyの最初の配列要素なら
$ar = array(
  'nancy' => array('age' => 19, 'sex' => 'female'),
  'fred' => array('age' => 18, 'sex' => 'male'),
  'jane' => array('age' => 25, 'sex' => 'female'),
  );
asort($ar);

最初の配列要素であることが保証出来ない場合
function cmp($a, $b) {
  if ($a['age'] == $b['age'])
    return 0;
  return $a['age'] < $b['age'] ? -1 : 1;
}
$ar = array(
  'nancy' => array('sex' => 'female', 'age' => 19),
  'fred' => array('sex' => 'male', 'age' => 18),
  'jane' => array('sex' => 'female', 'age' => 25),
  );
uasort($ar, 'cmp');

しかしマニュアル読んでれば、すぐに分かりそうな質問ばっかだな
だから下らねぇ質問なんだろうけど・・・
538nobodyさん:2006/05/31(水) 20:48:20 ID:???
沢山のfunctionが一つのclassに入ってきて見通しが悪くなってきたので、
機能別に2つに分けようとしています。
class Original -> class A + class B

しかし、元のclass で$this->function()をしているため2つに分けると、AとBに別れて
しまい動作しなくなってしまいます。

かと言って、class A のfunction内で $obj = new B(); するのもどうかと思うのですが、
こういう場合どうすればいいのでしょうか。
539nobodyさん:2006/05/31(水) 21:00:34 ID:???
はじめまして。PHPの勉強を始めたばかりの素人です。
現在、参考書を見ながらメールフォームを作成していますが、受信したメールが文字化けしています。

if(mb_send_mail($to, $title, $naiyou, "From : $from"))

これだとメールは届きますが、タイトル、送信者、メッセージともにすべて文字化けします

if(mail($to,$title,$naiyou))
だと、タイトルが文字化けするだけで、送信者とメッセージの部分は文字化けしていませんでした。

参考書には、php.ini の[mail function]の各項目の設定を確認してください。と書かれていますが、レンタルサーバーのためどこをどう修正すれば良いのかわかりません。
レンタルサーバーはさくらインターネットです。
コントロールパネルからphp.ini に、書き込むことが出来るようなのですが、何を書けば良いのでしょうか。
どなたか回答をよろしくお願いします。
540nobodyさん:2006/05/31(水) 21:03:40 ID:???
>>539
mbstring.internal_encordingとスクリプト自体の文字コードが違うんだろどうせ
541nobodyさん:2006/05/31(水) 21:04:19 ID:???
mbstring.internal_encoding

吊ってくる
542nobodyさん:2006/05/31(水) 21:10:12 ID:???
>538
それだけでは本当に分けるべきクラスかどうか判断できん。
無理矢理分けてますます見通しが悪くなるオチが付くなら
メソッドが固まっている状態の方がいい。

元のクラス設計、或いはメソッドの作りがマヌケだと
分離させるには骨が折れる。

このへんはデザインパターンのソースコードの作りを理解する事で学習できるぞ。
543nobodyさん:2006/05/31(水) 21:58:50 ID:???
>>538
単に見通しが悪いだけで、別クラスに分ける必要が無いなら
コード自体を書きやすくしろ。無意味に別クラスに分けることは、余計な混乱を招くだけだ。

機能的に別クラスに分けるべきクラスの場合(この辺の判断は経験が必要になるが
オブジェクト指向・抽象化あたりでぐぐるなりして勉強しろ)、継承を使え。
でも、Aの中で$this->obj = new B();のようにするのも別に悪い設計ではないぞ。
継承と内包を状況に応じて使い分けるのが、正しいオブジェクト指向設計だ。

php5の場合は、interfaceも活用しろ。

以上!
544nobodyさん:2006/05/31(水) 22:00:13 ID:???
>>543
修正
×コード自体を書きやすくしろ
○コード自体を見通しよくしろ(構造化、コメントを工夫するなど)
545nobodyさん:2006/05/31(水) 23:07:42 ID:???
<a>

</a>
<a>

</a>
<a>

</a>
<a>

</a>
<a>

</a>

という文字列を







と置換したい場合PHPではどうすればよいのでしょうか。
mb_ereg_replace等で試してみてもうまくいきませんでした。
よろしくお願いします。
546nobodyさん:2006/05/31(水) 23:10:52 ID:???
>>545
$str = str_replace('</a>', '', str_replace('<a>', '', $str));
547nobodyさん:2006/05/31(水) 23:11:40 ID:???
>>545
str_replace("<a>\nあ\n</a>\n<a>\nい\n</a>\n<a>\nう\n</a>\n<a>\nえ\n</a>\n<a>\nお\n</a>\n", "あ\nい\nう\nえ\nお\n", $string);
548nobodyさん:2006/05/31(水) 23:24:46 ID:???
>>545
詳しい条件が無いので、質問内容を適当に解釈するならば、
strip_tags()
549nobodyさん:2006/05/31(水) 23:29:02 ID:???
>>539
php.iniが変更できない(仕方が分からない)場合は、
スクリプト内でmb_language()とmb_internal_encoding()を適切に設定


まさかレン鯖でテストしてんの?
((( ;゚Д゚)))ガクガクブルブル
550nobodyさん:2006/05/31(水) 23:55:56 ID:???
>>546-548
夜分に即レス感謝です。早速試してみます。
551nobodyさん:2006/05/31(水) 23:56:11 ID:LuayvLyS
RSSをパースするのに、PHP5のSimpleXMLとPEARのXML_RSS、
どっちの方がおすすめですか?
SimpleXMLの方が速そうですが、
取り扱いやすさは、どちらの方がいいでしょう?
552nobodyさん:2006/06/01(木) 01:34:29 ID:???
PHP5.1で、今まで文字コードとかそれ系のことはまったく考えなく、
ソース上も何も考慮せずに作った掲示板を問題なく運用しているんですが、
これはたまたま問題が発生するケースに当たってないだけなんでしょうか?
それとも、考慮しなくても自動的に適切な処理をしてくれているんでしょうか?
553nobodyさん:2006/06/01(木) 01:57:41 ID:???
>>551
自分で判断出来ないレベルならXML_RSS使っとけ

>>552
内部文字コードと、出力HTMLの文字コードが偶然一致しているだけ
php.iniで透過的な文字コード変換も指定出来るが、mbstring関数くらいは使えるようになろうな
554552:2006/06/01(木) 02:02:00 ID:???
>>553
そうなんですか?
実はソースがEUCなスクリプトと、
ソースがSHIFT-JISなスクリプトが、同じ環境でどちらも問題なく稼動してるんですが、
ソース自体の文字コードはあまり関係ないんですか?
555nobodyさん:2006/06/01(木) 02:17:05 ID:???
>>554
あ?関係なかったらmbstring関数なんていらねーだろが。
糞みたいな質問繰り返す前に、php.iniくらいは確認したんだろーな?
556nobodyさん:2006/06/01(木) 02:44:29 ID:???
PHPとMySQLの出力について質問です。
例えば、aaaテーブルとbbbテーブル二つに適合するデータを出力する

というようなことは出来るのでしょうか?どうしても2つ参照しなくては
いけないのですが、方法が想像出来なくて・・・。
557nobodyさん:2006/06/01(木) 02:54:11 ID:???
>>556
JOIN使えばと思うけどSQLの話なら板違い
558nobodyさん:2006/06/01(木) 02:55:06 ID:???
ノイズが多く聞き取れない!
落ち着いて再度コンタクトせよオーバー!
559nobodyさん:2006/06/01(木) 03:18:06 ID:???
>>554
ソース自体の文字コードは大いに関係するが、
これはたまたま問題が発生するケースに当たってないだけ。
狙って不具合を起こそうと思えば、簡単に問題を発生させられる。
かなり注意深く書かれたコードもあるけどね。
560nobodyさん:2006/06/01(木) 05:34:40 ID:???
>>554
ソースをShiftJISで書いててカタカナの"ソ"を書き込めなかったオレがきましたよ
561nobodyさん:2006/06/01(木) 07:41:03 ID:???
>>554
はいエラー
<?php
$a = "スケジュール表";//shift jis
echo $a;
?>
562554:2006/06/01(木) 10:22:43 ID:???
>>561
それは、"スケジュール表\";
で回避できますね。

で、ソース中にそうケースがないとし、
ユーザーからのpostデータで ソや表などを入れ込んだデータを処理、
テキスト保存、読み出し、html表示してもまったくエラーが発生しないんです。
563554:2006/06/01(木) 10:27:41 ID:???
で、>>553で、
>mbstring関数くらいは使えるようになろうな
とありますが、
mbstring.func_overload を有効にしていれば特に気にしなくてももうばっちりですか?
564nobodyさん:2006/06/01(木) 12:21:12 ID:FSYfFeV9
IE6で
クッキー保存時にダイアログで確認する設定にして、

<?php
session_start();
?>

上記のスクリプトを3回続けて実行。
1回目と2回目は「Cookieを許可」を選択すると
3回目でブラウザの応答がなくなります。

これはIE6のバグでしょうか?
PHP側での回避策などありましたら教えてください。
565nobodyさん:2006/06/01(木) 12:31:08 ID:???
>>563
1つのスクリプト内で1つの文字エンコーディングしか扱っていないのであれば、
内部文字エンコーディングの設定がどうなっていようとほとんど関係が無い
(勿論mb関連の関数は別)。そもそもどんな文字エンコーディングであろうと、
内部的にはバイト文字の羅列に過ぎない。
文字エンコーディングを判別して、文字化けしないように処理するのはUAの仕事。
例えばperlそのものには文字エンコーディングの概念なんて無いんだし、
PHPでもmb関連関数は拡張モジュール(オプション)。

それと、mbstring.func_overloadを有効にするなら、尚更文字エンコーディングを
意識しなければならない。暗黙的にmb_internal_encodingの設定値を参照されるので、
使用している文字エンコーディングと違っていれば当然文字化けを引き起こす。
あと、PHPには入出力時に自動的に文字エンコーディングを変換する手段があるが、
これは弊害があるため専用鯖でない限り通常はオフになっていると思われる。
566nobodyさん:2006/06/01(木) 12:41:20 ID:???
ある値が配列の何番目の要素にあるかを返すarray_index($arr, $value) みたいな関数はありますか。
function array_index($arr, $value) {
$i = 0;
foreach ($arr as $item) {
if ($item == $value) return $i;
$i++;
}
return NULL;
}
こんな感じの関数です。定義するのはできるんですが、標準であるんならそっちを使おうと思って探したけど見つかりませんでした。
567nobodyさん:2006/06/01(木) 12:41:31 ID:???
>>563=554=552
あんた、とにかく文字コードを気にしたくなくて、でもちゃんと動くよと誰かに言って欲しいだけでしょ。
日本語処理する以上、設定もソースもデータも文字コードを考慮しないとだめだよ。
その上でちゃんと動くという確信を持たないとね。
568nobodyさん:2006/06/01(木) 13:12:52 ID:???
569nobodyさん:2006/06/01(木) 13:44:24 ID:???
>>568
さんくす。探し方が足りなかったようです。
570nobodyさん:2006/06/01(木) 14:04:19 ID:b4/QNcGS
$day_dateの値が昨日の値より大きければMySQLのテーブルから読み込んで
表示するというのを作っています。

while($row=mysql_fetch_array($rst)){
$day_date2=$row[day_date"];
//日付をタイムスタンプに変更
$day_date3=strtotime("$day_date2");
$yesterday= date("Y-m-d",strtotime("-1 day"));
$yesterday2=strtotime("$yesterday");
if($yesterday2<$day_date3){
echo $row["title"];
}

最初の$row[day_date"]に2006-06-01が入っていたとして
それを比較するので6月1日以降のデータが表示されるはずなのですが、
なぜか、6月1日のデータしか表示されません。どこかおかしいでしょうか?
571nobodyさん:2006/06/01(木) 14:21:02 ID:???
>>564
俺も昔それで悩んだことあった。
昔のことでよく覚えてないんだけど、サーバにより起きたり起きなかったりした気がする。
php.iniを別のサーバにコピーしても変化なかったんで、PHPの設定の問題でもなさそうだった。

今再実験しようと思ったんだけど、そもそもどうやったら、セッションのCookieを受け取りながら、
「Cookieを受け入れるか」のダイアログを再表示できるんだっけ?
572nobodyさん:2006/06/01(木) 14:46:46 ID:???
>>570
>$yesterday2=strtotime("$yesterday");
$yesterdayはタイムスタンプだしな。
573nobodyさん:2006/06/01(木) 15:25:56 ID:???
>>564
確かに再現した・・・

>>571
IEはインターネットオプションで
「プライバシー」タブ
「詳細設定」ボタン
「ダイアログを表示する」を2つとも選択
でできるよ
574nobodyさん:2006/06/01(木) 15:45:22 ID:GEVTcprQ
smartyのテンプレート変数で、可変変数ってできますか?

{$abc.{$def.0}}

これはもちろんエラーですが、実現できる方法があれば教えて下さい。。
575nobodyさん:2006/06/01(木) 15:50:33 ID:???
${}
576574:2006/06/01(木) 16:01:04 ID:GEVTcprQ
smartyのスレをのぞいて同様の質問がありました。
どうやらできないみたいですね。

単純に
$abc.$def

だとできるようですが、後ろの変数が配列だったりすると無理っぽいです。
テンプレートの前に戻って処理するしかないかな。
577nobodyさん:2006/06/01(木) 16:13:58 ID:???
美しくはないけど{capture} 使えばいいんでね?
578nobodyさん:2006/06/01(木) 16:40:09 ID:???
テンプレートでは、あんまり複雑な構造の配列とかは使わない方が良いんじゃないかね。
ロジックの方で出来るだけ処理して、出来る限りテンプレートの方は簡潔に書けるようにした方がいい。
579574:2006/06/01(木) 16:53:12 ID:GEVTcprQ
>>577
name属性に変数入れることになるので、結局は一緒かな。

>>578
もう、自分でも「これはまずいなぁ〜」って分かっているんだけど、
やっぱり楽したい…って感じで、ついついと。
580nobodyさん:2006/06/01(木) 20:07:56 ID:???
教えてください

PHPで自分のスクリプト名を取得して使用する際に

$_SERVER["PHP_SELF"]
は xxx.php/hogehoge/
としてhogehogeの部分にjavaScriptが書けるので
セキュリティ上まずいというのは分かったのですが

$_SERVER["SCRIPT_NAME"]
のほうはなにか危険があるのでしょうか?
そのままformのactionに使っても問題ないのでしょうか?
見た目は問題なさそうなのですが
581nobodyさん:2006/06/01(木) 20:14:43 ID:???
>>580
action属性には「?」以降の文字列だけを入れろ
582nobodyさん:2006/06/01(木) 20:19:54 ID:???
sort()関数は配列を整列しますが、引数で渡した配列を変更してしまいます。
そうではなく、引数で渡した配列は変更せず、整列された新しい配列を返すような関数はありますか。
または、配列をコピーしてくれるような関数。
583nobodyさん:2006/06/01(木) 20:22:29 ID:???
配列をコピーしてくれる代入式を使えばいいような気がする
584580:2006/06/01(木) 20:26:25 ID:???
>>581
すみません
省略して書いてしまいましたが
実際には他のページを経由するので
一時的にスクリプト名を取得したいのです。

$_SERVER["SCRIPT_NAME"]
には純粋にパスとスクリプト名だけが
格納されるのでしょうか?

よろしくお願いします
585nobodyさん:2006/06/01(木) 20:38:52 ID:???
>>584
まずは行動
586nobodyさん:2006/06/01(木) 20:39:16 ID:???
すみません、/httpdocs/配下に置いたPHPスクリプトから
/private/配下に置いた.phpファイルをincludeしたいと思っています。

でも、ためしにやってみたら読み込めませんでした。エラーメッセージなども出ません。
privateのファイルをincludeするにはどの設定をいじれば良いのでしょうか?
ちなみに環境はVPSで、root権限があります。
587nobodyさん:2006/06/01(木) 20:44:18 ID:???
>>580
$_SERVER["PHP_SELF"] ってセキュリティ的にどうまずいの?
588nobodyさん:2006/06/01(木) 21:20:47 ID:???
>>586
あなたの書いたincludeの部分をココに貼ってみよう。
589nobodyさん:2006/06/01(木) 21:35:48 ID:???
>>580
htmlspecialcharsかければいいだろ。
590nobodyさん:2006/06/01(木) 23:35:50 ID:???
>>582
> 整列された新しい配列を返すような関数はありますか。
ない

> または、配列をコピーしてくれるような関数。
代入で一発
591nobodyさん:2006/06/01(木) 23:49:39 ID:???
>>588
お前よぉ、そういうことやってると捕まるぞ。
面白半分だとしてもそういったフザけた真似は止めとけ。

素人だとうっかりパスワード入ってるinclude用ファイルの内容とか貼りそうだからな。
592588:2006/06/02(金) 00:09:18 ID:???
>>591
ハァ?
誰がincludeするファイルの中身を貼れって言いました?
そういう風に読めましたか?そりゃ失敬。

改めて言い直すわ。

あなたの書いた「includeの部分」をココに貼ってみよう。
593nobodyさん:2006/06/02(金) 01:28:34 ID:???
画像をアップするだけのスクリプトを教えていただけないでしょうか?
普通の掲示板に画像アップの機能を持たせたいんです。
一番単純なスクリプトでお願いします。。。
594nobodyさん:2006/06/02(金) 01:32:30 ID:???
>>593
マニュアルをなんだと思ってるのか
http://jp.php.net/manual/ja/features.file-upload.php
595593:2006/06/02(金) 01:57:54 ID:???
>>594
レスありがとうございます。
そこはすでに見ていたんですが、良く分からなくて…。
もっと単純なものもあるんじゃないかと思ったんです。

もうちょっと格闘してみたいと思います。。。
596nobodyさん:2006/06/02(金) 01:58:40 ID:???
>>593
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=PHP+%E7%94%BB%E5%83%8F%20%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89&num=50
ちょっとググッただけで山ほど出てくるぞ。
お前らなんだ?未だにクソした後は親にケツ拭いてもらってるのか?
ちょっとは自分で何とかしようとしてみろよ
お前はまず自分のケツを拭く事からはじめろ
努力も出来ないような奴がプログラミングなんてするな!
597596:2006/06/02(金) 02:03:07 ID:???
>>593
スマン。ちょっと言い過ぎたかもしれん
ttp://masago.kir.jp/php20030814.php

こことかは分かりやすいんじゃないか?

ちょっと簡単なサンプル書いてくるから待ってろ
598596:2006/06/02(金) 02:37:13 ID:???
>>593
ちょっそソースが長いからどっかにうpしてくる
599596:2006/06/02(金) 02:41:26 ID:???
>>593
うpしたぞ
ttp://sund1.sakura.ne.jp/uploader/source/up12599.zip

ほとんどさっきのURLのサイトのソースと同じだからな
後はファイル名とか保存先とかエラー処理とか色々追加してくれ
600nobodyさん:2006/06/02(金) 04:47:11 ID:ers3awbH
素人です。見よう見真似で勉強中なんですが、よく分からないので教えてください。

A.php と B.php で、
C.php をincludeで読みこんでます。

さらにCはincludeで別のファイルを読みこんでいるのですが、
そのさい、
CがAにincludeされたなら、CはDを読みこみ、
CがBにincludeされたなら、CはEを読みこむ。

という風にしたいのですが、どのような条件分岐させたら良いのでしょうか。
601nobodyさん:2006/06/02(金) 06:51:42 ID:???
なんか色々と基礎から間違ってるお方がおりますね
602nobodyさん:2006/06/02(金) 06:55:27 ID:???
defineで定数を設定して、それをチェックすればよくね?
603nobodyさん:2006/06/02(金) 07:19:57 ID:???
>>600
そこまでファイルを分割する必要がほんとうにあるのか
604nobodyさん:2006/06/02(金) 07:29:55 ID:???
そのくらい、ふつーにやんねーか?
605nobodyさん:2006/06/02(金) 07:40:46 ID:???
つまんねー質問だな。
釣りじゃないなら、まずはもっとシンプルな作りで勉強しろ。
コピペで何かが身につくと思ったら、大間違いだぞ。
606nobodyさん:2006/06/02(金) 09:26:33 ID:???
ヒアドキュメントのなかで $foo とかすると、変数とみなされて展開されてしまいます。
これを抑制するには ¥$foo とすればいいのですが、すごく面倒で困ってます。
テストデータをヒアドキュメントで書いてて、$foo やら $bar やらがたくさんあるので、
これをいちいちエスケープするのがうっとうしいです。

そんなわけで、ヒアドキュメントで $foo をエスケープせずに済む方法または
テストデータを簡単に埋め込む方法ありましたら教えてください。
607nobodyさん:2006/06/02(金) 09:34:13 ID:I1GUzSSn
{$foo}
608nobodyさん:2006/06/02(金) 09:35:05 ID:???
607は違った
609nobodyさん:2006/06/02(金) 09:57:02 ID:???
クラスに対して、実行時にインスタンスメソッドを追加することはできますか。
リフレクションあたりのマニュアルを読んでみたのですが、既存のクラスやメソッドを調べる機能はあっても
新しいインスタンスメソッドを追加するような機能はなさそうでした。
610nobodyさん:2006/06/02(金) 10:03:29 ID:???
動的にメソッドを作る理由がわからん
611nobodyさん:2006/06/02(金) 10:14:28 ID:???
>>610
なら黙ってろ
612nobodyさん:2006/06/02(金) 10:36:33 ID:???
質問者がsageでID隠す理由もわからんな
613nobodyさん:2006/06/02(金) 10:52:34 ID:???
PHPとMySQLの連携について質問です。
自宅サーバで動作テストをしているのですが、
MySQL内の複数テーブルを指定して表示することは出来るのでしょうか?
1つずつ選択する場合はselect form dbname で表示出来ますが、
複数というのがよくわかりません。。

同様に複数テーブルの指定フィールドを一括で表示するなども出来ましたら
コマンドか関数を教えていただければと思います。
614nobodyさん:2006/06/02(金) 10:54:16 ID:???
>>610
フレームワークを自作してみようと思って、それで設定ファイルから情報を読み取って
メソッドを動的に定義することを考えています。
あと、テスト用のメソッドもテストスクリプトの中で動的に追加したいと考えています。
615nobodyさん:2006/06/02(金) 10:57:17 ID:???
複数のテーブルを1つのテーブルとして扱えば良さそうだから結合してやれば良いんじゃねーかなー
それはさておき、PHP関係ないんじゃないの?
616613:2006/06/02(金) 11:07:25 ID:???
>>615
すみません、、書き間違いました。。

複数のデータベースです。
・サーバ内のMySQLで作成されているデータベースのすべて表示、
・及びそれらのテーブルから指定フィールドの値を表示

がやりたいと思っています。
617nobodyさん:2006/06/02(金) 11:19:02 ID:???
>>616
>サーバ内のMySQLで作成されているデータベースのすべて表示
SHOW DATABASES or mysql_list_dbs()

>それらのテーブルから指定フィールドの値を表示
データベースをまたいでの和や結合は出来ないと思う。
配列にでも保存し、PHPで処理するしかないんじゃないかな。
618613:2006/06/02(金) 11:21:08 ID:???
>>617
ありがとうございます。アイディアが浮かんできました。試してみます。
619nobodyさん:2006/06/02(金) 11:22:01 ID:???
スレ違いな質問はスルーか誘導しろよ
http://pc8.2ch.net/test/read.cgi/db/1148936556/
620nobodyさん:2006/06/02(金) 11:23:43 ID:???
>>616
コマンドやSQL文でのやりかたはスレ違いなのでPHPの話にだけ限定して
mysql_list_dbs()、mysql_list_tables()、mysql_list_fields()、mysql_select_db()

つかマニュアルは読まんのか?
http://jp.php.net/manual/ja/ref.mysql.php
621nobodyさん:2006/06/02(金) 11:35:00 ID:???
>>612
sageなかったらsageないでまた叩かれる
622nobodyさん:2006/06/02(金) 11:47:39 ID:???
マニュアルを読まないからこそ下らねぇ質問になると推測。
623nobodyさん:2006/06/02(金) 12:09:19 ID:???
せっかく充実したオンライン・マニュアルがあるのにもったいない。
あのマニュアルがあれば、書籍なんて買う必要ないくらいなのにな。

>>609
http://www.php.net/manual/ja/ref.overload.php
624nobodyさん:2006/06/02(金) 12:30:40 ID:???
しょせん「くだ質」なんだから、スレ違いとかなんとかつまらねぇことをガタガタ言うなよ。
「PHPでシステム組んでるうちに浮かんできた疑問」なら
俺は全て回答するぞ。
625593:2006/06/02(金) 12:43:20 ID:???
>>599
レスが遅れてしまってすみません。
本当にありがとうございます!今からまた作業に入りたいと思います。
626nobodyさん:2006/06/02(金) 13:11:03 ID:???
>>624
PHPでシステム組んでたらだんだんと悶々してきてヤりたくなったんだが、
近場で安くて質のいいとこどこかありませんか?

・・・ていう質問がきたらどーすんだよ!とか思ったが、
それはソレで楽しそうでいいかもしれないなw
いや、これはアリだろアリ
627nobodyさん:2006/06/02(金) 13:38:02 ID:???
>>626
require "荻窪Nack5";
628nobodyさん:2006/06/02(金) 13:47:36 ID:???
>>609
「インスタンス」にメンバ関数追加か。
そういうことをする設計もどうかと思うが、こんな感じにすれば出来る。

class TestClass {
  var $methods = array();
  function TestClass() {}
  function __call($name, $args) {
    echo '__call('.var_export($name, true).', '.var_export($args, true).')<br />';
    if (!empty($this->methods[$name])) {
      call_user_func_array($this->methods[$name], $args);
      return true;
    }
  }
}
if (version_compare(PHP_VERSION, 5.0, '<'))
  overload('TestClass');

function add_instance_method(&$obj, $name, $args, $code) {
  $obj->methods[$name] = create_function($args, $code);
}

$c =& new TestClass();
add_instance_method($c, 'sum', '$a, $b', 'return $a + $b;');
echo $c->sum(1, 2);
629nobodyさん:2006/06/02(金) 13:52:47 ID:???
>>623
同意。スクリプト書くときだけにみるんじゃなく、
暇なときにたまにどんな関数があるか見ておくのもオモシロイ。
そこで、ああ、こんな関数があったのか。これは便利。次はつかってみよう。とかなる。
630629:2006/06/02(金) 13:56:24 ID:???
というわけで早速しつもんだが、

クラスの関数の定義のときに、引数の数を不定にして、たとえば、
MyClass->MyFunc($a, $b); とか、
MyClass->MyFunc($a) とか、って呼び出せるの?

Perlであれば、引数自体が自動的に配列扱いになるから、
呼び出す時の引数がいくつあっても、関数内で $_[0], $_[1]と自動的にできるのはわかるけど、
PHPではどうやればいいかよくわからんちんちのとっちみちん

631nobodyさん:2006/06/02(金) 14:19:22 ID:???
まあここは2chだしな。答えたきゃ答えれ。誘導したけりゃ誘導しれ
うんこAA貼り付けたければいやそれは許さん
632nobodyさん:2006/06/02(金) 14:28:35 ID:???
>>628
どうもありがとうです。
でも「インスタンスにメンバ関数を追加する」んじゃなくて、クラスにインスタンスメソッドを追加するだけです。
この例だと、Javascriptのような感じですよね。あるいはRubyの特異メソッド。
そうじゃなくて、ふつうのメソッドです。
evalだとなんかエラーになっちゃうみたいなんですけど、PHPではあとからメソッドを追加するのはできないんでしょうか。
PHPのメタプログラミングまわりはよくわからないので、すみません。
633nobodyさん:2006/06/02(金) 14:37:12 ID:???
>>630
最後から固定数の引数のみ省略可能にするなら
function add_values($a, $b, $c = 0, $d = 0) {
  return $a + $b + $c + $d;
}
echo add_values(1, 2);
echo add_values(1, 2, 5);
echo add_values(1, 2, 5, 10);

完全な可変個引数の関数にするなら
function myprintf() {
  $args = func_get_args();
  $format = array_shift($args);
  vprintf($format, $args);
}
myprintf('%s is %d years old', 'jane', 22);
634629:2006/06/02(金) 14:40:15 ID:???
>>633
なるほど、関数宣言の引数に固定値を宣言すればいいんですね。
っていうかけっこう基本的な知識っぽい気がする0TL
下のはどっかでみたような式だ。
635586:2006/06/02(金) 15:00:35 ID:???
>>588
遅レスすみません。
include ("/home/httpd/vhosts/*****.jp/private/include_inc.php");

こんな感じでprivateに置いたファイルをインクルードしたいのですが出来ません。
ちなみにインクルード元の位置は /home/httpd/vhosts/*****.jp/httpdocs/index.php です。
636nobodyさん:2006/06/02(金) 15:35:36 ID:???
>>632
ファイルに出力してrequireではだめなの?
Mojaviなんかはそうしてたり。
637nobodyさん:2006/06/02(金) 15:36:40 ID:???
>>626
隣に座ってる女の子とか、斜め向かいに座ってる女の子を食ったらいいだろうが。
俺はそうして解消してた。
638nobodyさん:2006/06/02(金) 16:00:16 ID:???
>>636
なんと!そんな方法がありましたか。
・・・と思ったけど、それってクラス定義ごとファイルに出力して読み込むってことですよね。
それならファイルに出力するまでもなく、evalで済んじゃうような。

既存のクラスに対してメソッドを追加しようとして、その定義をファイルに出力して読み込んだ場合、
同じ名前のクラスを再定義することになり、エラーになります。
やっぱり追加はあきらめて、新しいクラスを生成する方向で考えてみます。
639nobodyさん:2006/06/02(金) 16:03:43 ID:???
>>637
なんと!そんな方法がありましたか。
・・・と思ったけど、隣はおばさん、斜め向はデブスなので食いたくありません
640nobodyさん:2006/06/02(金) 16:10:26 ID:???
はじめまして。さっそくですが質問です。

配列の添え字に"02"などという文字列を指定した場合、配列の要素が表示されません。
この場合、C言語であれば"02"という文字列を2という数字に直してから、使用しますが、PHPの場合にはそのように文字列の数字を数列に直す関数などはないのでしょうか?

解答をよろしくお願いします。
641nobodyさん:2006/06/02(金) 16:11:37 ID:???
>>640
$a = "02";
$a += 0;
echo $a;
642nobodyさん:2006/06/02(金) 16:17:28 ID:???
>>641

おお!!
素晴らしいです!!さっそく試しましたが完璧でした。なんか裏技っぽくて少し感動しました。
ほんとうにありがとうございました。
643nobodyさん:2006/06/02(金) 16:20:00 ID:???
>>640
C言語がわかるなら、 sprintf があるぞい。
644641:2006/06/02(金) 16:21:23 ID:???
>>642
実際使うときは、 $MyArray[$a + 0] って感じ。
645nobodyさん:2006/06/02(金) 16:21:46 ID:???
>>640
$a["02"] = 10;
print_r( $a );
646nobodyさん:2006/06/02(金) 16:28:05 ID:???
>>638
>>628をインスタンスごとじゃない物にしてみたよ。

やってて気づいたんだが、PHP4の__callは戻り値返そうとしても
何も返してくれないので、戻り値ありの関数は追加出来ない。
(追加は出来るが、意図しない動作になる)

class TestClass {
  function TestClass() {}
  function __call($name, $args) {
    $method = add_class_method(get_class($this), $name);
    if (is_callable($method))
      return call_user_func_array($method, $args);
  }
}
if (version_compare(PHP_VERSION, 5.0, '<'))
  overload('TestClass');

function add_class_method($class, $name, $args = null, $code = null) {
  static $__classes = array();
  $class = strtolower($class);
  if (empty($args))
    return $__classes[$class][$name];
  $__classes[$class][$name] = create_function($args, $code);
}
add_class_method('TestClass', 'hello', '$name', 'echo "Hello {$name}!";');

$a =& new TestClass();
echo $a->hello('jane');
647nobodyさん:2006/06/02(金) 16:32:25 ID:???
先ほどはありがとうございました。さらに質問です。
C言語の二次配列のような感じで、

$myArr = ・・・
$$myArr[0] = ・・・
 ・
 ・
と設定して

$$myArr[x][y]

というように値を参照しようとしましたが上手くいきませんでした。PHPの場合はこのような使い方は出来ないのでしょうか?
二次配列のような、配列の配列を参照する場合にはどうすればよいのでしょうか?
648nobodyさん:2006/06/02(金) 16:34:58 ID:???
>>647
普通に、
$myAr[x][y]
と二次元配列が使える
649nobodyさん:2006/06/02(金) 16:41:24 ID:???
>>646
レスし終わってからマニュアル見てたら・・・

http://jp2.php.net/manual/ja/ref.runkit.php
http://jp2.php.net/manual/ja/function.runkit-method-add.php

ちゃんとマニュアルは読みましょう・・・_| ̄|○
650nobodyさん:2006/06/02(金) 16:46:04 ID:???
普通に使えたんですか……。
となると、データーを最初から打ち直しに……

$myArr = array(...);
$$myArr[0] = array(...);
$$myArr[1] = array(...);
$$myArr[2] = array(...);
 ・
 ・
 ・

と設定してあって、これを二つの添え字を使って参照するのは不可能なんでしょうか?
$$myArr[x][y]みたいな感じで。
651nobodyさん:2006/06/02(金) 16:53:00 ID:???
>>650
$$myArr
~~
652nobodyさん:2006/06/02(金) 17:07:33 ID:???
うーん。おとなしく二次元配列の勉強をしたほうが良さそうですね。
自分の買った参考書には二次元配列のことが一言も書いてありませんでした・・・4000円もしたのに・・・orz

653nobodyさん:2006/06/02(金) 17:11:27 ID:???
>>652
PHPの書籍なんてろくなもんねーよ
窓から投げ捨ててマニュアル読んどけ
http://www.php.net/manual/ja/language.types.array.php
654nobodyさん:2006/06/02(金) 17:22:11 ID:???
>>653
ありがとうございます。さっそくそこを参考にしながら二次元配列に取り組んでいます。
arrayの中でarrayを呼ぶとは意外でした。
参考書もいいところあるんですけどね。トイレの中で読めるとか・・・。
655nobodyさん:2006/06/02(金) 17:46:09 ID:???
トイレにノートPCで問題なかろう
656nobodyさん:2006/06/02(金) 17:56:04 ID:???
>>642
$a = "02";
$a += 0;
でも int にキャスト変換されるけど、もっと正当な方法で、
intval($a) か (int) $a
がいいと思う。
657nobodyさん:2006/06/02(金) 17:57:43 ID:???
トイレで参考書を読む時間があるとは、>>654さん、痔でしょうか。お大事に。
658nobodyさん:2006/06/02(金) 17:59:04 ID:???
>>656
そんなことしたら、普通の型あり言語みたい…って嫌がる人も多いのでは?
659nobodyさん:2006/06/02(金) 17:59:09 ID:???
おかげさまで二次元配列が一応出来ました。
動作も一応自分の想定どおりに動いています。
ありがとうございます。

ただ
http://www.php.net/manual/ja/language.types.array.php
の下のほうに書いてあるとおり、連想配列(?)の形式で二次元配列を作成したところ、第一項の添え字が文字列でしか応答してくれませんでした。
そのため別に第一項だけの配列を作成して、それを使って呼び出すようにしたのですが、

$fruits = array ( "fruits" => array ( "a" => "orange",
"b" => "banana",
"c" => "apple"
),
"numbers" => array ( 1,
2,
3,
4,
5,
6
),
"holes" => array ( "first",
5 => "second",
"third"
)
);

と設定した配列を、
echo $fruits["holes"][5];
ではなくて、数字で直接に
echo $fruits[0][5];
というふうに呼び出せないのでしょうか?
660nobodyさん:2006/06/02(金) 18:06:42 ID:???
>>659
意味がわかんね。
$fruits[0][5] にデータ入れればいいだけと違うん?
661nobodyさん:2006/06/02(金) 18:10:07 ID:???
>>658
$a = "02";
$a += 0;
だと、「$a += 0;」の部分を不要なものとして他人に消される可能性がある。
分かってる人間ならともかく、ぱっと見じゃ不要な処理にしか見えない。

>>656氏の方が処理の意味が簡潔に分かりやすくて良いと思われる。
662nobodyさん:2006/06/02(金) 18:22:53 ID:???
>>660
第一項目が数字だとやはり反応しないみたいです。
文字列だと想定どおりに出力してくれるのですが。
663nobodyさん:2006/06/02(金) 18:54:32 ID:???
>>662は、VBとかCを少しかじった人なんじゃないかな?
中途半端な知識のせいか、思い込みで凝り固まってしまってる気がする。

まず、PHPの配列は添字が数値だろうと、文字列だろうと全て連想配列になる。
$arr = array();
$arr[0] = 'a';
$arr[5] = 'b';
var_export($arr);
これは↑のようにすれば、簡単に確認出来る。

で、第一項目とか言ってるのは
$arr = array(
 'hoge' => 'a', // 最初の要素だから第一項目
 'fuga' => 'b', // 2番目だから第二項目
 );
のような勘違いをしてるんだろうけど、
PHPの配列は全て連想配列なので、これらを$arr[0]や$arr[1]のように
数値を添字にして表示することは出来ない。

どうしてもやりたいなら、
$ar2 = array_values($arr);
$ar2[0];
のようにするべし。

http://www.php.net/manual/ja/ref.array.php
http://www.php.net/manual/ja/function.array-values.php
664nobodyさん:2006/06/02(金) 19:00:05 ID:???
>>662
こんな感じでもいけそうかな。

$k = array_keys($fruits);
echo $fruits[$k[0]]["a"];
$fruits[$k[0]]["a"] = 'Qoo';
1次元目の添字を$k[0],$k[1]のようにする。
665nobodyさん:2006/06/02(金) 19:02:39 ID:???
>>663
ありがとうございます。なんとなく分かったような気がします。
phpは数字と文字列がごっちゃになってるので、その辺が混乱してしまいます。
Cよりは便利なのは確かなのですが・・・。
666nobodyさん:2006/06/02(金) 19:23:18 ID:???
Mac OS X 10.3.9 PHP 4.4.1
mail()関数をリプレイスする、外部サーバを使う関数って無いどすか。
セキュリティ的に、プロバイダのsmtpサーバを使った方がいいと思いまして。
667nobodyさん:2006/06/02(金) 19:47:03 ID:???
668nobodyさん:2006/06/02(金) 20:02:10 ID:???
$debug_str に入っている複数行にわたる <html>から</html>を削除したい
のですが、以下の正規表現だと全く削除されません。

正しくはどうすればいいのでしょうか?

$debug_str = preg_replace("/<html>.*<\/html>/mi", '', $debug_str);
669nobodyさん:2006/06/02(金) 20:03:12 ID:???
>>666
PEARのMailライブラリとかはどうよ?
http://pear.php.net/manual/ja/package.mail.mail.php
670669:2006/06/02(金) 20:03:46 ID:???
う、かぶったスマ
671nobodyさん:2006/06/02(金) 21:06:04 ID:???
>>668
.+ じゃないっけ?
672nobodyさん:2006/06/02(金) 21:12:18 ID:???
>>668
$debug_str = preg_replace("/<html>(?:(?!<\/?html>).)*<\/html>/gi", '', $debug_str);

というのはどうだろう。
673nobodyさん:2006/06/02(金) 21:15:47 ID:???
>>667
>>669=670
ありがとう。

$mail_object =& Mail::factory('smtp', $params);

みたいにバックエンドにsmtp指定すればいいのね。多分。
674nobodyさん:2006/06/02(金) 21:16:45 ID:???
>>668
"."が改行にマッチするのは、オプションsだよ
/<html>.*<\/html>/si
675nobodyさん:2006/06/02(金) 23:40:43 ID:???
PHPではインスタンス変数にアクセスするのに$this-> をつけないといけないですが、
これが面倒なので、
$a =& $this->array1;
のように、ローカル変数に代入してから使うといいのかなと思いつきました。
これってPHP的によいプログラミングといえるでしょうか。
676nobodyさん:2006/06/02(金) 23:57:59 ID:???
>>675
普通
677nobodyさん:2006/06/03(土) 03:46:31 ID:???
>>675
プログラミング的に最悪
$aを分かりやすい変数名に変えるなら普通
678nobodyさん:2006/06/03(土) 05:15:06 ID:???
質問です
PHPとImageMagickを使って画像をリサイズしたいのですが
passthru("$convert -geometry 10 x 10 $image $dst");
これでやってもリサイズできません。
以前はできていたのですが、突然できなくなってしまいました。
よろしくおねがいします。
679nobodyさん:2006/06/03(土) 06:16:04 ID:???
20060601_ABCDE.log
20060602_ABCDE.log
20060603_ABCDE.log

$nowdate = date("Ymd");
$lines = file("$datalog");

該当ファイル1個をマッチングさせて開きたいんだけど
$datalog はどうやって指定すればいいの?
680nobodyさん:2006/06/03(土) 07:21:50 ID:???
eval は<?php や ?> を取り除いたコードを実行しますが、<?php や ?> があるままのコードを実行する関数はありますか。
一時ファイルに書き出してincludeするしか思いつかないのですが、文字列のまま実行する方法があれば教えて下さい。
681nobodyさん:2006/06/03(土) 07:27:02 ID:???
あと、tmpfile()で作成したファイルのファイル名を調べることはできますか?
それができると、tmpfile()で書き出し→include()で読み込み というのが簡単にできるんですが。
682nobodyさん:2006/06/03(土) 08:03:33 ID:psho47Yz
mySQLとの連携がうまくできないよ。ぽすけて。

具体的には、apache2 php4 mysql4.1 phpmyadmin2.8.1 をwinXPproSP2の環境にインストールして
ローカルでカウンタをまずはmySQLとの連携で作ってみようとしています。

phpは具体的にいじったことはないのですが、basicやC等は少しできる程度です。(計算用途)

参考サイトは
ttp://www.futurism.ws/server/phpMyAdmin/sample001.html

これをコピペして設定し、IEで開くとカウンターを更新できませんと出ます。

最初は接続できてないのかと思い、passを無効にしてやると、サーバに接続できませんのエラー。
そこでcounticに書き込みの行を無効にすると、1と表示されるので、この行の書式が間違っているのかと思い
他のサイトや試行錯誤するも変わらず。

次にphpmyadminから数値0を3に書き換えてみたけど、表示されるのは1。
つまり、読み込み自体もたぶんできてないのだと思います。
phpmyadminの使い方や設定方法、mySQLの設定に問題があるのかと思うのですが、全くわかりません。
ちなみにインストールのために参照したサイトは、
ttp://tsuttayo.sytes.net/
です。
683nobodyさん:2006/06/03(土) 08:19:38 ID:???
>>682
UPDATEの権限は持ってるのかい?
684nobodyさん:2006/06/03(土) 08:26:30 ID:???
と思ったらSELECTも失敗してる?

mysql_fetch_arrayの前にmysql_closeしてるけど大丈夫なの?
オレはデータ取得するまでDB閉じたことないからわかんね
というかこのソース、いちいちDB接続してんのな。効率悪い

whileの中で$rowの値をprint_rしたらどうなる?
685nobodyさん:2006/06/03(土) 08:30:18 ID:psho47Yz
>>683
phpmyadminから同じrootで入っていて、データベースの作成&編集が可能だから問題ないと思います。
念のためphpmyadminから特権の確認をしたところ、グローバル特権がすべて設定されており、リソースも0(0で制限がなくなると書いています)
ので大丈夫だと思います。
686nobodyさん:2006/06/03(土) 08:39:45 ID:psho47Yz
Array ( [0] => 3 [countic] => 3 ) カウンターを更新できません

となります。
3となっているのはデータベースのcounticを3にしてみたからで、0にしてやり直すと0になっていました。

という事は、はやりアップデートができないということですね・・・。

DBを閉じることは疑問に思ったのですが、とりあえずやってみようということで、やってみてます。
687nobodyさん:2006/06/03(土) 08:47:05 ID:psho47Yz
<?php

mysql_connect("localhost","root","**");
mysql_select_db("counter");

$result = mysql_query("select * from counter");
$array = mysql_fetch_array($result);
$counter = $array['countic'];

$counter++;

print $counter;
$result = mysql_query("update counter set counter=$counter") or die("update missing");

?>

このような形でやってみましたが、結果は 1update missing
やはりupdateができないようです。
688nobodyさん:2006/06/03(土) 09:54:45 ID:???
>>679
_ABCDE が不変なら、

$datalog = date("Ymd")."_ABCDE.log";
689nobodyさん:2006/06/03(土) 10:53:34 ID:???
>>687
$array = mysql_fetch_array($result);
で$arrayにはまともな値が入ってきてるの?
690nobodyさん:2006/06/03(土) 11:12:33 ID:???
>>688
679です。
ごめんなさい、_ABCDEは時間分秒が入るみたいなので不変ではないです。
スカラーに性器表現とかは使えませんか?
691nobodyさん:2006/06/03(土) 11:56:15 ID:???
>>690
性器表現
/ちんこ\d/
692nobodyさん:2006/06/03(土) 11:57:07 ID:???
>>690
その日付のファイルは一個(時間は不定で)なの?
であれば、正規表現を使うより、
$date = date("Ymd");
strpos か、 (substr($filename[0], 0, len($data) == $data)
の判断を使うといいよ
693692:2006/06/03(土) 11:59:15 ID:???
なんかめちゃくちゃになったけど、
strposで$dateと同じ文字列が含まれているか調べるか、
substrで先頭から同じ文字数抜き出したのと一致しているかを調べる
という方法が、正規表現より早いとおもふ
694679:2006/06/03(土) 12:13:50 ID:???
>>692
サジェスチョンありがとうございます。
ご教示の関数を勉強してみまっす。
695nobodyさん:2006/06/03(土) 12:53:32 ID:???
>>687
よく見たらcounterってvarcharじゃん
↓でどうよ?
mysql_query( "update counter set counter=\"$counter\"" );

あと、phpmyadmin使ってるならそこでSQL文打てるから、そっちでテストしてみそ
696nobodyさん:2006/06/03(土) 15:02:59 ID:???
データベースへの接続パスワードなどを config.inc.php ファイルに
まとめて書いてrequireしています。

このconfig.inc.phpを、ネットからアクセスできるところに置いておくのは
セキュリティ的に危ないと思うのですが、みなさんはどのように対策しているのでしょうか?
697nobodyさん:2006/06/03(土) 15:06:21 ID:???
>>696
DocumentRootよりも上におく
698nobodyさん:2006/06/03(土) 15:11:08 ID:psho47Yz
>>689
中身の数字を変えれば変わるという事は、入ってるのでしょうか?

>>695
変えてもだめでした。
SQL文ちょっとわかんないんで調べてテストしたらまた報告します。
699nobodyさん:2006/06/03(土) 15:13:49 ID:???
>>697
「/」に置いてみたら、読み込めませんでした・・・
700nobodyさん:2006/06/03(土) 15:16:28 ID:???
>>699
ダレがサーバルートに置けっつった
「ドキュメントルートより"上"」DAYO!!
701nobodyさん:2006/06/03(土) 15:16:51 ID:psho47Yz
UPDATE `counter` SET `countic` = '0' WHERE CONVERT( `countic` USING utf8 ) = '53' LIMIT 1

53→0へphpmyadminから変更しましたが、これはSQL文とはまた違うのでしょうか?
702nobodyさん:2006/06/03(土) 15:40:19 ID:???
>>701
それSQL文だよ
それ見るとDBはUTF-8みたいだね

今までの流れブッタ切るようで悪いけど、counticをintegerとかにした方がいいと思う
703nobodyさん:2006/06/03(土) 16:32:17 ID:???
こんにちわ。
http://www.hoge.com に、PHPファイルからアクセスした時、返されるステータスコードを
PHPで取得させたいのですが、どのようにすればよいか教えてください。

宜しくお願いします。
704nobodyさん:2006/06/03(土) 16:36:20 ID:???
>>701
とりあえずエラーでも表示してみたらどうかね
$result = mysql_query("update counter set counter='$counter'") or die(mysql_error());
705nobodyさん:2006/06/03(土) 16:43:06 ID:???
>>703
hoge.comは実際に使われているドメインだから、例に使うな。
例としてドメインを使う場合は、example.(com|net|org)を使え。

RFC2606
http://suika.fam.cx/~wakaba/documents/rfc-ja/rfc2606-ja.html
706nobodyさん:2006/06/03(土) 16:49:13 ID:???
>>703
一応回答も書いといてやる。

PEAR::HTTP_Client
http://pear.php.net/manual/ja/package.http.http-client.php
707nobodyさん:2006/06/03(土) 16:50:19 ID:???
>>705
そんなことどうでもいいから回答を答えよう
708nobodyさん:2006/06/03(土) 16:59:45 ID:AI0NcZr1
コマンドラインで実行中に
セグメンテーション違反です
ってエラーが出るんですが、これはなんでしょうか?
709nobodyさん:2006/06/03(土) 17:03:10 ID:???
>>708
メモリの読み書きしちゃいけない場所に読み書きしちゃったよってことです。
実行しているスクリプトで無限再帰呼出しとかしてませんか?
710nobodyさん:2006/06/03(土) 17:03:37 ID:???
>>707が答えてくれると思うよ!
711nobodyさん:2006/06/03(土) 17:04:27 ID:???
712nobodyさん:2006/06/03(土) 17:05:00 ID:???
>>710
しかし、>>707 = >>703 なので答えられなかった!
713nobodyさん:2006/06/03(土) 17:08:42 ID:psho47Yz
>>704
そういう事できてたんですね・・・。

Unknown column 'counter' in 'field list'

とのエラーです。ちょっと調べてみます。
714707:2006/06/03(土) 17:11:09 ID:AI0NcZr1
>>709
>>711
なるほど。確かに心当たりあります。
無限ループはしてないですが、数値ですが30000レコード位の配列扱ってました。
プログラム修正します。
どうもありがとうございました。
715nobodyさん:2006/06/03(土) 17:14:12 ID:???
>>700
すいません。
っていうか、根本的なミスに気づきました。
open_basedirの設定がダメだったようです。
しかもこれを修正するのに難儀しました・・・(VPS環境のため)。
716nobodyさん:2006/06/03(土) 17:43:36 ID:???
「回答を答えよう」って部分に何かを感じる
717nobodyさん:2006/06/03(土) 18:15:05 ID:???
自身のスクリプトを表す変数ってなんだったでしょうか?
718nobodyさん:2006/06/03(土) 18:29:48 ID:???
719nobodyさん:2006/06/03(土) 18:48:00 ID:???
質問
safe_mode = on にするとimagemagickが使えません。
offにすると使えるのですが、セキュリティ上onにしたいのです。
onにしてimagemagickを使うにはどうしたらいいでしょうか?
720nobodyさん:2006/06/03(土) 18:51:35 ID:???
>>719
safe_mode_exec_dir
721nobodyさん:2006/06/03(土) 19:00:09 ID:psho47Yz
>>713
解決できました。

13行目の代入するフィールドが違っていたようです。

くだらない質問にお付き合いいただいてありがとーです。
722nobodyさん:2006/06/03(土) 19:09:23 ID:???
>>721
なぁに。下らない質問を書き込むスレだから気にするな
723nobodyさん:2006/06/03(土) 20:56:05 ID:pcQiHytU
さくらインターネットを利用しています。
さくらには、php.ini編集画面というのがあり、
そこは空欄で、なにも書かれていません。
写真画像の投稿ファイルの上限を2MBから5MBへ上げたいのですが、
upload_max_filesize = 5M //
の一行だけをその空欄に記入すれば変更出来ますかね?
724nobodyさん:2006/06/03(土) 21:11:19 ID:???
>>723
ここで聞くのはお門違い。変更できるんだけどさ。
725nobodyさん:2006/06/03(土) 21:18:33 ID:pcQiHytU
さくら板でも板違いと言われて来ました。
このタグイの質問板はないのですかね?
726nobodyさん:2006/06/03(土) 21:22:35 ID:???
さくらインターネット 質問にマジレスするスレ Part9
http://pc8.2ch.net/test/read.cgi/hosting/1147179322/254-256

これか。
あのスレ、この板とかWeb板の.htaccessスレに誘導投げることが多いんだけど
鯖特有の事情を知らん人間には答えられないものまで投げてるときがある。
俺はあっちのスレでいいと思うけどな。
727724:2006/06/03(土) 21:34:07 ID:???
おれが借りてる桜は5Mだった
3Mにしてみてphpinfo()で確認したから変更されると思う。
(鯖によるかもしれないが)

てか、最初にさくらに聞くべきと思う。
728nobodyさん:2006/06/03(土) 23:22:45 ID:ZQdIlxtX
PHPの内部でコマンドを実行した時のエラー出力を取得することはできますか?
729nobodyさん:2006/06/03(土) 23:51:17 ID:???
>>728

$output = `ls -al`;

こんな感じかなあ。
取りあえず出力は持ってこれるよ。
730nobodyさん:2006/06/03(土) 23:54:34 ID:???
多次元連想配列で先頭のkeyが保持するvalueの数順に並べ替える関数てありましたでしょうか?

例)
$hoge['a'][] = "1";
$hoge['a'][] = "2";
$hoge['a'][] = "3";

$hoge['b'][] = "1";
$hoge['b'][] = "2";

この場合$hogeで[b]の配列を先頭に来るように並び替えたい。
731nobodyさん:2006/06/03(土) 23:59:13 ID:ZQdIlxtX
>>729
標準出力はとれるけど、標準エラー出力がとれず・・・
popenもやってみたけど、なぜかうまくいかず。
http://jp.php.net/manual/ja/function.popen.php
732nobodyさん:2006/06/04(日) 00:01:23 ID:???
open_basedir = /home/*/public_html
と設定したいのですができません。
/home/にするしかないのでしょうか?
733nobodyさん:2006/06/04(日) 00:05:45 ID:???
>>731
標準エラーを標準出力にリダイレクトしてみたら?
proc_open()ならデスクリプタを区別して取得できるよ。
734nobodyさん:2006/06/04(日) 00:11:15 ID:GKXODwlN
新しいフォルダを作成ってできますか?
http://*******/user/aiueo/index.html
の/aiueo/を作成したいのですが
735nobodyさん:2006/06/04(日) 00:11:20 ID:???
>>728

あ、エラー出力かー。
じゃぁpopen()も駄目かなあ。

力になれなくてスマン。
736728:2006/06/04(日) 00:21:52 ID:???
>>735
死ね!無能が!
737nobodyさん:2006/06/04(日) 00:35:10 ID:???
質問です。
phpinfo();で出力される
1.System
2.Build Date
3.Configure Command
この3つ、もしくはこれら一覧がのってる関連の項目を表示させないことってできますか?
738nobodyさん:2006/06/04(日) 01:00:32 ID:???
タブ文字を展開してくれる関数はありませんか。
739nobodyさん:2006/06/04(日) 01:01:10 ID:???
>>734
できる。
740nobodyさん:2006/06/04(日) 01:18:18 ID:GKXODwlN
>>739
教えてください
741nobodyさん:2006/06/04(日) 01:28:51 ID:???
>>740
http://www.google.com/search?num=50&hl=ja&q=PHP+%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E4%BD%9C%E6%88%90&lr=lang_ja
ちょっとググッただけで山ほど出てくるぞ
あと、フォルダって言う言葉とディレクトリって言う言葉でググると当然だけど検索結果が違ってくる。
どっちも基本的に同じ意味だから両方覚えとけ



596 名前:nobodyさん[sage] 投稿日:2006/06/02(金) 01:58:40 ID:???
>>593
ちょっとググッただけで山ほど出てくるぞ。
お前らなんだ?未だにクソした後は親にケツ拭いてもらってるのか?
ちょっとは自分で何とかしようとしてみろよ
お前はまず自分のケツを拭く事からはじめろ
努力も出来ないような奴がプログラミングなんてするな!

※一部編集
742nobodyさん:2006/06/04(日) 01:38:44 ID:???
下らない質問スレなんだから、
>>596みたいな教える気のないやつはこなくていいよなw
説教してストレス発散したいだけなら、よそにいけっつーの。
743nobodyさん:2006/06/04(日) 02:06:11 ID:???
>>730
asortでできるくさい。
うまくいかないようならuasortで比較部分を自作かな。

>>738
str_replaceで置き換えるしかなさそう。
744728:2006/06/04(日) 02:37:25 ID:aEL54rVy
>>736 はなんか別の人です

proc_open()で標準エラー出力とれました。
popen()のリダイレクトでもさっきはなぜかできなかったのですが、
できるようになりました。
745nobodyさん:2006/06/04(日) 04:16:00 ID:???
>>740
>>741が言っている「フォルダとディレクトリは基本的に同じ意味」ていうの、
あくまで"基本的に"だからな。
実際は似て非なるものだが、ほぼ同義として扱われているだけ。
746nobodyさん:2006/06/04(日) 04:18:16 ID:???
GUI上でのディレクトリアイコン名=フォルダ
747nobodyさん:2006/06/04(日) 06:05:13 ID:???
>>737
何がしたいのかいまいち分からんが。

ob_start();
phpinfo();
$info = ob_get_contents();
ob_end_clean();
// $infoの内容を編集
echo $info;
748nobodyさん:2006/06/04(日) 06:10:59 ID:???
>>737
引数で指定出来るじゃねーか。
マニュアル嫁よボケナス
http://jp2.php.net/manual/ja/function.phpinfo.php
749nobodyさん:2006/06/04(日) 07:42:46 ID:???
/home/user/public_html/
レンタルサーバーです。
いつもこのpublic_htmlの中で色々やってるのですが、
/home/user/log/
にPHPでアクセスすることは可能ですか?
直接ブラウザでlogにアクセスするんじゃなくて、
内部的にPHPを通じてデータを引き出すのは可能か、ということです。
750nobodyさん:2006/06/04(日) 07:46:45 ID:???
可能です
751nobodyさん:2006/06/04(日) 07:47:21 ID:???
アクセス権限があれば可能、なければ不可能
752nobodyさん:2006/06/04(日) 09:40:30 ID:???
>>743
どうもありがとう。タブ文字を空白に展開する関数はないということなので、
自分で作ってみました。PHPならこんな関数あってもよさそうですけどね。
function expand_tabchars($str, $width=8) {
 $splitted = preg_split('/¥t/', $str);
 $last = array_pop($splitted);
 $buf = array();
 foreach ($splitted as $s) {
  $buf[] = $s;
  if (($rindex = strrpos($s, "¥n")) !== false)
   $column = strlen($s) - $rindex - 1;
  else
   $column = strlen($s);
  $n = $width - ($column % $width);
  $buf[] = str_repeat(' ', $n);
 }
 $buf[] = $last;
 return join($buf);
}
ひまな人がいたら添削おねがいします。
753nobodyさん:2006/06/04(日) 09:58:38 ID:???
>>752
添削してもらうより先に自分で実行してみりゃいいじゃん

これじゃいかんの? "\t"でexplodeできるか知らんけど
$space = str_repeat( ' ', $width );
implode( $space, explode( "\t", $string ) );
754nobodyさん:2006/06/04(日) 10:26:47 ID:???
>>752
return join($buf);
はエラーになると思うんだけど、動かしてみた?
755nobodyさん:2006/06/04(日) 13:30:58 ID:UMSweBV1
// エラーチェック
if (条件式) {
      $err_msg[0] = "パスワードが正しくありません";
} elseif (条件式) {
      $err_msg[1] = "ファイルがありません";
} else {
// 何にもエラーが無いなら処理をする
}

if ($err_msg) {
      $int = count ($err_msg);
      for ($i=0;$i<$int;$i++) {
         echo "エラー:" . $err_msg[$i] . "<br />\n";
      }
}

これだと、エラーが二個あった場合、最初の$err_msg[0]に文字列が代入されると
次の$err_msg[1]に文字列が代入されません。

ですから配列の中身はいつも1個しかないのです・・・。
何か良い方法はありませんでしょうか? 宜しくお願いします。
756nobodyさん:2006/06/04(日) 13:34:15 ID:???
$err_msg = array();
if (条件式) {
? ? ? $err_msg[0] = "パスワードが正しくありません";
}
if (条件式) {
? ? ? $err_msg[1] = "ファイルがありません";
}

if ( count( $err_msg ) ) {
? ? ? $int = count ($err_msg);
? ? ? for ($i=0;$i<$int;$i++) {
? ? ? ? ?echo "エラー:" . $err_msg[$i] . "<br />\n";
? ? ? }
}
else
{
//何にもエラーが無いなら処理をする
}
757nobodyさん:2006/06/04(日) 13:35:16 ID:???
む。
まんまコピペしたら?になったorz
?は空白(タブ)ね。
758nobodyさん:2006/06/04(日) 13:35:45 ID:???
その前に、何故 elseif を使っているのか教えてくれない?
759nobodyさん:2006/06/04(日) 13:36:33 ID:???
>>758
素人にはよくあること
760nobodyさん:2006/06/04(日) 14:08:29 ID:GTou7SdE
鯖を入れ替えるついでにPHP4で書いたスクリプトもPHP5用に書き換えようと
思ってるんだけど、PHP5って将来主流になるの?
スクリプトの機能的にはPHP5である必要は全くないんだけど、PHP4が
かつてのPHP3みたいに順調にフェードアウトしていくことが確定してるんなら
今のうちにPHP5に移行しようかなと
761nobodyさん:2006/06/04(日) 14:11:38 ID:???
>>755
ついでだけど、そういうやり方するなら
$err_msg[] = "パスワードが正しくありません";
とか
$err_msg[] = "ファイルがありません";
の方がいいぞ。エラーコードとかも合った方がいいけど。
762730:2006/06/04(日) 14:17:27 ID:???
レスdクス。
てことはやっぱり多次元配列の並び替えを想定した関数は無いってことですね。

もしかしたらphpならと思いましたがそこまでは無いようですね。
では自分で比較用のルーチンでも組んでみます。
763nobodyさん:2006/06/04(日) 14:33:57 ID:???
>>752
きったねーソース
764nobodyさん:2006/06/04(日) 14:58:37 ID:???
>>760
気にしなくていいよ。
君の書くレベルならPHP4でも5でも内容変わらないだろうし
765nobodyさん:2006/06/04(日) 15:46:43 ID:???
変数が数値か文字列か判別する方法を教えてください
766nobodyさん:2006/06/04(日) 16:04:35 ID:???
is_numeric
is_string
767nobodyさん:2006/06/04(日) 16:09:23 ID:???
is_Baka
768nobodyさん:2006/06/04(日) 16:12:44 ID:???
function fool( $bar )
{
  if( is_Baka( $bar ) )
  {
    echo "わたしゃ神様だよ";
  }
  else
  {
    echo "それは私のおいなりさんだ";
  }
}
769nobodyさん:2006/06/04(日) 16:14:35 ID:???
なんか凄くわかりやすい煽り方してる奴がいるな。
770nobodyさん:2006/06/04(日) 16:37:35 ID:???
is_null($atama)
771nobodyさん:2006/06/04(日) 16:37:58 ID:???
>>762
多次元配列の並び替えだけならarray_multisortで色々できるけど、
ソートって普通「格納されている値を元に並び替え」なので、
そういう「項目数の大小で並び替え」っていう構造解析的なのは
想定外の発想だと思うよ。

なので、手順的には
1.各キーの保持する項目数を新しい要素に格納する
2.その要素をソートキーにしてarray_multisort
ってすれば可能じゃないかと思う。
772755:2006/06/04(日) 16:47:47 ID:UMSweBV1
>>756,758
なるほど。
elseifを使っていました...orz。勉強になります!V

>>759
コーディングの勉強をしていたのですが、「10日で覚える PHP5入門教室」(山田よしひろ著)という本を参考にしました。
やっぱりマズイでしたかね?
他人のスクリプトのソースでも見て勉強してみます。
773nobodyさん:2006/06/04(日) 16:54:46 ID:???
>>772
別にその本を見るのは悪いことじゃないよ
その本の内容を理解せずにそのままコピペするのは悪いことだが。
他人のスクリプト見ても理解しなかったら同じ事
774755:2006/06/04(日) 17:13:40 ID:UMSweBV1
どうやらうまくいったようです。

>>773
いや、コピペしたのではなく、エラーチェックの部分だけを参考にしたんです。
そしたらelseifだったんですね。

まあその本に書いてあったスクリプトは、二つエラーがあっても一つしか表示されない。
そこで私はforで回して表示させようとチャレンジしたわけです。
と、そこで間違ってしまったので…。

最後までアドバイスありがとうございました。
775nobodyさん:2006/06/04(日) 17:43:29 ID:???
>>752
動作もアルゴリズムもいい感じ。
どこかで使わせていただくかもです。

UTF-8の全角文字が絡むと狂うけど、それは仕方ないかな。
776nobodyさん:2006/06/04(日) 17:52:57 ID:???
こうしてみよう。と思うのはいい心がけだと思う。
777nobodyさん:2006/06/04(日) 18:41:36 ID:???
>>753
それだと、
a[TAB]e
ab[TAB]e
abc[TAB]e
abcd[TAB]e
がダメだと思う。単なるインデントとしてTABを使うなら問題ないけど
778nobodyさん:2006/06/04(日) 19:05:33 ID:???
前からずっと気になっていた質問なんですけど

画像を表示させたいんですけど、複数の画像を合わせて
表示というのはできますか?(下手な質問ですみません)

たとえば、アバターのように、服装に合わせてアバターを表示させたり
9x9のマスがあって、変数の状態によってそのマスの色を変えるとか。
どなたかよければ教えてください。
779778:2006/06/04(日) 19:06:37 ID:???
続きです。
携帯用のサイトで表示させたいです。
780nobodyさん:2006/06/04(日) 19:12:05 ID:???
>>778
画像が用意されているんならやろうと思えばやれるんじゃない?
服の指定をPHPが受けて、画像ファイルを取ってきてCSSとかで表示。
こういう感じじゃないか?
781nobodyさん:2006/06/04(日) 19:12:38 ID:???
phpのgd関数でも頑張ればできるし、ImagaMagickのような外部プログラムを使ってもできる。
さらに言うと透過を扱える画像形式を使えばhtmlのレベルで重ね合わせる事もできるし、
全ての組み合わせパターンのものを作っておけば悩む必要すらないよ。
782nobodyさん:2006/06/04(日) 19:12:42 ID:???
あ、携帯はCSS使い得ないか。
まぁ、デザインははPHP関係ないだろうからそれなりの手段を使うって事で。
783778:2006/06/04(日) 19:12:46 ID:???
>>780
というと、
全てのパターンの画像を用意ということでしょうか?
784778:2006/06/04(日) 19:17:54 ID:???
何百とパターンがあるとさすがに大変ですね。
ほかのスレで聞いてみます。
785nobodyさん:2006/06/04(日) 19:21:40 ID:???
>>752
>添削してもらうより先に自分で実行してみりゃいいじゃん
実行してうまく動くことを確認してますよ。実行してないなんてひとことも書いてないんだけど。

>$space = str_repeat( ' ', $width );
>implode( $space, explode( "¥t", $string ) );
これだと、タブ文字をすべて同じ数の空白に置き換えますよね。でもここでやろうとしているのは、置き換える空白の数をカラム位置によって変えて8桁揃えにすることなので、これだとだめですね。
でもタブ文字でsplitするならpreg_replace()よりexplode()のほうがよさそうですね。どうもありがとう。

>>754
>return join($buf);
>はエラーになると思うんだけど、動かしてみた?
手元では問題なく動いてるんだけど。当方PHP5.1.2。もしかしてPHP4だと動かないとか?

>>763
>きったねーソース
そうだね。できれば改善案を教えてくれると助かる。
786nobodyさん:2006/06/04(日) 19:56:13 ID:???
>>785
注意: PHP 4.3.0 以降、implode() の glue パラメータはオプションとなり、デフォルトは空文字 ('') です。
これは implode() の好ましい使用法ではありません。
下位互換性のため、常に 2 つのパラメータを使用することが推奨されいます。

implode は join な
787nobodyさん:2006/06/04(日) 20:19:54 ID:???
>>786
正確にはjoinがimplodeのエイリアスなんだがな。
788nobodyさん:2006/06/04(日) 20:28:31 ID:???
>>787も承知
789nobodyさん:2006/06/04(日) 20:32:35 ID:???
PHP5.0.3です。
$temp="$foo=$bar;";
といったようにコードが入った変数があるとして、
このコード($foo=$bar)を実行するには何か方法がありますか?
790nobodyさん:2006/06/04(日) 20:40:52 ID:???
ありゃ?今LinuxにPHPインストールしたんだけど、
viでソース書いても関数とかの色が変わらないや(´・ω・`)
791nobodyさん:2006/06/04(日) 20:51:35 ID:???
>>789
eval
792nobodyさん:2006/06/04(日) 20:56:07 ID:???
>>780
そうですか^^
793nobodyさん:2006/06/04(日) 22:37:11 ID:???
mysqlにバイナリで保存した画像をphpから出力するhtml上でファイルではなくそのまま表示することはできませんか?
httpの原理的に普通のhtmlだけだと無理な気がしますが。

DB+phpで画像を扱う場合一般的にはファイルパスだけをDBに入れてファイルは普通の方法で保存するのでしょうか?
794nobodyさん:2006/06/04(日) 22:55:01 ID:???
<img src="〜.php">
795nobodyさん:2006/06/04(日) 22:57:34 ID:???
あ、
img src="./image.php?img_id=100"という方法はわかります。
でも、これだとリクエストでphpが毎回動くので表示数が多いとキツイかと思いまして。
796nobodyさん:2006/06/04(日) 23:00:41 ID:???
mysqlに格納したバイナリをphpを介さずに取り出したいってか
797nobodyさん:2006/06/04(日) 23:09:41 ID:???
>>796
そんなことができるのでしょうか?
できるならそれが一番いいんですが。
798nobodyさん:2006/06/04(日) 23:20:59 ID:???
逆立ちしながら匍匐前進
799nobodyさん:2006/06/04(日) 23:49:15 ID:???
>>797
cronjobで一定時間ごとか、DBへの書き込みをトリガーにして更新された画像を
ファイルシステムに書き出すとかすればいいけど、だったらなんでDBに画像を入れるのって
話になるわなぁ。
800nobodyさん:2006/06/05(月) 00:04:48 ID:???
>>799
やはり色々回りくどい処理になってしまいますか・・。
DBには画像の情報を保存しておいて画像自体は普通に置いておくのが一番効率が良さそうですね。
それでやってみます。
ありがとうございました。
801nobodyさん:2006/06/05(月) 00:06:27 ID:gDfHus2z
Windows XP SP2、Apache/1.3.34、PHP/4.4.2なのですが、fopenでURLが開けません。
以下のスクリプトだけでも、何の応答もありませし、@をとっても、何のエラーも表示されません。
allow_url_fopenはOnになっていますし、アクセス先(例ならwww.example.com)のアクセスログには記録されています。
Firewallは切ってあります。
どのような理由が考えられるか、教えていただけませんか?

<?php
$fp = @fopen('http://www.example.com/', 'r');//URLは変更してあります。
echo 'a';
802nobodyさん:2006/06/05(月) 00:19:15 ID:???
>>801
俺はXPでコマンドプロンプト上で動かしたんだけど上手く言ったぞ
何をもってURLがオープンできてないと思ったんだ?
そもそもそのecho ('a')はなんだ?
803nobodyさん:2006/06/05(月) 00:20:20 ID:9HSZ1/yM
ここだから書き込める。

一行掲示板を自作したいんだけど、
テキストBOXに書き込ませる。

ボタンを押す
↓(ここがわからん)
変数としてテキストを取り込む

それをデータベースなりテキストなりにインサート

ここまでを取り合えず理解したい。

一行掲示板に限らずこの辺の事詳しく書いてるサイトねーかな?
(一行掲示板 PHP mySQL)でぐぐってみたけどいいとこないんだわ。
804801:2006/06/05(月) 00:26:58 ID:???
>>802
ありがとうございます。
echo 'a'は、とりあえず何か表示させるためです。
でも何も表示されず、503とかのエラーすら返ってきません。
Apacheのエラーログにも残ってません。

以前はfopen出来たのですが、OS再インストールして環境作り直したら駄目になりました(T-T)
805nobodyさん:2006/06/05(月) 00:39:36 ID:???
>>803
まずはあれか?HTMLのフォームが分からないってことか?
とりあえず公式
ttp://php.s3.to/man/language.variables.external.html
で、分かりにくかったら
ttp://oss.kk-ntc.co.jp/jpug/pukiwiki/pukiwiki.php?PHP%2F%A5%D5%A5%A9%A1%BC%A5%E0%C6%FE%CE%CF(%B1%FE%CD%D1%CA%D4)

>>804
とりあえず、fopenを書いてる行をコメントアウトしたらもちろんaが表示されると思うけどそれは大丈夫?
806nobodyさん:2006/06/05(月) 00:45:12 ID:???
>>805
さっそくありまとう。

なんかおいらの疑問が解消されそう。

でも最後の1行の意味がよくわかんないんだけど。
807801:2006/06/05(月) 00:47:51 ID:???
>>805
はい、表示されます。

echo 'a';flush();
$fp = fopen('http://www.example.com/', 'r');
echo 'b';

のようにすると、

HTTP/1.1 200 OK
Date: Sun, 04 Jun 2006 15:46:41 GMT
Server: Apache/1.3.34 (Win32) PHP/4.4.2
X-Powered-By: PHP/4.4.2
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

1
a

となり、最後の0が来ないまま終了します。
808nobodyさん:2006/06/05(月) 00:52:10 ID:???
基本的には、フォームのタイプで使うphpを指定して、そのフォームからアクションが実行されれば、
指定したphpが実行されると。そういう事でぃすか?

最初に見た掲示板のソースでinput使ってて、よくわかんなかったけど、こっちならわかりそう。
809nobodyさん:2006/06/05(月) 00:52:57 ID:???
すんごいごめん。

>>804へのレスを俺のだと勘違いしてたYO!
810nobodyさん:2006/06/05(月) 00:53:38 ID:???
>>806
最後の一行って?

>>807
おかしいなぁ〜。俺も今ちゃんとローカル上(Apache)で試したんだけど
ちゃんと取れたぞ?
ちょっと取得先のURL変えてみたら?
811801:2006/06/05(月) 01:03:43 ID:???
>>810
別のURLでも駄目です。
fsockopen使う方法ではうまくいきました。

しかしXOOPSのテスト環境なので、スクリプトを修正するのは骨が折れるので
PHPのバージョンを変えて試してみます。
812801:2006/06/05(月) 01:14:40 ID:???
PHP Bugsで報告されていました。
ttp://bugs.php.net/bug.php?id=36054
ttp://bugs.php.net/bug.php?id=36102

どうもご迷惑をおかけしましたm(_ _)m
813nobodyさん:2006/06/05(月) 01:22:35 ID:???
まさにくだ質なんですが、iTunesなどで
音楽情報をデータベースから読み込んで表示しますよね?

あれと同じようにPHPでもデータベースにアクセスして
検索キーか何かから音楽情報を出力する事って出来るのでしょうか?
PHPでamazonの商品を検索して表示出来るので、その仕組みと同じではないか
と思っているのですが、いかがでしょうか?
814nobodyさん:2006/06/05(月) 01:30:26 ID:???
>>813
できる。
そういった情報を提供するサービスも存在する。
815nobodyさん:2006/06/05(月) 01:31:34 ID:???
816813:2006/06/05(月) 01:54:18 ID:???
>>814-815
おお!なんか凄いですよ。しかもpearにあるとは。。

どこか日本語で説明しているサイトってないですかね?
817nobodyさん:2006/06/05(月) 02:51:30 ID:???
PHPで16進法数字を10進法に変える関数もしくはテクってありますでしょうか??
818nobodyさん:2006/06/05(月) 03:10:46 ID:???
819nobodyさん:2006/06/05(月) 03:12:23 ID:???
追記 その4 (3月9日).
「別ドメインのファイルを読めない」をなんとか解決することが、今回の課題ク
リアの最大のポイントかもしれない。

JavaScriptでは到底ムリのようで、もしかしたらPHPなら可能かもとPHPの本を見
てみると……。HTTPで読み込み可能らしい。簡単なサンプルを作ってみたら、あ
っさり読み込んでくれた。それじゃこれを組み込めばと考えてみるが、Ajaxを使
う必要がなくなってしまうことに気がつく。

いやいや、ここはどうしてもAjaxでなんとかしたい。
PHPなら他のサーバのファイルが読めるでしょ……………
あっ、なーんだそういうことか。
ということで作ったのがこれです。
http://sakipapa.sakura.ne.jp/rss-sample0p.html
820nobodyさん:2006/06/05(月) 03:13:12 ID:???
動かなかった「rss-sample0.html」との違いはここです。
<button onclick="rssReader('./rss-sample0.php?u=http://rss.rssad.jp/rss/
nifty/manabe')">眞鍋かをりのココだけの話</button>

「rss-sample0.php」と「rss-sample0p.html」は同一のサーバにあるので「rss-
sample0p.html」から「rss-sample0.php」をファイルとして読み込むことは可能。
「rss-sample0.php」はスクリプトだからその実行結果が「rss -sample0p.html」
へ受け渡されることになる。

このような“力技”は「別のサーバのファイルの中身を表示したい!」と同じです
ね。もう少し早く気がつけば良かった。
821nobodyさん:2006/06/05(月) 04:41:27 ID:b18GC8fy
最先端の技術を使っているエンジニアは、その技術をドコから習得するんでしょうか?
まさか書店の解説本なんて訳ないですよね?
822803:2006/06/05(月) 05:06:03 ID:???
>>805
フォームから、データベースに残すのはできた。

サンクス

次は、これをそのままのページに表示させたいんだけど、どういう構造にしていいかがいまいちわからん。

一番新しいのを上にどんどん乗せてくにはどうしたらいいか教えてくり。
823nobodyさん:2006/06/05(月) 05:07:41 ID:???
>>821
産地直入。

作ってる所(組織)、作ってる人、作ってる人が屯ってる所、
むしろ自分も生産者のひとりになるとか。
# 自分の見込んだ生産物を消費者に供給する人も重要
824803:2006/06/05(月) 05:09:01 ID:???
今んとこ、フォームページからサブミット押すと、phpファイルに飛んじゃうから、こっからまたフォームページをリロードさせて、
そのフォームページの下に表示させるようphpを組めばおk?
825nobodyさん:2006/06/05(月) 05:14:51 ID:???
>>821
Web及び書店
仕事で使ってんならPHPならPHPでカンファレンスがある(米国だったりするけど)
Googleのカンファレンスにも行ったしMicrosoftのカンファレンスにも行ったことがあるよ
ただ、カンファレンスと銘打った単なる商品の宣伝もあるので注意だな
826nobodyさん:2006/06/05(月) 05:30:57 ID:???
「rss-sample0.php」は次のようになります。(たったこれだけです)

<?php
$filename = $_GET['u'];
$array = file($filename);
$filenaiyou = join("",$array);
echo $filenaiyou;
?>

「Ajax + PHP」でRSSリーダーを作る はこれにて完了
827nobodyさん:2006/06/05(月) 05:59:26 ID:???
>>817
マニュアルに載っていたような・・・
828nobodyさん:2006/06/05(月) 07:51:20 ID:???
ファイルの中から、特定の文字列を含む最初の行を調べる高速な方法を教えてください
829nobodyさん:2006/06/05(月) 08:02:52 ID:???
>>828
strpos(), mb_strpos()
830nobodyさん:2006/06/05(月) 08:05:41 ID:???
マニュアル
 ttp://www.php.net/manual/ja/
いかにもそういう関数が書かれていそうな「Strings(文字列関数)」ってのがある。
実際に中を見てみるとファイルから直接探すのは無さそう。
ってことは、ファイルの中身(全部あるいは一部分ずつ)を一度読み出してから検索すればよさそうだ。
あらためて見てみると「ファイルシステム関数」ってのがある
831nobodyさん:2006/06/05(月) 10:15:46 ID:???
>>674
thanx! できますた。
832nobodyさん:2006/06/05(月) 11:02:44 ID:???
fgetsで読み込む際に、改行を読み込まないようにするにはどうしたらよいのでしょうか?
833nobodyさん:2006/06/05(月) 11:15:17 ID:???
>>832
無理
普通は読み込んでからrtrimかchopする
834nobodyさん:2006/06/05(月) 15:09:00 ID:ovUjrMmN
is_callable() の syntax_only はどういう意味ですか?
trueの時とfalseの時の動作の違いがよくわかりません。
835nobodyさん:2006/06/05(月) 15:19:47 ID:???
syntax_only が TRUE の場合、この関数は 単に var が関数またはメソッドであるかどうか だけを調べます。
836nobodyさん:2006/06/05(月) 15:20:17 ID:???
837nobodyさん:2006/06/05(月) 16:02:12 ID:ovUjrMmN
>>835, 836
どもども、いやその意味と違いがよくわからず・・・
あ、呼び出し可能かどうかは調べないということですかね。
838nobodyさん:2006/06/05(月) 16:52:30 ID:???
primary key でインデックスつけたのを大きい順にデータを取得するにはどうやればいいですか?
839nobodyさん:2006/06/05(月) 16:55:19 ID:???
>>838
PHPで?
全件取得後、ソート
840nobodyさん:2006/06/05(月) 17:02:08 ID:???
>>839
すみません。
mySQLでインデックスつけたデータです。

全権取得後ソートするしかないですか?
841nobodyさん:2006/06/05(月) 17:05:34 ID:???
>>840
スレ違い、板違い
842nobodyさん:2006/06/05(月) 17:10:58 ID:???
web用途なんですけど。

ダメですか。
843nobodyさん:2006/06/05(月) 17:26:25 ID:???
>>842
オレは構わないけど、適切な回答が得られるかどうかしらない。

MySQLは知らないけど、DESCじゃダメなの?
844nobodyさん:2006/06/05(月) 17:36:29 ID:???
>>842
mySQLがPHPなら教える
845nobodyさん:2006/06/05(月) 17:52:24 ID:???
ファイルのx行目から読み込みってできますか?
846nobodyさん:2006/06/05(月) 17:57:00 ID:???
>>845
改行の位置がわからんからいきなり行の指定はできない
fileとかで読み込んでするしかないね
DBがいいと思う
847nobodyさん:2006/06/05(月) 18:33:11 ID:???
>>845
固定長レコードのファイルなら出来る
848nobodyさん:2006/06/05(月) 18:40:11 ID:???
>>846
なるほど。分かりやすかったです。
ありがと
>847
バラバラっす

SQL挑戦してみよっかな
849nobodyさん:2006/06/05(月) 20:07:37 ID:qfd9QG5u
質問させてください。

認証というか、いわゆるログイン/ログアウトの仕組みをつくりたいのですが、
1.ID/PASS2項目のログインフォームを作る
2.submitしたら、ユーザーテーブルにつないで、POSTされたID/PASSが存在するかチェックする
3.合致するレコードがあったら、ようこそhogehogeさん!とかやる
4.その後はsession_start()をやる
5.セッションクローズしたらログアウト

こんな流れでいいんでしょうか?
ユーザーテーブルの管理は管理者が手動で行うものとします。
とりあえずセキュリティ的なものは最低限にとどめるものとします。
なにか足りないものとかありますか?
850nobodyさん:2006/06/05(月) 20:12:53 ID:???
とりあえづ作ってみたらいいじゃん
注意することは↓くらい?
・session_startは始めにやっとけ
・POSTされたデータをそのままDBに渡すな
851nobodyさん:2006/06/05(月) 20:16:58 ID:???
なんで人に聞く前に自分で試さないかな?
そっちの方が早くね?
852849:2006/06/05(月) 20:22:29 ID:qfd9QG5u
>850
れすありがとうございます。
POSTされたデータをそのままDBに渡さないというのはどういうことを指すのでしょうか?

いまとりあえず考えたのは
usernameとpasswordをPOSTして、
その値でwhere username = $_POST['username'] and password = $=POST['password']
みたいなクエリをつくってごにょごにょしようと思ったのですが、
これはまずいですかね?
853849:2006/06/05(月) 20:26:11 ID:qfd9QG5u
>851
そうですよね。
認証の仕組みについて、なにも資料を持っていないので、
想像でこんな感じなのかなと思ったのですが、
そもそもそんなプロセスじゃダメだ!と言われるかなと思い、
聞いてみました。
とりあえず書き始めます。
ありがとうございます。
854nobodyさん:2006/06/05(月) 20:38:28 ID:ycACK6dg
初心者です、すみません。
MySQLにnam、age、hed、bst、wst、hip、fotというレコードがあります。
これをfputs()でnam[0],age[0],bst[0],wst[0],hip[0]\n
nam[1],age[1],bst[1],wst[1],〜[EOF]
というcsvファイルに落としたいです。
hedとfotはいりません。
よろしくお願いします。
855nobodyさん:2006/06/05(月) 20:47:56 ID:???
>>854
丸投げは専用のスレにて承ります。
宜しくお願い致します。
856nobodyさん:2006/06/05(月) 20:49:48 ID:???
ここはクダ質
857nobodyさん:2006/06/05(月) 20:54:31 ID:???
>>854
うわ、ひでぇ文章だな。何となく理解できるが、それ読んでも意味わからない奴たくさんいると思うぞ。
国語勉強しないと駄目だな。
858nobodyさん:2006/06/05(月) 21:03:24 ID:???
>>852

XSS
859nobodyさん:2006/06/05(月) 21:17:14 ID:???
>>849
PEAR::Auth使えば?
860nobodyさん:2006/06/05(月) 21:20:32 ID:/Q4wZYeJ
trim()について、PHPマニュアルを読んだのですが…

> charlistパラメータにより、削除する 文字を指定することも可能です。
> 削除したい全ての文字をリストに してください。
> ..を文字の範囲を指定する際に 使用可能です。

"\n" と "\r" を削除したいのですが、具体的にはどうリストにすればよいのでしょうか?
区切り文字は必要なく、普通に:

trim ($var, "\n\r")

と書いてしまえばよいのでしょうか?
861849:2006/06/05(月) 21:36:40 ID:qfd9QG5u
>858,859
レスどうもです。いまスクリプト書いています。

XSS脆弱性については勉強が追いついてないです。POSTのデータは
サニタイズ(でいいのかな?)して、タグの除去等は行うつもりです。
passwordの値もmd5()の文字列にしようと思っています。
他になにかありますか?

実はPEARのAuthはカンタンでイイ!みたいな話を小耳に挟み、
サンプルコードなど書いてみたのですが、
なんとなく時期尚早というか、オーソドックスなやり方を知っといたほうが
いいと思ってやめときました。
やはりPEAR::Authはオススメなのでしょうか?
862nobodyさん:2006/06/05(月) 21:55:55 ID:???
>>860
それでやってみたところ、何か問題が起こったのか?
863nobodyさん:2006/06/05(月) 22:05:33 ID:???
>>861
XSSよりSQLインジェクション
864849:2006/06/05(月) 22:51:24 ID:qfd9QG5u
>863
どうもです。SQLインジェクションですか。対応しないとまずいですね。
以下のスクリプトはセキュリティ的なものは無視するとして、基本はコレでいいですかね?

//dbに接続したとして
$name = $_POST['username'];
$pass = md5($_POST['password']);

$sql = "select * from usertbl where username = '$name' and password = '$pass'";

$rst = mysql_query($sql, $con);
$col = mysql_fetch_array($rst);
$name = $col['username'];

if (strlen($name)) {
echo "ようこそ".$name."さん";
}
else {
echo "そんな人いません";
}

添削お願いいたします。

865nobodyさん:2006/06/05(月) 22:54:44 ID:???
>>864
動かして見ればいいだろ。


セキュリティ的には確かに0点どころかマイナスだな。
866849:2006/06/05(月) 23:00:27 ID:qfd9QG5u
>865
早速レスありがとうございます。
一応意図した通りに、登録されてる場合は名前が出るし、登録されてない人は、
いないといわれます。

セキュリティ的なものはあとでhtmlspecialcharとかしようと思ったのですが、それでもマイナスでしょうか....。
どのへんが致命的にイクナイ!ですかね?
867nobodyさん:2006/06/05(月) 23:12:36 ID:???
>>886
アドスラに気を配るのと、
シングルクォートもどうにかする。

username = '' or username is not null and password = '$pass';
みたいになる。
868nobodyさん:2006/06/05(月) 23:13:59 ID:???
is not null じゃあれなので、
username = '' or username != ''

$nameに、
' or username != '
みたいな感じで入れられるのを想定する
869nobodyさん:2006/06/05(月) 23:36:10 ID:???
pear.php.net -- 落ちてないか?
つながんねーYo!
870nobodyさん:2006/06/05(月) 23:36:30 ID:???
MySQLに入っているデーターを配列に入れる関数ってありますか?
小5なんで分かりやすく教えてくれると嬉しいデス
871nobodyさん:2006/06/05(月) 23:46:46 ID:???
mysql_fetch_arrayとかで1行ずつ取り出し、配列に入れてくしかない。
ttp://kids.goo.ne.jp/cgi-bin/kgbody.php?BL=0&SY=0&TP=http://php.s3.to/man/function.mysql-fetch-array.html

なお、PostgreSQLなら、pg_fetch_allでいっぺんに取得できる。
872nobodyさん:2006/06/06(火) 00:01:24 ID:???
>>870
悟リ?
873nobodyさん:2006/06/06(火) 00:13:32 ID:???
うまく検索出来なかったので、質問します。
正規表現をしたい箇所で[0-9A-Za-z]に記載して半角英数字は表示されるのですが、
- を表示させたい場合、どのように書けばいいのでしょうか?
874nobodyさん:2006/06/06(火) 00:28:43 ID:???
>>873
\-
875nobodyさん:2006/06/06(火) 00:29:38 ID:???
>>873
エスケープ
876nobodyさん:2006/06/06(火) 00:29:40 ID:???
\
877nobodyさん:2006/06/06(火) 00:30:35 ID:???
©
878nobodyさん:2006/06/06(火) 00:31:57 ID:???
>>873
ブランケット内の最後に書けばよろし。
[0-9A-Za-z-]
879849:2006/06/06(火) 00:32:55 ID:KDLdvTgn
>867,868
ありがとうございます。
確かに危険ですね。
セキュリティ対策も同時進行で勉強するようにします。
phpセキュリティのオライリー本なども出てたので。
880873:2006/06/06(火) 00:37:28 ID:???
>>874-878
ありがとうございます。勉強になりました
881nobodyさん:2006/06/06(火) 01:25:50 ID:P9qxVQD6
ある掲示板スクリプトを使用中で、そのスクリプトは投稿者のIPを記録しない。
記事とその記事の投稿者IPが対で分かるには、どう書けばいいですか。
下のものでは不可能でした。
<?php
$logfile = "./.abc";
$u1 = date("Y/n/j D H:i:s",time()) . "," .
$HTTP_SERVER_VARS["HTTP_USER_AGENT"] . "," .
$HTTP_SERVER_VARS["SERVER_NAME"] . "," .
$HTTP_SERVER_VARS["GATEWAY_INTERFACE"] . "," .
$HTTP_SERVER_VARS["QUERY_STRING"] . "," .
$HTTP_SERVER_VARS["REMOTE_ADDR"] . "," .
$HTTP_SERVER_VARS["REMOTE_HOST"] . "," .
$HTTP_SERVER_VARS["CONTENT_LENGTH"] . "," .
$times = time();
$postip = $_SERVER['REMOTE_ADDR'];
$new_msg = "$name\t$wburl\t$com\t$times\t\t\t$postip\n";
$HTTP_SERVER_VARS["HTTP_REFERER"] . "\n";
$fp = fopen($logfile, "a");
flock($fp,2);
fwrite($fp,$u1);
flock($fp,3);
fclose($fp);
?>
をrequire。
882nobodyさん:2006/06/06(火) 01:32:43 ID:???
getenv("REMOTE_ADDR");
883nobodyさん:2006/06/06(火) 01:34:30 ID:???
require
884nobodyさん:2006/06/06(火) 01:35:10 ID:???
.abcのパーミッション
885nobodyさん:2006/06/06(火) 04:15:03 ID:???
(´-`).。oO($new_msgとかその直下の行って何のためにあるんだろう・・・)
886nobodyさん:2006/06/06(火) 04:56:22 ID:???
本と他所のPHPプログラムを見ながらオリジナルの物を組んでいるのですが

if(!$name||ereg("^( | )*$",$name)) error("名前が書き込まれていません");

これの意味が分かりません
$nameが記入されているかどうかを調べる処理というのは分かるんですが
それぞれの文字列にどういう意味があるのか分かりません
検索しようにも記号ばかりなのでぜんぜん引っかかりません・・・
どうかご教授お願いします
887nobodyさん:2006/06/06(火) 06:33:03 ID:???
>>881,886
そんな腐ったプログラムは窓から投げ捨てろ
888nobodyさん:2006/06/06(火) 06:47:22 ID:???
>>886
オマエはifも分からないと言うのか
マニュアル嫁
889nobodyさん:2006/06/06(火) 07:22:28 ID:???
ご教授ではなく「ご教示」
見よう見まね?
890nobodyさん:2006/06/06(火) 07:35:32 ID:???
PHP5では例外がサポートされてるけどfinallyがサポートされてません。
例えば次のようなtry-catchがあったとして
try {
 ...throwする可能性のある処理...
} catch (MyException $ex) {
 ...catch処理...
}

finallyと同じことをしようとすると、今は次のようにしています。

try {
 ...throwする可能性のある処理...
 ...後始末...
} catch (Exception $ex) {
 ...後始末...
 if ($ex instanceof MyException) {
  ...catch処理...
 } else {
  throw $ex;
 }
}

いくらなんでもこれはださいので、もっとスマートに書けないかと考えているのですがいい考えがありません。
みなさん、finally処理はどうやってますか?
 
 
891nobodyさん:2006/06/06(火) 08:25:28 ID:???
>>886
eregは調べたのかい?
892nobodyさん:2006/06/06(火) 14:55:13 ID:19d/3eWN
PHPというか数学的な質問なんですが、
変数$aの数値が2の何乗かどうか調べたいのですが、そのような関数も見つからなかったので、自作しようかと思うんですが、どうすればスマートですかね?

例えば
$a=2の時は1
$a=8の時は3
$a=5の時は2余り1
としたいです。

考えたのは2*$iを繰り返しながら比較していくものですが、他に手はありませんかね?
893nobodyさん:2006/06/06(火) 14:59:32 ID:ZfYvkt9o
log(底が2)をとった結果が整数ならいいのでは?
894nobodyさん:2006/06/06(火) 15:01:53 ID:ZfYvkt9o
勘違い。読み間違えた。
log(底が2)をとればいいのでは?余りの表現も簡単にできそう。
895nobodyさん:2006/06/06(火) 15:04:17 ID:???
>892
intval(log($num, 2))
896nobodyさん:2006/06/06(火) 15:23:29 ID:???
ファイル名(文字列)から拡張子を取り除く関数ってありませんでしたっけ?
897nobodyさん:2006/06/06(火) 15:30:49 ID:???
>>896
だからマニュアルを・・・
拡張子分かってるならbasename
分かってないならpathinfoも参照
898nobodyさん:2006/06/06(火) 15:34:54 ID:???
>>897
ありがとうございます。
マニュアルは検索かけたんですけど、うまくひっかからなかったもので。
899nobodyさん:2006/06/06(火) 15:49:37 ID:???
>>898
>>897がひっかかってよかったな
900nobodyさん:2006/06/06(火) 16:15:28 ID:???
どっかに05/27/2006のphp_manual_ja.chmの文字化け解消されたヤツ落ちてませんか?
901892:2006/06/06(火) 16:16:26 ID:19d/3eWN
>>893-895
うほ、レス早いですね。ありがとうございます、期待通りできましたしコードがすっきりしました!
精進いたします。
902nobodyさん:2006/06/06(火) 19:04:40 ID:W8TvM/A+
mysql が入ってるレンタル鯖で

<?
$dbh = mysql_connect('localhost', 'ユーザ名', 'パスワード') or die("Unable to connect to MySQL");
print("Connected to MySQL<br>");;
mysql_close($dbh);
?>

ってやったんですけど、HTTP200しか返ってきません(中身のまったくないtext/htmlだけ)。
db接続失敗したなら "Unable to connect to MySQL" って出てほしいんですが。。。
ログを見る権限もないのでどうすればいいのかわかりません。
どなたか教えてください。
903902:2006/06/06(火) 19:05:58 ID:???
もちろん 'ユーザ名', 'パスワード' は実際のもので動かしています。
904nobodyさん:2006/06/06(火) 19:27:40 ID:???
テキストログ(log.txt)に一行ずつデータが入っているとします。

どのくらいの行が入っているか調べる方法ってありますでしょうか?
(もしくは現在○行目など)
リファレンス等見たのですが、適当な関数が無く、どうしたらいいかと思ってます
905nobodyさん:2006/06/06(火) 19:30:45 ID:???
改行コードでも探してみてはいかがでしょう。
906nobodyさん:2006/06/06(火) 19:38:32 ID:???
>>902
1行目に無意味にechoでも追加してみて,
それが表示されないようならデータベース以外に問題がある。
という切り分けはやったかい?
907nobodyさん:2006/06/06(火) 20:15:10 ID:???
>>904
wc -l
908nobodyさん:2006/06/06(火) 20:27:01 ID:???
>>904
$lines = @file('log.txt');
echo count($lines);
909nobodyさん:2006/06/06(火) 20:38:54 ID:Jdx8zpwk
オークションなどで指定の時間に達したら管理者にメールを送信する
仕組みがありますが、あれってPHP側と言うより、サーバ側ですよね?
Cronで処理しているような。

PHPで同様の仕組みって可能なのでしょうか?
910nobodyさん:2006/06/06(火) 20:42:12 ID:???
>>909
cronで処理する。
911nobodyさん:2006/06/06(火) 20:53:28 ID:???
>>909
CLI版のPHPで作られたcronのクローンがあるぞ。
912nobodyさん:2006/06/06(火) 21:47:47 ID:q0hn4TST
$var = "ふんにゃかふんにゃか
らんらんらん♪

どーでもいいでーすよ...";

正規表現についての質問になってしまうと思うのですが、これを:

<p>ふんにゃかふんにゃからんらんらん♪</p>
<p>どーでもいいーですよ...</p>

のようにpタグで括りたいと思っています。
私の考えた正規表現では、普通に改行しただけでpタグに括られてしまいます...

これを *空行* がある行をマッチさせるにはどういう表現を使えばよいのでしょうか?
よろしくです。
913nobodyさん:2006/06/06(火) 21:54:45 ID:???
^$
914nobodyさん:2006/06/06(火) 22:40:31 ID:???
DoCoMo携帯の、端末番号で投稿OK、NGを判定したいんですがどのような方法があるでしょうか?
また皆さんはどんな方法でやったますか?
915nobodyさん:2006/06/06(火) 23:02:30 ID:???
端末番号ゲッチュ

自分の好きな番号と照らし合わせる

投稿出来るか否か判断。
916nobodyさん:2006/06/06(火) 23:09:30 ID:???
>>891
レスありがとうございます
eregの意味は分かっていましたが
色々と調べていったところ「メタ文字」について分かっていなかったようです
分かりづらい質問ですんませんでした
917nobodyさん:2006/06/06(火) 23:56:16 ID:???
>>915
質問下手でしたわ

端末IDが送られているか、いないかをはんていしたいということです
918nobodyさん:2006/06/07(水) 00:02:26 ID:5StxHtuD
OS等に左右されにくいPHPの勉強をしてみようと思っているのですが
PHPにもやはりできることとできないことがあると思うのですが
下記のようなプログラムをPHPで書くことは可能でしょうか?

碁盤の目を表示させ
キーボードの↑↓等で 碁盤の中の升目をカーソルが移動する
移動している際、今どこの位置にいる(縦x、横y)か常に画面上に表示する

□□□縦2
□■□横2
□□□
下を押すと
□□□縦3
□□□横2
□■□

このようなプログラムを書いてみたいと思っております

もし可能であってもやはり移動するごとに画面のロードのためサーバと通信しないといけないようになってしまうのでしょうか?
919nobodyさん:2006/06/07(水) 00:08:26 ID:???
>>917
if(isset($_REQUEST['utn']))
920nobodyさん:2006/06/07(水) 00:22:36 ID:???
>>918
それはPHPじゃ無理だろうな
Javaとかじゃないと無理だと思う。
しかもサーバ通信をその都度したくないのならJavaScript(ajax)
まぁ、ajaxでもその都度サーバとアクセスするんだけどね。ただ、ページ全体のリロードはかからない。
921nobodyさん:2006/06/07(水) 00:45:39 ID:???
メモ帳じゃ文字化けするようなのでPHPエディタを使おうと思い、
PHPファイルを開くときはこのエディタを使うよう指定したんですが、
PHPファイルをダブルクリックしてPHPエディタが起動しても
何も書かれてない白紙状態なんですが・・・。どうしたもんだろ・・・
922nobodyさん:2006/06/07(水) 00:47:08 ID:???
>>918
クライアント側はFlashに任せるしかないんでないの。
923nobodyさん:2006/06/07(水) 01:47:58 ID:???
phpで書かれたうpろだのスクリプト集とかありますかね?
今のところレッツPHPくらいしか見つからない・・・
924nobodyさん:2006/06/07(水) 02:11:15 ID:???
>>918
その程度なら、JavaScriptでやるのが簡単だ
925nobodyさん:2006/06/07(水) 02:44:14 ID:???
>>923
HotScripts行って探して来い。
あとスクリプト探すスレもあったんじゃねぇか
926nobodyさん:2006/06/07(水) 03:10:35 ID:???
あったか?
927nobodyさん:2006/06/07(水) 04:07:34 ID:???
教えてください。

phpの拡張子のあとスラッシュが入って引数を渡しているようなのですが、どのようにして変数の受け渡しをしているのでしょうか?
サーバー側の設定でしょうか?


ttp://www.hostelworld.com/availability.php/KhaosanTokyo-Tokyo-10077
928nobodyさん:2006/06/07(水) 04:10:47 ID:???
>>927
$_SERVER["PATH_INFO"]
929nobodyさん:2006/06/07(水) 04:17:34 ID:???
>>928

有難う御座います。<(_ _)>
もう少し勉強してきます。
930nobodyさん:2006/06/07(水) 06:31:10 ID:???
>>927
Apacheモジュールのmod_rewriteを使って、
PHP側は特に工夫しない手もある。
931nobodyさん:2006/06/07(水) 06:47:22 ID:???
>>919
それってAUにも有効ですか?
AUも拒否しちゃうんじゃないですか?
932nobodyさん:2006/06/07(水) 06:49:03 ID:JStUUvxx
>>927
availability.php
はディレクトリ名だったりするのかも。
933nobodyさん:2006/06/07(水) 07:30:40 ID:???
>>931
端末判定して処理分けろ
934nobodyさん:2006/06/07(水) 07:59:51 ID:???
>>931
auはサブスクライバIDだからまた別だろ。Vodaはシリアルナンバー。
少しは携帯会社のホムペ読んで勉強しろ。
935nobodyさん:2006/06/07(水) 09:20:37 ID:???
>>932
それは盲点だった。拡張子が付いてると先入観が。
936nobodyさん:2006/06/07(水) 10:22:39 ID:AURV4K35
くだらない質問します。
僕はPEARとSmartyをレンタルサーバのドキュメントルートに置いて、
ファイルにはrequire("PEAR/DB.php")とか
require("Smarty/libs/Smarty.class.php")とか書いているのですが、
これは間違った使い方ですか?
どこかで、ini_setでinclude_pathを〜というのを読み、やったのですが、
実際あってもなくても変わりません。
requireで直接クラスファイルを指定しても問題ないのでしょうか?
937nobodyさん:2006/06/07(水) 10:43:38 ID:???
今オブジェクトル志向とゆうものを覚えようかと思っているんですが、くだらない質問させてください

オブジェクトル志向でなければできないものってありますか?

またある場合はどんなものですか?
938nobodyさん:2006/06/07(水) 10:45:21 ID:WC4qWOrZ
オブジェクトル志向あげ
939nobodyさん:2006/06/07(水) 11:19:36 ID:???
>オブジェクトル の検索結果 約 8 件中 1 - 3 件目 (0.39 秒)
意外と引っかかって笑える
940nobodyさん:2006/06/07(水) 11:44:41 ID:???
オブジェクトル志向に該当するページが見つかりませんでした。
941nobodyさん:2006/06/07(水) 12:43:23 ID:???
>>939
でもよく見たらただのタイプミスっぽいな。全部同じページの同じ箇所で
他の箇所はオブジェクトになっているし。
942nobodyさん:2006/06/07(水) 13:05:41 ID:???
>>937
勝手に「オブジェクト指向」と読み替えてみるがよろしいか。
オブジェクト指向でなければできないというような事はない。
943452:2006/06/07(水) 13:13:28 ID:???
おっさんたちはやく教えてくれよ!いきずまっててぜんぜん先進めないじゃん!
944nobodyさん:2006/06/07(水) 13:15:14 ID:???
>>927
「mod_rewrite」です。
945nobodyさん:2006/06/07(水) 13:26:47 ID:???
>>943みたいなクズ人間には何も教えたくないね。

しかも質問の内容がまたクズ過ぎる。
回答を待ってる間に自分でGoogle検索すら出来ないのだろうか。
946nobodyさん:2006/06/07(水) 13:33:49 ID:AURV4K35
>936
Pearはini_setしないと動かなくね?
947452:2006/06/07(水) 13:34:19 ID:???
>>945
はぁ教えろよ!わざわざ学校休んだ漏れがかわいそうじゃないのか??(´;ω:`)口わるいのはあやまるからさ…(´;ω:`)
948452:2006/06/07(水) 13:37:37 ID:???
>>870
ちなみに質問これだぞ間違えないでくれよな(´;ω:`)
949nobodyさん:2006/06/07(水) 13:39:57 ID:???
おまえの名前がなぜ452なのか、まずそこから教えろ
950452:2006/06/07(水) 13:51:57 ID:???
生年月日を入れてみた(`.ω.´)b
951nobodyさん:2006/06/07(水) 13:56:16 ID:???
こいつぁ何やってもダメだな
952nobodyさん:2006/06/07(水) 13:57:18 ID:???
>>950
>>870の回答なら>>871にある
953452:2006/06/07(水) 14:01:43 ID:???
>>951
答えないならここ見るな
>>952
サンキュー(`.ω.´)b
954nobodyさん:2006/06/07(水) 14:03:18 ID:???
>>953
とことんダメなヤツだな
礼なら>>871にもしろよ
955452:2006/06/07(水) 14:05:56 ID:???
>>871
サンキュー
>>954
おっさんより将来明るいよてかもう1個質問してもいい?(`.ω.´)?カラム(?一列のことだよね?)だけ指定して配列に入れたいときはどうすればいいの?
956nobodyさん:2006/06/07(水) 14:18:28 ID:???
いつからここは「マニュアルを代わりに調べるスレ」になったんだ…
957nobodyさん:2006/06/07(水) 14:26:21 ID:???
>>955
単に将来がまだ未定なのを「明るい」とは言わない。
958nobodyさん:2006/06/07(水) 14:28:42 ID:???
959nobodyさん:2006/06/07(水) 14:28:50 ID:???
>>955
将来もクソもお前来年氏ぬかもしれんしな
960nobodyさん:2006/06/07(水) 14:30:31 ID:guJlw/CS
PHPを途中で中断するやり方教えてください。

if (携帯からのアクセスではない){
   echo "携帯からアクセスしてください";
   処理を中断する。←これ
}
<HTML>
〜〜〜
</HTML>

つまり、中断したらその下は表示されなくしたいです。
961nobodyさん:2006/06/07(水) 14:30:35 ID:???
年齢を逆手に取った気で何も調べないガキの未来が明るいわけないだろ。
学校までさぼりやがってお先真っ暗だろ。ばーか
962nobodyさん:2006/06/07(水) 14:32:57 ID:???
>>960
マニュアル嫁
exit
963nobodyさん:2006/06/07(水) 14:41:50 ID:???
マニュアル読まない人、本当に多いね…
PHPはドキュメント頑張ってるし、日本語訳もすぐに出てくるし、恵まれた環境なのに。
2chで聞いて返事待つより、マニュアルあたったほうが遥かに早い。
964452:2006/06/07(水) 14:42:16 ID:???
>>961
学校の勉強は簡単だから問題ないお(`.ω.´)休んだって満点とれるし死ぬとかいうなお(`;ω;´)
965nobodyさん:2006/06/07(水) 14:44:18 ID:???
>>452
まあでも人はいつか氏ぬよ。これは'現代医学'では変わりない
966452:2006/06/07(水) 14:45:20 ID:???
漏れは死なないお(`;ω;´)特別だお
967nobodyさん:2006/06/07(水) 14:47:32 ID:???
うわ、頭悪すぎww
968nobodyさん:2006/06/07(水) 14:54:51 ID:???
まあ教えてもらって嬉しかったら、今度は教える側に回ってやってくれ。
そうやってこの世は続いていくんだ。
969nobodyさん:2006/06/07(水) 14:59:29 ID:???
死なないのにずっと教えて貰う立場だったらすっげー哀れだな・・・
970452:2006/06/07(水) 15:14:50 ID:???
調べるより調べさせるほうが手間いらずでイイ!(○`.ω.´)bバッチグー!漏れは死ぬわけないお
971nobodyさん:2006/06/07(水) 15:16:33 ID:???
いじめで登校拒否か・・・同情してあげよう。
972nobodyさん:2006/06/07(水) 15:38:10 ID:???
>>452
雑談なら他でやれ
973nobodyさん:2006/06/07(水) 15:59:10 ID:???
入力された日付が正当性のある日付か調べるいい方法はないでしょうか?
具体的には、

2000/10/1
2005年01月3日
2003-3-1
平成8年1月2日

など不定形で得られた日付を、
20050105
等、定型にフォーマットしたいです。
974nobodyさん:2006/06/07(水) 16:03:50 ID:???
質問させてください。
(スレ違いだったらごめんなさい。どこで質問していいのかわかりませんでした。)

PHPでsafe_mode = on にすると、phpMyAdminが開けません。
エラーは「#1045 - Access denied for user: 'xxx@localhost' (Using password: NO) 」と出ています。
safe_mode = off にすると開けますが、セキュリティのため、onにしたいので困っています。
よろしくお願いします。
975nobodyさん:2006/06/07(水) 16:07:25 ID:???
>>973
正規表現でもつかってフォーマットで分岐して値とったらいいじゃないすか?
976nobodyさん:2006/06/07(水) 16:09:02 ID:???
>>975
ダメです。
977nobodyさん:2006/06/07(水) 16:20:05 ID:???
>>976
何がダメなの?
978nobodyさん:2006/06/07(水) 16:24:45 ID:???
質問、
配列をstrlenしたら要素を合計した値が帰ってきますか?
979nobodyさん:2006/06/07(水) 16:38:01 ID:???
そのくらい試そうよ
980nobodyさん:2006/06/07(水) 16:42:59 ID:???
>>973
マニュアル(日付関数)を読むと良いと思うよ。
その上で、そこにある機能で不足するなら再度訊きにおいで。
# UNIXタイムスタンプの範囲だとダメだとか。
981nobodyさん:2006/06/07(水) 17:28:34 ID:???
配列ソートについての質問なのですが、
ローマ字、カナ、漢字など関係なく50音順に配列させる方法を教えてください。
表示する文字とは別に、「よみがな」のような項目を作るのでしょうか?
982nobodyさん:2006/06/07(水) 17:29:03 ID:???
phpって最初からEUCでプログラムしたほうが良いのですか?
なんか秀丸の自動選択でプログラムしてて、動作確認すると「ソ」や「十」の文字がエスケープされていたので、
EUCに保存しなおしたら、すべての日本語が文字化けして困ったのですが・・・
しかもSJISに再設定しても化けた文字が直らなかったし・・・
983nobodyさん:2006/06/07(水) 17:34:42 ID:???
>>981
漢字をどうやって50音順にならべろと?

>>982
コピー→EUCモード→ペースト
984nobodyさん:2006/06/07(水) 17:35:34 ID:???
下質すいません!

if ($hoge) $hoge1 = 1; $hoge2 = 2;

は文法的に正しいでしょうか?
{}で括った方がベターでしょうか?
985nobodyさん:2006/06/07(水) 17:38:16 ID:???
>>983
ウホッ! ほんとだw
986nobodyさん:2006/06/07(水) 17:58:21 ID:???
>>984
どういう結果を求めてるのか分からんが
それだと最初の $hoge1 = 1; しか対象にならん。 $hoge2 = 2; は常に実行される。
987984:2006/06/07(水) 18:11:42 ID:???
if ($hoge){ $hoge1 = 1; $hoge2 = 2; }
と同様の結果が得られているようなんですが環境によるんでしょうか。
988nobodyさん:2006/06/07(水) 18:25:39 ID:LinrwTZ1
質問です。
田中 出席番号14番 80点
佐野 出席番号17番 44点
岡田 出席番号21番 31点
吉永 出席番号28番 75点
山田 出席番号30番 98点

これを、点数の高い準に並べて
山田 出席番号30番 98点
田中 出席番号14番 80点
吉永 出席番号28番 75点
佐野 出席番号17番 44点
岡田 出席番号21番 31点

としたいのですけど、
どのようにすればよいですか?
$array[0] = array("田中","80","14");
$array[1] = array("佐野","44","17");
$array[2] = array("岡田","31","21");
$array[3] = array("吉永","75","28");
$array[4] = array("山田","98","30");
arsort ($array);
のようにしてもうまくいかなくて困っています。
989nobodyさん:2006/06/07(水) 18:30:13 ID:???
>>988
array_multisort()
990nobodyさん:2006/06/07(水) 18:31:44 ID:???
もしくはusort()
991nobodyさん:2006/06/07(水) 18:34:54 ID:LinrwTZ1
>>989-990
すみません、どんなのかはわかったのですけど、
どのように書けばよいかわかりません。
良ければもう少し詳しく教えていただけませんか?
お手数おかけして申し訳ないです。
992nobodyさん:2006/06/07(水) 18:37:24 ID:???
>>987
>>986が全て。
$hogeをtrueにしてもfalseにしても同じ結果何なるんだったら
藻前はスーパーハカー
993nobodyさん:2006/06/07(水) 18:40:17 ID:???
array_multisort($array, 2);

見たいな感じででソートできればうれしいんだけどね
994nobodyさん:2006/06/07(水) 18:42:45 ID:???
function my_cmp($a, $b){
if ($a[2]) == $b[2])){
return 0;
}
return ($a[2] < $b[2]) ? -1 : 1;
}

usort($arrayr, 'my_cmp);
995nobodyさん:2006/06/07(水) 18:56:28 ID:???
996nobodyさん:2006/06/07(水) 18:57:43 ID:???
997nobodyさん:2006/06/07(水) 20:22:40 ID:???
>>936
ttp://jp.php.net/manual/ja/function.include.php に、
requireやincludeした時にどういう場所をどういう順番で探していくか書いてあるから見てごらん。
998nobodyさん:2006/06/07(水) 20:22:49 ID:???
>>963
逆引きリファレンスみたいなのがないからじゃね?


こうしたい → 関数がわからん… → はあマニュアルを最初から読むんですか...('A`)
999nobodyさん:2006/06/07(水) 20:40:24 ID:???
>>998
公式にあるじゃん

こうしたい→関数わからん→公式リファレンス→○○関連→それらしい名前の関数発見→キター(゚∀゚)--!!
1000nobodyさん:2006/06/07(水) 20:57:18 ID:???
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。