【PHP】質問スレッドpart19【php】

このエントリーをはてなブックマークに追加
1nobodyさん
・PHP全般の質問スレです。
・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。


■本家
 http://www.php.net/

■日本 PHP ユーザ会
 http://www.php.gr.jp/

■PHP マニュアル
 http://www.php.net/manual/ja/

■PEAR マニュアル
 http://pear.php.net/manual/ja/

過去スレ, 関連スレ等>>2-4


抜けているものがあったら補足願います
2nobodyさん:04/07/16 07:13 ID:KvHeypq/
過去スレ
【PHP】質問スレッドpart18【php】
http://pc5.2ch.net/test/read.cgi/php/1087191395/
3997:04/07/16 08:08 ID:G5BXIcyS
http://ns1.php.gr.jp/pipermail/php-users/2003-December/019882.html

preg_replace_callback関数の勉強のために上記のHPより以下のものを引用させて使ってみようと試してみたのですが
どうもうまく動作いたしません。


$html = preg_replace_callback( '/\[\[(.+):(.+)\]\]/', 'makeLink', '[[title:url]]' );
function makeLink($m){
return '<a href="'. rawurlencode($match[2]). '">'. htmlspecialchars($match[1]). '</a>';
}

error messageは

Warning: preg_replace_callback() requires argument 2, 'makeLink', to be a valid callback in

これは関数の定義がおかしいという解釈でよろしいのでしょうか?もしよろしければどこがおかしいのかご指摘お願いいたします。
4nobodyさん:04/07/16 09:19 ID:???
「\0」などの文字を挿入し、例えば「script」タグを「\0script」と偽装することで、
危険なスクリプトがstrip_tags()を通過できてしまう。

↑ってあるけどさぁ、PHP 4.3.7以前のバージョンでも通らないんだけど。
嘘のアナウンスながすなよなぁ
5994:04/07/16 09:56 ID:???
>3
$html = preg_replace_callback( '/\[\[([^:]+):([^]]+)\]\]/', 'makeLink', '[[title:url]]' );
function makeLink($match){
return '<a href="'. rawurlencode($match[2]). '">'. htmlspecialchars($match[1]). '</a>';
}

$mで引数で受けているのに$matchになってるよ
6nobodyさん:04/07/16 10:15 ID:???
>>4
strip_tags() に第2引数を指定したときの問題。

echo strip_tags("<\0script>alert()</script>", "<s>");

として確認。
XSS が可能かどうかはユーザが使用しているブラウザによるけど。
IE は XSS が可能だったかな。
7994:04/07/16 10:36 ID:???
どう頑張ってもダメだったからsudoで強引に実行するようにしたよ
セキュリティうんこ過ぎヌルポ(゚д゚)<シメジ
8nobodyさん:04/07/16 11:12 ID:VHr1659r
>>7
がっ
9nobodyさん:04/07/16 12:09 ID:G5BXIcyS
$text=preg_replace_callback('/>([0-9]+)/','henkan',$text);

function henkan($str) {
$int = $str[1];
//--取得された数字で処理
return $int;
}


text配列内に文字列が格納されておりその中から ’>num(数字)’ にあてはまる部分を正規表現詮索し
<P title="<?php print("説明文"); ?>">  >num(数字)    </p>  このように置換させたいのですが
functionをどう定義すればよいのかよくわかりません。どなたか詳しく教えていただけないでしょうか?
10nobodyさん:04/07/16 12:33 ID:???
php-5.0.0RC3 から php-5.0.0 にバージョンアップしたのですが、

$_SERVER['PHP_AUTH_PW'] は取得できるのですが、
$_SERVER['PHP_AUTH_USER'] は取得できません。
なぜでしょうか?
クリーンインストールしたほうがいいのでしょうか。

##############################
## php-5.0.0

'./configure' '--enable-mbstring' '--enable-zend-multibyte' '--without-sqlite' '--with-pgsql=/usr/local/pgsql' '--disable-libxml' '--disable-dom' '--disable-simplexml' '--disable-xml'
'--without-pear' '--with-gd' '--with-zlib-dir' '--with-png-dir' '--with-jpeg-dir' '--with-xpm-dir' '--with-freetype-dir' '--with-apxs=/usr/local/apache/bin/apxs'

# SJIS ユーザ用の php.ini の設定 (http://www.php.net/manual/ja/ref.mbstring.php)


##############################
## openssl-0.9.7d
## mod_ssl-2.8.17-1.3.31
## apache_1.3.31

./configure --with-apache=../apache_1.3.31 --with-ssl=../openssl-0.9.7d --enable-shared=ssl

##############################
## OS 情報
## Vine Linux 2.6r4

# インストールの種類
カスタム

# パッケージグループの設定
X Window システム GNOME / Emacs エディタ / メール/WWW ツール / ファイルサーバ (NFS/SMB) / ネットワークワークステーション / 開発ツール / ドキュメント
11nobodyさん:04/07/16 13:09 ID:???
>>9
Apache 1.3.x との組み合わせで起きるバグです。
ttp://bugs.php.net/bug.php?id=29132
ttp://news.php.net/php.internals/11223
1211:04/07/16 13:10 ID:???
番号間違えた。
>>10
13nobodyさん:04/07/16 13:26 ID:???
PostgreSQLなどを絡めたプログラムでトランザクションのテストを
したい時は皆さんどうされてます?複数のPCで同時に送信!とか
しか思いつかないんですが○| ̄|_
14 ◆.jC7ANgFY. :04/07/16 14:02 ID:???
私はやったことないですが、

$time = ceil(time() / 120) * 120
sleep($time - time());

などと行頭に入れてみて、20個ほど起動すればいかがでしょう。
ふと思いついたことなんで参考までに。
15 ◆.jC7ANgFY. :04/07/16 14:04 ID:???
セミコロン抜けてましたと報告ついでに軽く説明。

$time = ceil(time() / 120) * 120;
sleep($time - time());

1行目でちょうどよい時間(次の偶数分00秒を決定する)
2行目でそのときまでsleepする。
運悪く偶数分00秒とかそういうのにあたらなければ大丈夫なはずです。
誤差は1秒ほどありますが、
16nobodyさん:04/07/16 14:05 ID:xpSWVZ91
質問です。
touchなどでファイルを作成すると所有者がapacheになります。
chownは無効なので他に変更する方法はないでしょうか?
今のところ umask(0); で動作は問題ありませんが、
何か手がありましたらお願いします。
レンタル鯖 Linux Apache/1.3.29 (Unix) PHP/4.2.4-dev safe_mode:off
17nobodyさん:04/07/16 14:21 ID:???
PHP4からPHP5.0.0にアップデートしたのですが、ファイルのアップロード
の取り扱いで躓いてしまいました。
<input type='file' name='file[]'>でPOSTあげしたのですが、
print_r($_FILES['file']);及びprint_r($_FILES['file'][0]);には何も変数がセットされて
おらずエラーになります。
print_r($_POST['file']);ではArray ( [0] => \"/home/hoge/hoge.tgz\" )となります。
18 ◆.jC7ANgFY. :04/07/16 14:25 ID:???
>>16
execやvirtual関数を使いcgiを通してファイルを作成する方法しかないようです。
# execでログインすることもできるかも・・・
1910:04/07/16 14:26 ID:???
>>11
ども。
2017:04/07/16 14:29 ID:???
enctype忘れてました;;すいません
21nobodyさん:04/07/16 15:15 ID:???
>>14
なるほど、その手法でトランザクション処理のテスタークラスなんか
作ってみて実験してみたいと思います。ありがとです(*´ω`*)b
2216:04/07/16 15:24 ID:vSsgWICn
>>18
レスありがとうございます。
その方向で調べてみます。
23nobodyさん:04/07/16 16:29 ID:???
質問です。

変数名を得る方法は無いでしょうか?
24nobodyさん:04/07/16 16:32 ID:???
>>23
ある
25 ◆.jC7ANgFY. :04/07/16 17:21 ID:???
>>23
こういうこと?
print_r($GLOBALS);
26nobodyさん:04/07/16 17:27 ID:???
>>25
get_defined_vars
27nobodyさん:04/07/16 17:42 ID:???
正規表現スレから誘導されてきました。
全角・半角を無視して検索文字列をハイライトするいい方法ありませんかね?
パフォーマンスが悪いのは承知で、
$hage = mb_convert_case($hoge, 'asKV')
$hage = preg_replace('/pattern/', '<span class="match">$0</span>', $hage);
$part = preg_split('/(<.+?>)/', $hage, 0, PREG_SPLIT_DELIM_CAPTURE);
$result = '';
$pos = 0;
foreach ($part as $key => $value) {
 if ($key % 2 == 0) {
  if (($len = mb_strlen($value)) > 0) {
   $result .= mb_substr($hoge, $pos, $len);
   $pos .= $len;
  }
 } else {
  $result .= $value;
 }
}
というのも考えてみたけど半角の濁点の処理などをさらに追加せねばならず、大変。
他に思いつくのは検索パターンを'a' => '[aAaA]', 'が' => '(?:ガ|が|ガ)'などに
予め置換しておくのもあるけど、置換用の配列を書くのがダルい。
mb_ereg_replaceかpreg_replaceのオプションで全角半角を無視ってのできないかなあ。
28nobodyさん:04/07/16 17:43 ID:23o0JgNK
WinXPのHomeでPHPを4.3.7から4.3.8に変えたんですが…
phpinfo()で見ると
SERVER_SOFTWAREにはApache/2.0.49 (Win32) PHP/4.3.8
と表示されてているものの
一番上のバージョン表記とHTTP Response HeadersのX-Powered-Byは
4..3.7のままです
バージョンアップ方法は
phpフォルダをそのまま全部上書き
php.iniを上書き
とやったのですが他に何かやらなければならないことってあるんでしょうか?
29nobodyさん:04/07/16 17:46 ID:3Z+JZGJD
>>28
php4ts.dllをC:\Windows\system32にコピーしてみ
30nobodyさん:04/07/16 18:01 ID:23o0JgNK
>>29
d!
直りました
31nobodyさん:04/07/16 18:08 ID:LgkOLcz8
質問です。
サーバ上にある●●.htmlというファイルを、
毎日0時にbackup_●●.htmlという風にコピーしてバックアップをとりたいのですが、
タイマーみたいに時間指定でプログラムを動かすにはどうしたらいいでしょうか?
32 ◆.CzKQna1OU :04/07/16 18:19 ID:???
>>31
cronとかじゃなくて?
33nobodyさん:04/07/16 18:35 ID:???
>>32
調べてみます!
34 ◆.jC7ANgFY. :04/07/16 18:49 ID:???
>>33
cronを使えるサーバーは少ないのでこういうのはカウンタに連動させたりするのがベスト。
35nobodyさん:04/07/16 19:03 ID:???
>>34
目的がバックアップと言ってるのにそれのどこがベストなんだよ。
36 ◆.jC7ANgFY. :04/07/16 19:04 ID:???
>>27
なぜか動くプログラム第二弾(ワラ
こういうのをご希望かな?

mb_internal_encoding(mb_detect_encoding('漢字コードをチェックしますよ'));

$value = 'Abcうソだドンと゛コドーん';
return make_pattern($value);

function make_pattern($value) { $v=mb_convert_kana(
mb_strtoupper($value),'AKVCS');for($i=0;$i<strlen($v);
$i+=2){$s=substr($v,$i,2);$k=mb_convert_kana($s,'ka');
$l=array(strtolower($k),$k,mb_strtolower($s),$s,
mb_convert_kana($s,'c'),mb_convert_kana($k,'K'),
mb_convert_kana($k,'H'));$l=array_unique($l);$r.='('.
implode('|',$l).')';}return $r;}
37nobodyさん:04/07/16 19:11 ID:ctj/r83y
>>33 >>34

Windows だって タスク・スケジューラー や
Cygwin 版の cron (+cygrunsrv) で できるんではないでしょうか
38nobodyさん:04/07/16 19:14 ID:ctj/r83y
>>37
>>34 は cron が自由に設定出来るようなプロバイダ鯖は、
あまり無いといいたいと 見た
39nobodyさん:04/07/16 19:19 ID:???
日本語はちょっと不自由ってことか。
40nobodyさん:04/07/16 19:30 ID:???
>>37=38
貴方以外はみんなわかってたよ
41nobodyさん:04/07/16 19:33 ID:ctj/r83y
>>27
while(($p=strpos($l,$key))!==false){
$l=substr_replace($l,'</span>', $p+strlen($key),0);
$l=substr_replace($l,'<span class="search-match">', $p,0);
}
42nobodyさん:04/07/16 19:49 ID:???
質問じゃないが、PHPの脆弱性発見だとさ。
知っている人なら対策コード書いてるor本体アップデートしてると思うがいちおうURL貼ります。

http://www.itmedia.co.jp/enterprise/articles/0407/16/news016.html
43 ◆.CzKQna1OU :04/07/16 20:26 ID:???
>>31
cronが無理な環境なら、timeで、たとえば0時の1時間以内に誰かがアクセスした時に起動させて、
それ以降はフラグ立てて起動しないようにし0時を過ぎたらフラグを消すとか・・・ 
指定時間内に確実にアクセスする必要があるけどね。
44nobodyさん:04/07/16 20:47 ID:???
>>43
0時でいいなら、最終のバックアップ日付を記録しとけばいいだけだと思うけど。
それ見りゃ処理すべきかどうか判断できて、指定時間がどうのとか莫迦な制限もない
45nobodyさん:04/07/16 20:56 ID:???
そもそも一日しか有効でないバックアップに意味は無い
設計やり直せ
46 ◆.CzKQna1OU :04/07/16 21:22 ID:???
>>44
すみません。それはどうやってやるんですか?
47nobodyさん:04/07/16 21:42 ID:???
>>46
(例えば)トップページ等にアクセスされた時に、
以前バックアップされた日時を確認

その日時から(例えば)1日経過していなかったら終了

バックアップ処理

今の日時を「以前バックアップした日時」として記録

じゃないのか?
48Imo ◆.jC7ANgFY. :04/07/16 21:46 ID:???
$backupfile = $backupdir . intval(time() / 24 / 3600) . '.dat';
$delfile = $backupdir . (intval(time() / 24 / 3600) - 15) . '.dat';
file_exists($backupfile) or copy($datafile, $backupfile);
file_exists($delfile) and unlink($delfile);

この4行で毎朝9時ごろにバックアップできるぞ!
49nobodyさん:04/07/16 22:06 ID:mEB25GsK
php-4.3.8にアップグレードしようとしたら
gcc: sapi/cli/php_cli.o: No such file or directory
gcc: sapi/cli/getopt.o: No such file or directory
*** Error code 1
がでてmakeできない
よくわからんから元の4.3.6に戻した
50カポコン:04/07/17 02:48 ID:???
ttp://f13.aaacafe.ne.jp/~munge/
HTML化致しました。
5117:04/07/17 12:04 ID:???
PHP5で
$_REQUEST = array_map('htmlspecialchars',$_REQUEST);
すると「〜」が、?になるのですが仕様の変更ですか?
PHP4の時でもなったいたのだろうか・・記憶にないのですが。
5251:04/07/17 12:05 ID:???
すると「〜」が &#12316;に
53カポコン:04/07/17 14:50 ID:???
>>48
header("Pragma:no-cache");かclearstatcache()
54nobodyさん:04/07/17 16:18 ID:cAUyli63
$mail_data=Array();

$mail_data ←この中に、メールのヘッダから本文までごっそり入ってるんですが、
そのなかから、メールアドレスだけ抜き出すにはどうしたら良いでしょうか?

55nobodyさん:04/07/17 16:36 ID:CrUOMyEi
正規表現
56nobodyさん:04/07/17 16:42 ID:???
>>54
抜き出すための特徴は無いのか?
通常のメールヘッダなら、
To: 、Date: 、From: 、Subject: 、Content-Type: ..が\r\nで区切られているから
To や From の行を抜き出せばいいだけじゃないのか?
それ以外なら >>55の言っているように正規表現で抜き出すしかないぞ?
perlメモのページにメールの正規表現が載ってるがチビるよ?いやまじで。
57nobodyさん:04/07/17 17:05 ID:???
>56
From:だけを抜き出そうと思っています。
正規表現でやってみます。

どうもでした。
5854:04/07/17 18:30 ID:cAUyli63
>56
$grep="/^From:(.*)$/";

print_r(PReg_Grep($grep, $mail_data));

こんなことを、試してみましたがうまく抜き出せません。
PReg_Grep関数じゃだめなんでしょうか?
59nobodyさん:04/07/17 19:11 ID:???
>>58
やり方は合ってるよ。preg_grepで問題なし。
試しに手元のメールデータを突っ込んでみたが問題無く動く。
それで動かないなら、$mail_dataが想定と違うんじゃないかな?
$mail_dataを一行ずつ表示して確認してみたら?
6058:04/07/17 19:39 ID:cAUyli63
>59
ごっそり、連なってる、データ郡からとってきてくれるのかと思いました。
StrTokでばらばらにしてやってみます。
61nobodyさん:04/07/18 11:12 ID:yQjoCnlA
namazuを導入しようと考えているんですが
ひっかかるはずの検索ワードを打っても絶対に0件ヒットしました
としか出てくれません。
この場合、どこかの設定がおかしいのでしょうか?
以下のサイトを隅から隅まで見てみましたがそれらしき情報はありませんでした。
http://www10.plala.or.jp/miyazawa/namazu/
http://homeserver-streaming.com/Trouble/namazu/
62nobodyさん:04/07/18 11:46 ID:???
>>61
スレ違い
63nobodyさん:04/07/18 11:53 ID:FJ1yfCK5
<?php
include 'http://192.168.0.1/test.php?no=001';
?>
とやっても no=001 の部分がどうしても反映されません。
普通にブラウザでhttp://192.168.0.1/test.php?no=001にアクセスすると反映されています
includeで引数を渡す方法ってないですか?
マニュアルにはこれで出来るって書いてあるのだけれども。
64nobodyさん:04/07/18 12:54 ID:???
>>63
マニュアルに書いてあるんだけれども、OSとPHPのバージョンの条件はクリアしてるの?
65nobodyさん:04/07/18 13:43 ID:???
>>63
俺はできたよ(当方Apache/2.0.48 (Win32) PHP/4.3.4)
>>64の言うとおり問題はOSとPHPのバージョンだと思う。
66nobodyさん:04/07/18 14:30 ID:???
>>65
4.3.8にバージョンうpした方がいいんでない?
67 ◆JirmzAivjs :04/07/18 14:32 ID:Br0Ka4RM
>>63
<?php
$var_no = "";
import_request_variables("GP", "var_");
$inc = "http://192.168.0.1/test.php?no=" . $var_no;
include $inc;
?>
とかやってもだめ?


ASPに対してPHPでSOCKETを使用して接続したいのですが、
どうしてもSOCKETで接続が出来ません。
ASPのSESSIONがクッキーで発行されているのがネックなんですが、どうにかする方法はないのでしょうか?
68nobodyさん:04/07/18 16:24 ID:???
>>67
ASPから発行されたクッキーをPHPから渡してあげればいいのでは?
別の言い方をすると、セッションが継続する間中 ずっとPHPで面倒を見るってことだけど。
69nobodyさん:04/07/18 17:31 ID:???
このサイトのように同じページにいろいろなページを
表示させるにはどうすればよいですか?
ttp://www.tkool.net/index.php
70nobodyさん:04/07/18 17:37 ID:???
マルチタスク
7169:04/07/18 17:47 ID:???
>>70
初めて聞いた言葉だ・・・
72nobodyさん:04/07/18 18:16 ID:ajil2/nN
fedora core 1 に最初から入っていたPHPを4.3.6から4.3.8にしようと思って
ソースをコンパイルしてインストールしたんですが
$ php -v
の結果は4.3.8なのにサーバ上でphpinfo()を表示させると4.3.6のままです
どこがダメなんでしょうか
73nobodyさん:04/07/18 18:17 ID:???
会員制画像アップローダで画像をファイルとしてアップロードした
場合、絶対パスでアクセスされてしまう可能性があると想うのですが、
みなさんはどうされていますか?。
拡張子の変更などをしても内容のデータがそのままであれば見るのは
容易だと想うのです。
画像データを暗号化し画像を表示する時にPHP経由で複合化して
表示するか、またはSQLなどに放り込んでしまうか、サーバーに拡張子
によるアクセス拒否が出来るならそれを使う等しか思い付かないのです
が他に良い方法はあるのでしょうか?。
74nobodyさん:04/07/18 18:31 ID:???
>>73
君は、.htaccessを知らないと
75nobodyさん:04/07/18 18:39 ID:???
>>72
どういう風にインストールしたか秘密にしているあたりがダメダメだね
76nobodyさん:04/07/18 18:51 ID:ajil2/nN
>>75
スマソ
apacheは2.0.49
$ ./configure \
--host=i386-redhat-linux --build=i386-redhat-linux --target=i386-redhat-linux-gnu \
--program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin \
--sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include \
--libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com \
--mandir=/usr/share/man --infodir=/usr/share/info --cache-file=../config.cache \
--with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d \
--enable-force-cgi-redirect --disable-debug --enable-pic --disable-rpath \
--enable-inline-optimization --with-bz2 --with-db4=/usr --with-curl \
--with-exec-dir=/usr/bin --with-freetype-dir=/usr --with-png-dir=/usr \
--with-gd --enable-gd-native-ttf --without-gdbm --with-gettext \
--with-ncurses --with-gmp --with-iconv --with-jpeg-dir=/usr \
--with-openssl --with-png --with-pspell --with-regex=system \
--with-xml --with-expat-dir=/usr --with-dom=shared,/usr
77nobodyさん:04/07/18 18:52 ID:ajil2/nN
--with-dom-xslt=/usr --with-dom-exslt=/usr --with-xmlrpc=shared \
--with-pcre-regex=/usr --with-zlib --with-layout=GNU --enable-bcmath \
--enable-exif --enable-ftp --enable-magic-quotes --enable-safe-mode \
--enable-sockets --enable-sysvsem --enable-sysvshm \
--enable-discard-path --enable-track-vars --enable-trans-sid \
--enable-yp --enable-wddx --without-oci8 --with-pear=/usr/share/pear \
--with-imap=shared --with-imap-ssl --with-kerberos --with-ldap=shared \
--with-mysql=shared,/usr --with-pgsql=shared --enable-ucd-snmp-hack \
--with-unixODBC=shared --enable-memory-limit --enable-bcmath \
--enable-shmop --enable-calendar --enable-dbx --enable-dio \
--enable-mcal --enable-mbstring --enable-mbstr-enc-trans \
--enable-mbregex --with-apxs2=/usr/sbin/apxs \

$ make
# make install

でhttpd.confに
LoadModule php4_module modules/libphp4.so
を加えてapacheを再起動したら
[Sun Jul 18 18:44:53 2004] [warn] module php4_module is already loaded, skipping
と怒られた。それ以前にLoadModule php4_module modules/libphp4.soやAddType application/x-httpd-php .php
がhttpd.confに書いてないんだけどなんでかな
7873:04/07/18 19:00 ID:???
>>74
今は自前鯖なんで、httpd.confに書いてたり^^;。
ゴメンヨ・・・。

配布とか考えた時に.htaccessが使えないレンタル鯖とかも
あると想われるので何か良い手だてはないものかと・・・。
79nobodyさん:04/07/18 19:44 ID:Sl8hc8ID
php.iniの更新して、Apacheの再起動したら幸せになれるかも。
その際、register_globalをOnにしときなされ。
80nobodyさん:04/07/18 20:17 ID:???
>>78
データベースにバイナリを書く方法あるが、普通はそんなことせんからなぁ。
htaccess使えないところはサポート外にしとけ
81nobodyさん:04/07/18 20:56 ID:???
>>72
WinXPの場合はphp4ts.dllをsystem32に放り込めばいいと教えてもらったけども…
リナックスはわからんね
82nobodyさん:04/07/18 20:58 ID:???
>>80
処理を重くするのもどうかと思いますしね・・・
ファイル名をややこしくするだけにしておきたいとおもいます
83nobodyさん:04/07/18 21:01 ID:???
>>81
4.3.6をちゃんと削除してからインストールした?
httpd or apacheは再起動させた?
84nobodyさん:04/07/18 21:39 ID:???
質問です。

<select name="asdasd[]" size="5" multiple="multiple">
<option value="a">あ</option>
<option value="b">い</option>
<option value="c">う</option>
<option value="d">え</option>
<option value="r">お</option>
<option value="f">か</option>
<option value="g">き</option>
<option value="h">く</option>
</select>

こういうフォームをつくって、これをGETメソッドで送り、
parse_str 関数で処理したのですが、
配列 asdasd[] の個数が、選択した要素の数*2になってしまいます。
つまり、2つ選択して送るとcount($asdasd) が4になるということです。
どうしてこうなるんですか?
85nobodyさん:04/07/18 22:07 ID:???
>>84
独特なformだね
8672:04/07/18 22:22 ID:???
>>83
前のバージョンをアンインストールしていなかったので
# rpm -e php
で関連パッケージを削除してmake install し直してphp.iniをphp.ini_dist
をコピーしてhttpdを再起動しようとしたら今度は
Syntax error on line 199 of /etc/httpd/conf/httpd.conf:
Cannot load /etc/httpd/modules/libphp4.so into server: /etc/httpd/modules/libphp4.so: cannot open shared object file: No such file or directory
と怒られてしまいました
libphp4.soはどこ行っちゃったんでしょうか
87nobodyさん:04/07/18 23:16 ID:???
>>84
2バイトが二つで4でしょ
88nobodyさん:04/07/18 23:26 ID:???
>>87
ハァハァ(*´д`*)━( *´д )━(  *´)━(  )━(゚   )━(Д゚  )━( ゚Д゚ )ハァ?
89nobodyさん:04/07/18 23:55 ID:???
>>84
あ行が怪しいぞ
90nobodyさん:04/07/19 00:27 ID:eJnEJcBx
PHPUnit2の使い方がわからん・・・
だれかおしえてください
91nobodyさん:04/07/19 00:52 ID:qsqOem7W
phpでmds的なファイル分割形式を用いたUPローダー作成を考えているのですが
実現可能でしょうか?どこか参考になるサイト等ありましたらお教えください。
92nobodyさん:04/07/19 09:07 ID:???
初歩的な質問で申し訳ないが
掲示板をつくり、1つの記事を削除する場合は
その記事意外を再度上書きすればいいんだよな?
93nobodyさん:04/07/19 09:25 ID:???
>>92
ソーダ 
94nobodyさん:04/07/19 10:26 ID:zI9w6JFi
質問です。バージョンはphp-4.3.3です。

$a = array('田中太郎<>12<>りんご<>','山田太郎<>16<>なし<>','吉田太郎<>12<>すいか<>');
のような配列を<>で分割した2番目の要素(12,16,12)でソートするにはどうすればいいんですか?
ソート後は
山田太郎:16才:好物なし
田中太郎:12才:好物りんご
吉田太郎:12才:好物すいか
のように2番目の要素(12,16,12)以外も表示したいんです。
95nobodyさん:04/07/19 11:04 ID:???
PHPをちょっと勉強してみようかなと思い
ttp://www.yumenara.com/pwp/
のサイトを読んで
現在の時刻を表示させる<?php echo date("n月j日") ?>を入れてみたんですが
何故か文字化けして「79」としか表示されません
どうすればいいんでしょう?
PHPバージョンは4.3.8でサーバーはApache2.0.49
OSはWinXPです
ちなみにp2というPHPで作られた2chビュアーは文字化けせずに正常に表示されます
9695:04/07/19 11:04 ID:JjQNbyQZ
上げ忘れました
すいません
97nobodyさん:04/07/19 11:06 ID:???
普通はusort、大きな配列の時はarray_multisort使った方が速い。
function myCompare($x, $y) {
 if ($x[1] == $y[1]) return 0;
 return ($x[1] < $y[1]) ? -1 : 1;
}
function myExplode($z) {
 return explode('<>', $z);
}

$a = array('田中太郎<>12<>りんご<>','山田太郎<>16<>なし<>','吉田太郎<>12<>すいか<>');

$b = array('name' => array(), 'year' => array(), 'favorite' => array());
foreach ($a as $str) {
 list($b['name'][], $b['year'][], $b['favorite'][], ) = myExplode($str);
}
array_multisort($b['year'], $b['name'], $b['favorite']);

$c = array_map('myExplode', $a);
usort($c, 'myCompare');

var_dump($a, $b, $c);
98nobodyさん:04/07/19 11:18 ID:???
>>95
文字化けって分かってるなら文字コードの設定も書かないと。
というか、書いているうちに原因に気づくんだろうけどねぇ。
http://www.php.net/manual/ja/ref.mbstring.php
99nobodyさん:04/07/19 11:25 ID:???
>>97に自己レス。
array_multisort使うならこの方がいいかな。

$a = array('田中太郎<>12<>りんご<>','山田太郎<>16<>なし<>','吉田太郎<>12<>すいか<>');
$b = array(); // 並べ替えたい配列
$c = array(); // 並べ替えの基準にする配列
foreach ($a as $key => $value) {
 $b[$key] = explode('<>', $value);
 $c[$key] = $b[$key][1];
}
array_multisort($c, $b);
var_dump($b);
10095:04/07/19 11:35 ID:JjQNbyQZ
>>98
mbstringは導入してました
php.iniの設定も色々変えてみましたが直りませんでした
全角の文字が表示されていないようなんですが…(全て全角で入力すると何も表示しませんでした)
101nobodyさん:04/07/19 11:48 ID:???
>>95 >>100
なんでここできいてんだ?
102nobodyさん:04/07/19 11:49 ID:???
>>95 >>100
なんでわざわざあげてんだ?
10395:04/07/19 11:51 ID:???
>>101
質問スレなんで…

>>102
ID出さなくてもいいんですか?
104nobodyさん:04/07/19 12:00 ID:???
>>100
だからどういう設定になってるのか訊いてるんだよ
日本語解らないの?
105nobodyさん:04/07/19 12:04 ID:???
>>103
文字エンコーディングの設定はどうなってるの?
ソースのそれはどうなの?
やらなきゃいけないのは正しい設定にすることで、
闇雲に変更することじゃない。
どうしたらいいのか分からない場合は>>98のEUC-JPの設定にして
ソースもEUC_JPで書くのがお勧め。
10695:04/07/19 12:19 ID:???
>>104-105
文字エンコーディングはSJISでやってます
EUC-JPはp2で設定ファイルを編集する時文字化けしたので止めました
ソースは
<HTML LANG="JA">

<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=Shift_JIS">
<TITLE></TITLE>
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" ALINK="#FF0000" VLINK="#800080">

<P>今日は<?php echo date("n月j日") ?>です。</P>

</BODY>

</HTML>
107nobodyさん:04/07/19 12:29 ID:???
>>106
php.iniの設定はどうなってるの?って訊いてるんだけど
釣りか?
10895:04/07/19 12:38 ID:???
>>107
ttp://www.php.net/manual/ja/ref.mbstring.php
これのSJISユーザ用のphp.iniの設定です
109nobodyさん:04/07/19 12:45 ID:???
>>108
・・・。
アンタさっきphp.iniの設定をいじったって言ってたけど
今はそのページの内容に戻ってるって事かい?

自分の環境のphp.iniのmb_string関連の部分をコピペしろよ
11090:04/07/19 12:48 ID:???
ぐぐったら見っけた。
ダウンロードしたPHPUnit2のアーカイブにサンプルが入ってるらしい。

ttp://inagi.himitsukichi.com/~aozora/blog/
ttp://inagi.himitsukichi.com/~aozora/cgi-bin/pukiwiki/pukiwiki.php?PHPUnit2%A4%F2%BB%C8%A4%C3%A4%C6%A4%DF%A4%EB

すまね。
111nobodyさん:04/07/19 12:48 ID:???
もう放っといた方が良いよ。自分で理解する気もないみたいだし。
112nobodyさん:04/07/19 13:18 ID:???
釣りとしか思えねー
11394:04/07/19 13:51 ID:???
できました。答えてくれた方ありがとうございました。
114nobodyさん:04/07/19 14:07 ID:???
<A href="./index.php">あああ</A>
リンク「あああ」をクリックした時に、
同時に変数を代入(例えば$name="yamada"など)できないでしょうか?
115nobodyさん:04/07/19 14:11 ID:???
>>114
href=index.php?name=yamada
ってことかい?
116114:04/07/19 14:13 ID:???
>>115
なるほど、皆そうしているのですか!
有難うございます><
117114:04/07/19 14:23 ID:???
<?php
if ($main == "kikaku")
$page = "./page/kikaku/index.html"
?>

クリックしてmainがkikakuになった状態で上の文を記述していれば
<?php echo $page ?>の部分に上のファイルが開かれるんですよね?
118114:04/07/19 14:25 ID:???
ページが

「./page/kikaku/index.html」とそのまま表示されますた;;
119114:04/07/19 14:30 ID:???
<?php
if ($main == "kikaku")
$index = "./page/kikaku/index.html";

$page = file($index);
?>

にしたら「Array」になりました・・・
どなたか助けてください;;
120nobodyさん:04/07/19 14:44 ID:???
なんか参考書でも読んでこい。

なにがしたいか知らんが、おそらくincludeでできる
121114:04/07/19 14:46 ID:???
includeトカ全然シラナイヤ
122114:04/07/19 14:48 ID:???
>なにがしたいか知らんが

PHPのページの一部に他のページを貼り付けるということです
123114:04/07/19 14:58 ID:???
デキター!
回答してくれた方ありです!
124nobodyさん:04/07/19 16:13 ID:???
夏ですなぁ
125nobodyさん:04/07/19 17:06 ID:???
あと1ヶ月ちょいは耐えるしかない
126nobodyさん:04/07/19 21:11 ID:???
すみませんが教えてくだちぃ。
ファイルアップロードで、下記のformでアップロードした場合、
どうやって、「fname」の値ってとるんでしょうか?
$_POST['fname'] でおけ?
なんかうまく取れない・・・

<form enctype="multipart/form-data" action="upfile.php" method="post">
<input type="file" name="upfile">
<input type="text" name="fname">
<input type="submit" value="upload">
</form>

127nobodyさん:04/07/19 21:31 ID:???
>>126
upfile.phpの最初にphpinfo()書いてよく眺めればわかるよ
128PHP:04/07/19 21:51 ID:4+OKTR+f
PHPで配列自体をソートするときってどうしたらいいの?
Array[0](A0,B0,C0)
Array[1](A1,B1,C1)
Array[2](A2,B2,C2)
でBの項目でソートしたいときってどうしたらいいの?
129126:04/07/19 21:59 ID:???
>>127
うん、よくわかった。さんくす!!!
130nobodyさん:04/07/19 22:15 ID:???
>>128
>>94あたりの話を応用。
131 ◆JirmzAivjs :04/07/20 00:43 ID:???
>>128
http://www.teu.ac.jp/chiit/~dsuzuki/phpdoc/function.array-multisort.html
<?php
$list[0] = array('A2','A1','A0');
$list[1] = array('B1','B2','B0');
$list[2] = array('C0','C1','C2');
//ソート前
print("ソート前<br>\n");
for ($i=0;$i<sizeof($list);$i++) {
for ($j=0;$j<sizeof($list[$i]);$j++) {
$str = $list[$i][$j];
print("$str\n");
}
print("<br>\n");
}
array_multisort ($list[1],SORT_DESC,SORT_STRING,$list[0],$list[2]);
//ソート後
print("ソート後<br>\n");
for ($i=0;$i<sizeof($list);$i++) {
for ($j=0;$j<sizeof($list[$i]);$j++) {
$str = $list[$i][$j];
print("$str\n");
}
print("<br>\n");
}
?>
これを自分なりに変えてみ。
http://pc5.2ch.net/test/read.cgi/jisaku/1089171507/
でがんばってまつ。
132xxx:04/07/20 01:57 ID:zj8DyYfz
ごめんなさい!本当に分からないです。
Array ( [0] => 2004072000<>0<>xxx<>2<>0 [1] => 2004072000<>0<>index<>0<>0 )
の配列を中の[3]の配列の値でソートして、[2]の値のついたdatファイルを読み込んで表示させたいんです。
どうしたらいいか分かりません…。
どうしたらいいんでしょう?
133nobodyさん:04/07/20 02:34 ID:TlHHsRNJ
すいませんが解決法あったら教えてください。
HTML中の一部を繰り返したいのですが、

<html>
<body>
<?php
for(i=0;i<10;i++){
?>
test<br>
<?php
}
?>
みたいに書くことってできないんですか?JSPのように。
なんかエラーになってしまったんですが。
134133:04/07/20 02:37 ID:???
ごめん。
<?
for($i=0;$i<10;i++){
?>
だった。<?だけでいいんだね。↑は$もついてないし。
ごめん。
マジごめん。
135xxx:04/07/20 02:58 ID:zj8DyYfz
<html>
<body>
<?php
for($i=0;$i<10;$i++){
print("test<br>\n");
}
?>
じゃだめなの?
136 ◆JirmzAivjs :04/07/20 03:50 ID:???
>>132
http://www.mdir.org/tesss?act=0
http://www.mdir.org/tesss?act=1
>>131
の見てできんのかい(o_ _)ノ彡☆
137xxx:04/07/20 04:10 ID:zj8DyYfz
>136
いざむ(136)さん、出来ました。
ありがとうございました!!
138nobodyさん:04/07/20 05:08 ID:???
>>133
ちゃんとしたスクリプトを書けばできるよ。
(134でもまちがってるだろw)
たしかPHPの処理としては、<?php ?>の間以外は
そのままechoしてるのと同じ処理だからwhileとか
分割されてもできる。
139nobodyさん:04/07/20 07:55 ID:???
上で同じ事で迷っているようだから代わりに返事しよう
使用OS WinXp

php.ini
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
;mbstring.func_overload = 0

これでSJISしか使えないEUCで書くと文字化け 
mbstring.internal_encoding = EUC-JP
mbstring.http_output = EUC-JP
これでEUCしか使えないSJISで書くと文字化け 
というのは理解できる。

mbstring.internal_encoding = EUC-JP
mbstring.http_output = SJIS
こうするとSJIS、EUC-JPとも文字化け

EUC-JPとSJISどっちも使えるようにするにはどうしたらいい?

尚phpのヴァージョン
5.0.0及び4.3.8〜4.3.4辺りまでのpackage及びinstallerは試してみたが全部だめだった
140 ◆JirmzAivjs :04/07/20 08:11 ID:???
>>139
default_charset = "Shift_JIS"を宣言していますか?

mbstringを有効にするのならば
phpインストールフォルダ以下のextensionディレクトリに
php_mbstring.dllは入ってますか?
extension=php_mbstring.dllのコメントはずしてますか?
141nobodyさん:04/07/20 10:50 ID:fJEHV2g/
print_r(array_values($mail=PReg_Grep($grep, $mail)));
こうしたら結果が下のように出るんですが

Array
(
[0] => [email protected]
[1] => <[email protected]>;
[2] => [email protected]
[3] => <[email protected]>;

)

print $mail[0];
としても何も表示されないのは何ででしょうか?
142nobodyさん:04/07/20 11:28 ID:???
>>141
print_r(preg_grep($grep, $mail));
143nobodyさん:04/07/20 11:33 ID:fJEHV2g/
>142
ありがとうございます。
しかし、print_r だと、配列の中身全部出てしまいます。

[0] => [email protected] ← このメールアドレスだけを、とって、処理に使いたいんです。
144nobodyさん:04/07/20 11:38 ID:???
>>1-143
マニュアル嫁
これで事足りる
145141:04/07/20 12:50 ID:fJEHV2g/
はまった・・
ob_implicit_flush(1);
while (@ob_end_flush());

これ先頭に書いたら表示されました
146nobodyさん:04/07/20 12:57 ID:yRgYyr5n
データベースとの連携で質問です。
フォームから得た値で
$query ="insert into table values(0,'$name','$type',$price,'$old','$grade',)";
とレコード追加をしようとしていますが

項目によってはフォーム未入力時も追加可としたいのですが
このままではエラーがでます。
上のコードの前に
if ($***=="") $***=0;
とすれば解決するのですが

もっと簡単な方法はないのでしょうか?
みなさんはどのようにしていますか?
147nobodyさん:04/07/20 13:10 ID:???
>>146
フォームから得るキーとそのデフォルトを配列にしておいて、
ループしながらやってる。
どのみち最低でもSQLインジェクション対処せんきゃならんし。
148nobodyさん:04/07/20 13:15 ID:???
フォーム入力のデータは一通り入力チェックかける様にしてる
SQL発行する際はPREPARE使ってる
149nobodyさん:04/07/20 14:45 ID:???
DBに書き込む際
型がおかしいとき、DBが判断してくれるのでDBが弾くのを任せるか
前もってPHP側で見てやるか、どっちがいいでしょう
150nobodyさん:04/07/20 14:49 ID:???
親切にエラーが出たフォームとか教えてやるにはPHP側でやるしか無かんべ
151nobodyさん:04/07/20 15:02 ID:???
PHP側でチェック
152nobodyさん:04/07/20 16:21 ID:yRgYyr5n
>>147
>>148
なるほど。有難う御座いました。
153nobodyさん:04/07/20 18:12 ID:???
フォームから得た値は管理者が入力するフォームで無い限りちゃんとサニタイズしろよ。
154nobodyさん:04/07/20 18:58 ID:???
WebProg作るならクロスサイトスクリプティングの脆弱性ぐらい気をつけんとね。
155nobodyさん:04/07/20 19:04 ID:???
DBに突っ込むだけの場合はサニタイズしてません
156nobodyさん:04/07/20 19:06 ID:???
>>155
なんで?真面目にその理由を聞きたい
157nobodyさん:04/07/20 19:07 ID:???
ログイン時に照会されるのみの情報だからです
158nobodyさん:04/07/20 19:09 ID:???
>>157
全然意味がわからんのだが
フォームデータにSQL仕込まれたらどうすんの?
159nobodyさん:04/07/20 19:15 ID:???
SQLから出したデータにもhtmlspecialcharsしておくべきですかね?
160nobodyさん:04/07/20 19:15 ID:???
入れるときにしてるんなら必要ないよ。
161nobodyさん:04/07/20 19:16 ID:???
意味が分からんねぇ・・・
"select * from auth where ID = ".$_POST['ID']
としてあとのパスワードやらをmysql_fetch_assocでDBから情報とって調べる
162nobodyさん:04/07/20 19:17 ID:???
え、俺、自分の欲しい物リストスクリプト作って使ってるんだが
全然サニタイズしてないや
したほうがいいのかなぁ・・・
163nobodyさん:04/07/20 19:18 ID:???
perlと違ってhtmlspecialchars()関数一個ですむのになぜめんどくさがるかねぇ
164nobodyさん:04/07/20 19:19 ID:???
function postVar($name){
if(isset($_POST[$name])) return htmlspecialchars(mb_convert_encoding($_POST[$name],"EUC-JP","UTF-8, UTF-7, ASCII, EUC-JP,SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP"));
else return;
}


Nucleusからパクッた。マジお勧め
165nobodyさん:04/07/20 19:38 ID:???
>>161
$POST['ID']='aaa; delete from auth'みたいなのが入ってきたらどうすんの?
166139:04/07/20 19:56 ID:???
>140
サンクス!
default_charset = "Shift_JIS" が抜けてたらしい

php.ini

default_charset = "Shift_JIS"
extension_dir = "extensionsのある場所"
extension=php_mbstring.dll
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
;mbstring.func_overload = 0

これでSJISもEUCも、使えるようになったが
↑以外の設定だとSJISで書いたプログラム側が文字化けしたことを報告する
つまり >108 のいう「例 3. SJISユーザ用のphp.iniの設定」では文字化け発生

追加として鯖システムはUNHTTPD。Apacheは他の奴報告してくれ
167nobodyさん:04/07/20 20:18 ID:???
<form accept-encoding="xxx">これ最強。
PEARのHTML_QuickFormを使えば再帰的にstripslashesしてくれて便利。

サニタイズはPEAR DBのquoteSmart使えばOK.
(数値型のデータなら事前にintval/floatvalしとく
 HTML_QuickFormのaddRuleと組み合わせるとなおよし)
168nobodyさん:04/07/20 20:30 ID:???
>>165
それでやられちゃうのか
全然知らん買ったよ
sql文を防ぐってdelete select insert updateぐらいをフォームデータに入ってるかチェックでいい?
169nobodyさん:04/07/20 20:37 ID:???
サニタイズってhtmlspecialcharsだけじゃだめ?
170nobodyさん:04/07/20 20:38 ID:???
SQLインジェクションはヤバイ。まじでヤバイよ。
まずdeleteできちゃう。もう1レコードなんてもんじゃない。テーブルごと。
何しろ無制限。スゲェ!なんか制限とかないの。
しかも他のテーブルも消せちゃう。ヤバイよ、真っ白だよ。
だって普通は削除できないじゃん。だって削除されたら困るじゃん。
データ消えたら困るっしょ。
だからそのCGIはロールバックできる。話のわかるヤツだ。
けど普通のCGIはヤバイ。そんなの気にしない。消えるだけ。

とにかく貴様ら、SQLインジェクションのヤバさをもっと知るべきだと思います。
そんなヤバい仕事をしてる貴様らとか超偉い。もっとがんばれ、超がんばれ。
171nobodyさん:04/07/20 20:39 ID:???
>>168
問題なのはこれ→「;」
一度セキュリティ関連のサイトを読むことをお奨めする
172nobodyさん:04/07/20 20:44 ID:???
>>171
なるほど。
でも、上の場合だと複問い合わせされることもあるよね?
その場合はselectとか見る必要あるよね?
173nobodyさん:04/07/20 20:44 ID:???
>>168 ポイントがずれてる
>>169 ぜんぜんだめ
MySQLならmysql_real_escape_stringした文字列をさらに'(シングルクォート)で囲む。
(PHP4.3.0未満はmysql_escape_string, PostgreSQLはpg_escape_string)
DB_common::quoteSmartは型を考慮してそこらへんを自動でやってくれる。
174nobodyさん:04/07/20 20:46 ID:???
>>173
へぇ
じゃあDB_common::quoteSmartだけ使えばいいんですね
175nobodyさん:04/07/20 20:55 ID:???
>>174
ごめん、説明の仕方が悪かった。quoteSmartは静的呼び出し無理ぽ。
PEARのDBクラスを使うときは
$db = &DB::connect($dsn);
$num = (int) $num; // 整数型のデータの場合
$str = $db->quoteSmart($str); // 文字列型のデータの場合
$sql = "SELECT * FROM hoge WHERE foo = $num AND bar = $str;';
$db->query($sql);
こんな感じでやります。詳しくはPEARマニュアル。
テーブル名やカラム名をquoteIdentifierするのが望ましいけど長くなるので省略。
176nobodyさん:04/07/20 20:58 ID:???
>>175
どうもありがとう。
今までPEARは全然使ったことなかったよ。
使った方が簡単そうでいいね。
177nobodyさん:04/07/20 21:21 ID:???
mysql_real_escape_stringは「;」が素通りしてしまうのですね
178nobodyさん:04/07/20 21:22 ID:???
>>166
そもそも本家(php.net)で配布しているWindows用バイナリは
「mbstring.internal_encoding = SJIS」
に対応してないことは知ってるんだろうな…
http://jp2.php.net/mbstring
「PHPで動作しない文字エンコーディング:JIS, SJIS」

スクリプトの記述エンコーディングにSJISを使うのなら
自分でビルド時にちゃんと「--enable-zend-multibyte」指定しないと駄目。
そうやってビルドしたWindows用バイナリは廣川さんが公開してくれている。
RPM等のバイナリも通常は「--enable-zend-multibyte」な指定はしないから、
ちゃんと確認して使用すること。
179nobodyさん:04/07/20 21:30 ID:???
フォームデータでどれをソートするかという情報を送るのですが
その場合、許可する文字列を列挙して
$regex=hoge|moge;

if ( isset($_GET['sort']) && ereg($regex,$_GET['sort']) $sort=$_GET['sort'];
としてるんですが、これで十分ですよね?
180nobodyさん:04/07/20 21:33 ID:???
>>176
DB_DataObject(を継承したクラス)を使えばもっと楽で、
型のキャストとか文字列のエスケープとかを気にしなくてよくなります。
マジおすすめ。
ひとつのクエリにひとつDB_DataObject(を継承したクラス)のインスタンスをつくって使います。
厳密にはそこまでしなくていいかもしれないけど、そうした方がハマらないと思う。
DB接続はグローバル変数に登録して使い回すので大丈夫。

>>177
文字列は''で囲むもんだから。
181nobodyさん:04/07/20 21:40 ID:???
>>180
自己レス。微妙に嘘ついてた。
WHERE句やORDER BY句とかは自分でサニタイズする必要ありです。
182nobodyさん:04/07/20 21:44 ID:???
>>180
DBにおいてはWHERE dat='$dat'としておけば$datに「;」が含まれていても
問題が起きにくいという事ですね
PHP5で遊んでいる環境なのでPEARも使えないですし、脆弱性についても
知識不足で穴だらけだったので大変勉強になりますm(_)m
183166:04/07/20 21:49 ID:???
>178
無論それを読んで、きちんと仕様通り試して文字化け発生して泡食って
最新からある程度古いのまでのWin用package及びinstallerを入れて、試した上で
日本語メーリングを検索かけて対応策が出てこなくて
こっちに辿り着いているのだが

それでも一つ見落としている辺り節穴だけどさ

ソースをビルドする技術が無いんじゃ使うのは無理ってことだよな?
184nobodyさん:04/07/20 21:56 ID:???
>>182
ダメだよ。
$datが data';delete from table;...
というように、'が入っていると...
' をエスケープしないと意味無い。
185nobodyさん:04/07/20 22:03 ID:???
>>184
あ、言葉足らずですいません^^;
私はINSERT INTO table SET でしか使わないので、こんな感じで
処理しようと考えているのですが大丈夫でしょうか?

function sql_esc_set($name,$var){
return $name."='".mysql_real_escape_string($var)."'";
}
186nobodyさん:04/07/20 22:17 ID:???
>>182
もし$datに'や\等の特種文字が入っていたら、問題が起こるので
必ず $dat = mysql_real_escape($dat); しておかないとだめ。
...と書いてたら>>184,185の流れが...
$name に MySQLの予約語(tableとかcreateとか色々)を使うことがあるなら
return "`" . $name . "`='" . mysql_real_escape_string($var) . "'";
だけど、その予定がないならそれでOK.

#PHP5でもPEARのメジャーなクラスは対応しているし、数は少ないけどPHP5専用のクラスもあります。
187185:04/07/20 22:18 ID:???
ん、難しく考える必要なかったのかも知れない・・・・
Formからのからのデータを全てhtmlspecialcharsとaddslashesとし、
SQLへはdat='$dat'とすれば良いのですよね?
188nobodyさん:04/07/20 22:23 ID:???
Webプログラミングする人は最初にこのページでも読んでください

IPA ISEC セキュア・プログラミング講座
http://www.ipa.go.jp/security/awareness/vendor/programming/index.html
189nobodyさん:04/07/20 22:29 ID:???
最初から出せカス
190nobodyさん:04/07/20 22:30 ID:???
インプット/アウトプット先 (DB, シェル, HTML ..) に合わせてエスケープ/除去する
それに必要な関数は全部 PHP に揃ってる。

QF とか便利だが、何故・どうしてを理解しないまま道具に頼って終わりってのは違うと思う。

で質問なんですが、
$db->query(,"SELECT * FROM hore WHERE id = {$_GET['id']}");
とかやってたとして、具体的に被害出せます?
例えば '";DELETE FROM hoge; とか突っ込んでも大抵の DB だと無効なクエリになるのでは、、
191nobodyさん:04/07/20 22:33 ID:???
俺もオモタ
>>165は失敗するんじゃないか?
1文として送信するんじゃないの?
192nobodyさん:04/07/20 23:08 ID:???
>>190-191
実行するよ。実際やってみれ。
要は$db->query("SELECT * FROM table;DELETE FROM table");
で後ろのDELETE文を実行してしまうかどうかだが、実行する。
193 ◆JirmzAivjs :04/07/20 23:20 ID:???
>>190-191
すべて有効になりますね。drop databaseなんて打たれたらどうします?
全部アボーンっすよ((;゚Д゚)ガクガクブルブル
194nobodyさん:04/07/20 23:23 ID:???
まあdrop権限など無いわけだが
195nobodyさん:04/07/20 23:27 ID:???
prepare使えるならprepare使っておけば問題ないよね?
196190:04/07/20 23:53 ID:???
>>192
やってみた。

index.php?gid=50001;DELETE%20FROM%20groups;
で、生成されたクエリが
SELECT * FROM groups WHERE gid = 50001;DELETE FROM groups;
実行結果は
DB Error: syntax error

index.php
--
$db = DB::connect($dsn);
$query = "SELECT * FROM groups WHERE gid = {$_GET['gid']}";
$rs =& $db->query($query);
while ($result = $rs->fetchRow())
{
print "<pre>"; print_r($result); print "</pre><hr>";
}
print "done";

('A`
197190:04/07/21 00:05 ID:???
>>196
おや、DBによって挙動が異なるのかな?
以前検証したときは、pgsqlでPearDBじゃなくてpg_queryだったんだけど、
確かに後ろ側も実行してましたよ。
198nobodyさん:04/07/21 01:38 ID:???
ファイルの最終行を取得する効率的な方法ない?
めっちゃファイルサイズ大きくて、全部読み込むの大変。
199nobodyさん:04/07/21 01:48 ID:???
>>198
$l = exec("tail -n 1 $filename");
200nobodyさん:04/07/21 01:58 ID:???
ていうか
delete from groupsでは構文がおかしくないか?
201198:04/07/21 02:11 ID:???
あ、tailを使えば良いのか。PHPでやろうとしてたらかなぁ、頭になかった。
ありがとん。
202190:04/07/21 02:28 ID:???
>>197
mysql だす。
MSSQL とか、初期設定で複数のクエリを通すので危険とか昔聞いたような聞いてないような。

>>200
普通に DELETE FROM groups で SQL 発行したら groups デーブルがきれいに空になりますた。


昔、ボルチモアテクノロジーのサイトが脆弱性吐いてた時に発見者の某 ML の中の人が
具体的な exploit コードを晒していたから何かあると思ったんだけど、、

結局、複数のクエリの実行を許していない時は、具体的な攻撃方法は今は無いって事で FA ?

データベース方面は必要最低限しかしらないもので、、頼り切りですまそ。
203nobodyさん:04/07/21 02:46 ID:???
readfileを使って、重めのファイル(5Mbくらい)を呼び出してダウンロードさせたいのだけど、
あんまりファイルのサイズが大きいとサーバー側に(「RLimitCPU」(CPU占有時間制限)で)
CGIプログラムの暴走と見なされることがあるのではないかと心配してるんですが、
実際の所どうなのか、分かる方おりますか?
204nobodyさん:04/07/21 03:40 ID:/GR6B3Fp


preg_replace_callback('/>([0-9]+)/','trans',$str);
function trans($str) {
//for($i=0;$i<count($str);$i++)
//{
$str[0]=$str[0];
//$str[$i]="<a href="'right.php'" name=$text[$i]>".$str[$i]."</a>";
//}
return $str;
}

実際にはfunction内のコメントアウト部とそうでない部分を入れ替えて使いたいのですがこの状態ですら機能しません。

エラーメッセージは
preg_replace_callback("/>([0-9]+)/","trans",$str); function trans($str[$i]) { //for($i=0;$i".$str[$i].""; //} return $str; }
Fatal error: Call to undefined function: trans()  in right.php on line 184

right.phpの184は
$text[$i]=trans($text[$i]);
以上のとおりです。preg_replace_callbackの設定に問題がるのでしょうか?



205nobodyさん:04/07/21 04:05 ID:/GR6B3Fp
ちなみにこれだと

<?php
preg_replace_callback('/>([0-9]+)/','henkan',$str);

function henkan($str)
{
for($i=0;$i<count($str);$i++){

$str[$i]="<a href='http://'>'.$str[$i].'</a>";
}

return $str;
}
?>

$text[$i]=henkan(text[$i]);

$twext[$i] に >1  と入れた場合のhenkan(text[$i]) は <1 と不等号の向きが変わってしまいアンカーもつきませんでした。
206nobodyさん:04/07/21 04:40 ID:???
つっこみどころ大杉。思い込みで間違った記述をしてる。
1. マニュアル(ttp://jp.php.net/manual/ja/function.preg-replace-callback.php)をよく読む。
2. マニュアルのサンプルコードを改造してやってみる。(一から書かない!)
3. それでもダメならもう一度ここに来る。
207nobodyさん:04/07/21 05:10 ID:/GR6B3Fp
>206
ありがとうございました。
解決いたしました。
何でああいう思い込みをしていたのか自分でも想像がつきません。
おそらくどこかのサンプルページを真似て書いたつもりだったのでしょうが、お恥ずかしい限りです。
済みませんでした。
208nobodyさん:04/07/21 09:18 ID:???
っていうかさ、サニタイズするのも当然だけどお前らバインド使えよw
209nobodyさん:04/07/21 09:26 ID:???
昨日からの書き込みを見てセキュリティを何も考えずプログラミングしている奴がいっぱいいて吃驚
210nobodyさん:04/07/21 09:36 ID:???
>>209
オッス!昨日からの書き込み
http://pc5.2ch.net/test/read.cgi/php/1089929550/131-209
211nobodyさん:04/07/21 09:36 ID:???
>>209
PHPは仕事ですか、それとも遊びですか?
212nobodyさん:04/07/21 09:42 ID:???
class a{
function b($val){
echo $val;
}
}

$obj = new a;
$obj->b('test');

ではなく、もっと短くfunction bを呼び出す方法はないでしょうか?
213nobodyさん:04/07/21 09:57 ID:???
a::b('test');
214nobodyさん:04/07/21 10:01 ID:???
ttp://www.stackasterisk.jp/tech/php/php02_03.jsp
ここを見ていたのですが、$str='a7'でも半角英数字
だと判断されてしまします。
本当に半角英数字のみを判定する場合は
'^[0-9]+$'で良いのでしょうか?


if ( ereg("[0-9]+", $str) ) {
echo "半角数字のみ!";
} else {
echo "不正なデータ(値なしも含みます)";
}
215nobodyさん:04/07/21 10:04 ID:???
>>214
「^」がないやん
216nobodyさん:04/07/21 10:05 ID:???
>>214
てか、半角「英数字」を判定したいのか半角「数字」のみを判定したいのか
よく分からんのだが。とりあえず「^」と「$」をつけなされ。
217nobodyさん:04/07/21 10:06 ID:???
質問です
phpかperlで、mallocを実現することは出来ないでしょうか
218nobodyさん:04/07/21 10:13 ID:???
>>217
お前は何がやりたいんだと小一時間
219214:04/07/21 10:15 ID:???
半角英数字ではないですね。すいません。
半角数字だけであれば、'^[0-9]+$'で良いのですね。
220nobodyさん:04/07/21 10:28 ID:???
ereg 系は遅いのとバイナリセーフでないから使うのが少し恐いかも。

こんなのでも ereg は TRUE だったりするし。

ereg("^[0-9]+$", "1\0test");
221nobodyさん:04/07/21 11:36 ID:???
>>220
そうなのか。勉強になった。preg系で今後はやっていこう。
222nobodyさん:04/07/21 12:38 ID:???
>>203
readfile()を使いたいって事は、ダウンロード先を教えたくなかったり、ロックしたりとかしたいということ?
ダウンロードする回数にもよるけど、かなりのCPU使用率になるよ。(一瞬だけど)
連続してダウンロードされると、サーバによっては止められる可能性も高い。
一回、自分のPCで試してみな。
223nobodyさん:04/07/21 12:40 ID:???
SQLiteって先行きって実際どうなのでしょうか?
今、SQLiteを使ったスクリプトを書いていてふと思った・・・
224nobodyさん:04/07/21 12:44 ID:???
SQLiteってなんだっけ^^;
225nobodyさん:04/07/21 12:44 ID:???
うーセキュリティ見直さなきゃ。。
俺の使ってるphp+mysqlな参考書は
htmlspecialchars()しか触れてないぞう。
・・勉強してきます。。
226nobodyさん:04/07/21 12:49 ID:???
>>225
とりあえず>>188のサイトをよく読んで
「サニタイズ」「SQLインジェクション」「クロスサイトスクリプティング」辺りでぐぐってみ
227nobodyさん:04/07/21 12:54 ID:???
>>226
どもー。確認してみます(=゜ω゜)ノ
228nobodyさん:04/07/21 13:11 ID:???
sql発行時にaddslashes、html出力時にhtmlspecialcharsするだけじゃ不十分?
あっ入力チェックはきちんと行うとして、、
229nobodyさん:04/07/21 13:13 ID:???
HTML出力時のhtmlspecialchars
SQL発行時はバインド
この2つしかやってません
230nobodyさん:04/07/21 14:08 ID:???
PHPでhtpasswd用の暗号パスワード生成ツールってどうやって作ったらいいですか?
crypt使ってですよね?
231nobodyさん:04/07/21 14:30 ID:???
俺は自作のパスワードジェネレータ使ってます
cryptとか使ってないです
232nobodyさん:04/07/21 14:49 ID:???
現場と遊びは違うんで  by カポコン
233nobodyさん:04/07/21 15:17 ID:???
PEARってなんすか
教えてください
234nobodyさん:04/07/21 15:18 ID:/GR6B3Fp
right.php

for($i=100;$i>=0;$i--)
{

require_once("res.inc");

$text[$i]=preg_replace_callback(
"|>([0-9]+)|",
"henkan",
$text[$i]);


print($text[$i]);

}




rec.inc の中身
<?php
function henkan($matches)
{
return "<a href=#$matches[1]><P title=$text[$i]>>".$matches[1]."</P></a>".($matches[2]);
}
?>

イメージ的にはこのように レス番号文字列にカーソルを合わせるとそのレス内容が表示され、
かつクリックするとそのリンクへ飛ぶという形にしたいのですが res.incないで$text[$i]が取得できません
文頭にrequire_once("right.php");としても結果は変わりませんでした。どのようにすればright.php内の
$text[$i]が取得できますか?ご教授くださいお願いします。
235nobodyさん:04/07/21 15:32 ID:???
>>233
スーパーに行けば売ってる
236nobodyさん:04/07/21 15:47 ID:???
>>234
aタグの中にpタグを包含していいのか?
どうせなら aタグにtitleを書きゃいいじゃないか。

そんで、その程度ならpreg_replaceで十分だろ。
237nobodyさん:04/07/21 15:49 ID:???
238nobodyさん:04/07/21 15:49 ID:???
旬は9月から年内いっぱいくらいかな。
239nobodyさん:04/07/21 16:42 ID:???
cryptって先頭8文字だろ?少なすぎ
md5が手軽でいいかと
240nobodyさん:04/07/21 16:45 ID:???
>>239
標準DESの場合はな。
241nobodyさん:04/07/21 17:10 ID:???
すみませんが教えてください。

HTTPヘッダのステータスをPHPのスクリプト内部から設定したいんだけど
どうしたらよろしいのでしょうか?具体的には、STATUSを500に設定したいのですけど。

header()関数あたりになにか入れればいいのでしょうか?

242nobodyさん:04/07/21 17:27 ID:???
>>241
そこまで見当がついているなら、先ずはマニュアル嫁。
243nobodyさん:04/07/21 17:37 ID:???
PHP5を使っているのですが、$_REQUESTにはCOOKIEの情報も
含まれるみたいなのですが、これはPHP4の時からそうなっていた
のでしょうか?
今まで気づかなかっただけか・・・^^;。
244軟式PHP:04/07/21 18:27 ID:???
>>243
それがっどうしたっ!あっほだよっ♪
245nobodyさん:04/07/21 18:37 ID:???
なつかしい
246243:04/07/21 18:49 ID:???
>>244
ごめんようぅ print_r($_REQUEST);
ってprint_r使う事がほとんどなかったのよん;
247nobodyさん:04/07/21 18:51 ID:???
セキュリティ関連ならこの辺も参考にしとけ
ttp://jp.php.net/manual/ja/security.php
248nobodyさん:04/07/21 18:55 ID:???
>>246
PHP4でも含まれていたはずだけど、今まで無かったのなら↓これの所為では?
ttp://jp.php.net/manual/ja/ini.sect.data-handling.php#ini.variables-order
249nobodyさん:04/07/21 18:57 ID:???
今年のLLWeekendにはどうしてPHP出てないんですか?
つか去年はどうして出れたんですか?
250nobodyさん:04/07/21 19:02 ID:???
251nobodyさん:04/07/21 20:24 ID:???
>>250
GJ!でもpart12-14はみれないぽ
252nobodyさん:04/07/21 20:29 ID:???
mb_eregで^を無視するのは仕様か?
253nobodyさん:04/07/21 20:57 ID:???
夏厨の釣りってこんな程度?
254nobodyさん:04/07/21 22:49 ID:???
>>253
はぁ?答えられないなら書き込まないでね^^
255nobodyさん:04/07/22 02:00 ID:???
夏ですなあ
256nobodyさん:04/07/22 02:03 ID:???
<?php
header("Content-Type:text/plain");

$str1 = "http://end.com/マルチバイト";
$str2 = "マルチバイトhttp://end.com/";

if( mb_ereg("^マルチバイト",$str1) ){
print("\$str1 Hit : ^マルチバイト\n");
}
if( mb_ereg("^マルチバイト",$str2) ){
print("\$str2 Hit : ^マルチバイト\n");
}
?>

/* output
$str2 Hit : ^マルチバイト
*/
257203:04/07/22 02:29 ID:???
>222
遅れましたがとんくすです。
試しにレンタルしてる鯖でこっそり試してみたら小さいファイルだったら大丈夫そうですが、
RLimitCPUなんかよりもreadfileしたファイルがサイズ制限みたいなのを受けて落ちてきませんでした。
いろんな設定があるもんだなと思いました(自分apacheの設定深くはしらんので…)。
汎用性のあるものを作りたいので諦めました。また他の方法考えてみます。ありがとでした。
258nobodyさん:04/07/22 03:07 ID:???
GDなどを使ってバーコードを表示するライブラリを探しています。

ttp://www5a.biglobe.ne.jp/~inano/jancode.html

というのは見つけたのですが、45/49で始まるもの以外も使うので
汎用的に使うにはちょっと難しい感じです。
どこかに転がっていないでしょうか?
259nobodyさん:04/07/22 04:33 ID:???
変数の入ったvar.phpと、それをhtmlに整形するformat.phpがあったばあい

<?
include("var.php");
include("format.php");
?>
とすればうまく表示できるんですけど
var.phpの方がいろいろ増えてvar-tarou.php、var-hanako.php、var-hiroyuki.php
みたいになった時、そのファイル名をテキストファイルvar.txtに1行ごと書いて

<?
$data = file ("var.txt");
for ($i=0;$i<3;$i++) {
include("$data[$i]");
include("format.php");
}
?>

とやったら
260nobodyさん:04/07/22 04:36 ID:???
>>259
途中で送ってしまった・・・
それでこれでは間違ってるようなのですがどうすれば
var.txtに書いたファイル名を1行目から表示していけるか誰か教えてください。
あ、データベースは使えません。
261 ◆JirmzAivjs :04/07/22 04:46 ID:???
3回includeしてるからじゃ?
262nobodyさん:04/07/22 04:56 ID:???
include_once()に変えとけ
263234:04/07/22 05:19 ID:O8WfHKX6
ご指摘いただいたとおりpreg_replaceでやってみることにしました。


$string = $text[$i];
$pattern = "|>([0-9]+)|";
$replacement = "<a href=#\${1} title=$text[\${1}]>>\${1}</a>";

print preg_replace($pattern, $replacement, $string);


前と同じような段階までは進むのですが title=$text[\${1}] やはり同じくこの部分で引っかかってしまいます。

エラーメッセージは
Parse error: parse error, unexpected T_CHARACTER, expecting T_STRING or T_VARIABLE or T_NUM_STRING
$textないをクオーテーション等でくくってみてもうまくいかず、アドバイスいただけたらと思います。
264ちなみに:04/07/22 05:27 ID:O8WfHKX6
title=title とかけばコメント部にtitleとは出るのですが
title=$text[10] 等書いてもその部分はコメントが出されません。
$text[10]には当然値は入っているのですが・・・
265nobodyさん:04/07/22 06:16 ID:???
>>264
preg_replace_callbackを使って、コールバック関数内でglobal $text, $i;を宣言すればいい。
(元のfor文がグローバルスコープにあるのが前提だけど)
クラスを使えば変数のスコープに悩まされずに済む。

・・・それ以前にa要素のtitle属性に全文をぶち込もうという蛮勇のほうが問題と思うが。
しかもstrip_tagsもhtmlspecialcharsもかけずに。
ポップアップさせたいのならCSSとJavaScriptで対応した方がいいよ。
p2のソースとか参考にしる。
266nobodyさん:04/07/22 08:11 ID:???
>>259
<?
$data = file ("var.txt");
for ($i=0;$i<3;$i++) {
  include(rtrim("$data[$i]"));
  include("format.php");
}
?>

>>263
$string = $text[$i];
$pattern = "|>([0-9]+)|e";
$replacement = '"<a href=\"#${1}\" title=\"" . htmlspecialchars($text[${1}]) . "\">${1}</a>"';

print preg_replace($pattern, $replacement, $string);
267nobodyさん:04/07/22 11:32 ID:???
>258
http://www.mribti.com/barcode/sample.php

バーコードのことは良くわかんない。
で、上のはブラウザ上でさくっと試せます。

あ、QR コード描きたいなぁ。と、ふと思った。
268258:04/07/22 12:01 ID:???
>>267
そこも見つけてはいたんですが、JANコードに対応してないんですよ。
って、>>258で書きたいバーコード書いてませんでしたね。
JAN13 を書きたいんです。

そこだけ GD::Barcode で逃げるしかないかなぁ。ちょっと悔しいですが。
269nobodyさん:04/07/22 12:22 ID:IcVwk4jf
>>252について教えてくださいYO

$str = "<br />\n<br />\n<br />\n<br />\n<br />\n";
$str = mb_ereg_replace("^<br />", " <br />", $str);
print($str);

で、なんで下のようになるのよ。
<br />
<br />
<br />
<br />
<br />

本当に困ってます。お願いします。
270nobodyさん:04/07/22 12:33 ID:???
>>269
 <br />
<br />
<br />
<br />
<br />
こうなるが、どうなるようにしたいんだ?
271nobodyさん:04/07/22 12:40 ID:???
>>269
こうしたいのかな。

$str = mb_ereg_replace("^<br />", " <br />", $str, "m");

それにしても、PHP マニュアルにマルチバイト正規表現のオプション説明は目立たない・・・。
272nobodyさん:04/07/22 12:45 ID:???
>>268
GD使ってるなら JpGraph使えば?
ttp://www.aditus.nu/jpgraph/jpg_barcodes.php
273nobodyさん:04/07/22 12:47 ID:???
>>269
ちゃんと動いてるじゃん
100歩譲って全角と半角の空白の差し替えくらいしか見えないが
判別不能
274軟式PHP:04/07/22 13:10 ID:???
それがどうっしたっ!269はあっほだよっ♪
275nobodyさん:04/07/22 13:18 ID:???
なつかしい
276nobodyさん:04/07/22 13:25 ID:???
教えてください。
緊急で困っています。
PHP4.0.6+IE6を使って開発しています。
何故か急にセッションが効かなくなりました。本当にいきなりです。
配列変数をセッションで保存しているのですが、例えば
$nm[0]〜$nm[10]まであるとして、配列に値を代入します。
$nmをセッション宣言して次のページに移動したときに
$nm[4]〜$nm[6]まで保存されてなく、他のは保存されているといった不可解な状態になっています。
$nmをモニタリングしたところ、移動元のページの最後では値は残っているけど、移動先のページの最初では
すでに値は消えているといった状態です。セッション宣言した配列変数の一部分だけ消えてしまうといった現象です。
ちなみに会社内の他のPCでは正常動作しています。自分のPCでは開発していて突然このような状態になりました。
また以前開発したモノも、その当時は正常動作していたのですが、試しにテストしてみたらそちらでもセッションが効かなく
なってしまっていました。
何か原因とかわかるでしょうか?
277nobodyさん:04/07/22 13:31 ID:???
どうしてOSのことは書かないんだろう……
278nobodyさん:04/07/22 13:40 ID:???
>>268
つくったほうが早くない?
バーコードの仕様わかってるんでしょ?
279Imo ◆.jC7ANgFY. :04/07/22 13:46 ID:???
実は動作しているところを上書きしたんじゃない?
でついでにPHPAとか入ってるんじゃない?
そのときにはいったんPHPAのキャッシュを消すべし。
違ったらスルー
280276:04/07/22 13:56 ID:???
失礼しました。OSはWindowsXP SP1です。
試しにOPERA7でやってみたら正常に動作しました。
PHPAは入れていません。
281nobodyさん:04/07/22 13:58 ID:???
>>280
すごーく気になるんだが、クライアントのOS訊いてるんじゃないからな?
282nobodyさん:04/07/22 14:13 ID:???
>>276
ていうか$_SESSION使えよsession_resgister()やめれ
283276:04/07/22 14:18 ID:???
>>281
またまた失礼しました。
レン鯖なんで詳しいことはわからないのですが、Cobalt550です。
284nobodyさん:04/07/22 14:21 ID:???
>>282
4.0.6に$_SESSIONなんてあったケ?
285nobodyさん:04/07/22 14:25 ID:???
定数 : HP_BASE_URL

!ereg(HP_BASE_URL,$_SERVER["HTTP_REFERER"])を
preg_match('/HP_BASE_URL/',$_SERVER["HTTP_REFERER"])
に書き換えようとしたのですが、preg_matchの方では定数が
上手く使えない様です。'/'.HP_BASE_URL.'/'
でもダメでした。preg_matchでは定数を利用する事が出来ない
のでしょうか?
286269:04/07/22 14:50 ID:???
>>271
動きました。ああ、あなたは神です。アリガトン

>>271>>273
行頭改行に&nbsp;を入れたいんだよ。
でも、うちが使ってるサーバーではならなかったんだよ(;´д`)
287nobodyさん:04/07/22 15:04 ID:???
>>286
お前の日本語が不自由な事を威張られても
お兄さん困っちゃうんだけどな
288nobodyさん:04/07/22 15:14 ID:???
解決したとたん命令口調とは。夏ですな。
289nobodyさん:04/07/22 15:23 ID:ZtAuJUSe
while ( $filename = $save_dir->read() ) {
$filepath = $save_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
$filett = $filett+$filekb;
}
これでディレクトリの中のファイル容量を計算していて、これはこれで動くのですが
その後に
while ( $filename = $up_dir->read() ) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
echo "<img src=\"$filepath\">".$filekb;
}
と、画像一覧を表示させようとするとエラーがでます。
最初の構文の最後に、$save_dir->close();を入れるとエラーはでませんが
画像もでてきません。
$filenameを2度読み込んでるからでしょうか?クマった・・
290nobodyさん:04/07/22 15:24 ID:ZtAuJUSe
>>289
あぁ・・間違った。。訂正です・・
while ( $filename = $save_dir->read() ) {
$filepath = $save_dir2 . $filename;

        ↓
while ( $filename = $up_dir->read() ) {
$filepath = $up_dir2 . $filename;

すいません。
291258:04/07/22 15:40 ID:???
>>278
確かに作った方が早いかもしれないですね。
でもこれぐらいなら作った人すでにいそうなもんだけどなぁ。
あんまり需要ないのかな?
292nobodyさん:04/07/22 15:41 ID:???
>>291
無いと思うぞ
293nobodyさん:04/07/22 15:58 ID:???
ぜひ作って公開してメンテナンスしてサポートもしてください
294nobodyさん:04/07/22 16:09 ID:???
>>291
JpGraphが対応してるのは知らんかった。
2次元も作ったことあるけど仕様がカチッと決まってるし、
ゼロ作っちゃっても大したことないです。
決まった画像を並べて結合するだけですから。

読み取りは一般的なスキャナで図形として読み取って、
そこから補正かけて解析するのは、この手の扱いに慣れてないと
面倒かもしれん(そしてQRコードが良く出来ていることに気づく)
295nobodyさん:04/07/22 16:09 ID:???
>>263
>$replacement = "<a href=#\${1} title=$text[\${1}]>>\${1}</a>";
単純にこの行で $text[\${1}] を展開しようとしているだけなんじゃ?

後方参照を展開しつつ、配列も展開するにはe修飾子を使うしかないかも。
とりあえず$text[]はサニタイズ済みだとすれば、

$string = $text[$i];
$pattern = "|>([0-9]+)|e";
$replacement = '"<a href=\"#$1\" title=\"$text[$1]\">&gt;$1</a>"';

print preg_replace($pattern, $replacement, $string);

こうかな?つーかこれ、結構危険な気が・・・
296nobodyさん:04/07/22 16:12 ID:???
質問させてください
$hoge = "a:\yamada";

$hogeを"a:\suzuki"に置換したい場合どうしたらいいでしょうか?
\が入っているとereg_replaceでうまく置換できませんでした
よろしくお願いします
297296:04/07/22 16:19 ID:???
解決しました
298nobodyさん:04/07/22 16:48 ID:???
掲示板作ってて$regtime = time();ってやってるんだけど
$regtimeが他の書き込みと重複する事ってない?
299軟式PHP:04/07/22 16:51 ID:???
>>298
排他処理しないあっほだよっ♪
300nobodyさん:04/07/22 16:57 ID:???
>>298
2ちゃんみたいにアクセス数が多けりゃカブりまくりだけど
お前の所みたいに月に1件くらいの書き込みなら心配ないんじゃないの?
301nobodyさん:04/07/22 17:05 ID:???
つーか、time()の説明のどこに一意性を期待できると思ったのやら。
302nobodyさん:04/07/22 17:09 ID:???
ごめん
>>298の質問の意味がよくわからんのだが

$regtimeって何に使ってるんだ?
303nobodyさん:04/07/22 17:33 ID:ZtAuJUSe
>>289の質問は素通りされてるところをみると、厨な質問だったのでしょうか・・?
_| ̄|円
304nobodyさん:04/07/22 17:52 ID:???
>>303
PHP 側から見たファイルパスと Web 側から見たファイルパスは違うので画像が表示されないのは当然。
HTML で出力されたソースを見て画像の正しい位置を出力するようにしてみたら?
305nobodyさん:04/07/22 17:58 ID:ZtAuJUSe
>>304
えーと、下の画像一覧表示の構文だけなら問題無く表示できます。
エラーの内容からすると、2回目のwhile ( $filename = $save_dir->read() ) {
が呼び出された時に呼び出しエラーがでてるみたいです・・
306289:04/07/22 18:03 ID:ZtAuJUSe
文の書き方が変でしたね。。。>>304すいません
while ( $filename = $up_dir->read() ) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
$filett = $filett+$filekb; //ファイル容量計算
}
〜この間にhtmlが入って〜
while ( $filename = $up_dir->read() ) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
echo "<img src=\"$filepath\">".$filekb; //画像一覧
}
と。readを2回行っています。
どちらか一つならエラーはでず、思惑通り表示されます。
307298:04/07/22 18:03 ID:???
2ch風BBS作ってるんですよ
ここのURLにもあるでしょ
time関数が!
308nobodyさん:04/07/22 18:24 ID:???
UNIXタイムスタンプと言ってくれ
time関数とか臭い
309Imo ◆.jC7ANgFY. :04/07/22 18:27 ID:???
>>306
なんとなく邪道なサンプルをあげてみるテスト

while ( $filenames[] = $up_dir->read() ) {}
foreach ($filenames as $filename) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
$filett = $filett+$filekb; //ファイル容量計算
}
〜この間にhtmlが入って〜
foreach ($filenames as $filename) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
echo "<img src=\"$filepath\">".$filekb; //画像一覧
}
310nobodyさん:04/07/22 18:29 ID:???
>>306
それなら $up_dir->close() をファイル容量計算の後に閉じないと $up_dir のポインタが最初に戻らないのでは?
filesize() あたりでエラーになっているとか。エラー内容を書けば分かると思うけど。

ディレクトリのファイル容量を知りたいだけだったら disk_free_space() という関数もあるけどね。
311310:04/07/22 18:31 ID:???
>>310
disk_free_space() ではなくて disk_total_space() だった・・・。
312289:04/07/22 18:53 ID:ZtAuJUSe
>>310
すいません。。2回目リードの前に$up_dir=dir("img/")と再宣言してやったら、うまく行きました。
なぜ直ったかよくわかりませんが。。もっかいじっくり見てみます。
>>304
>>309
>>310
皆さん有難う御座いました。
disk_free_space() 楽そうな関数あるじゃん!って思って使ってみたら
わけわからん数字がでてきたので、詳しく調べてまた使ってみます^^;
313nobodyさん:04/07/22 19:17 ID:???
>>307
phpの前に日本語のコミュニケーション技法を勉強する必要があるんじゃないの?w

msec単位ならまだしもsec単位で書き込みが重複するかどうかなんて、
ちょっと考えれば解りそうなもんだが

一意性を求めたいなら他に方法があるからマニュアル引いて自分で調べろや
314nobodyさん:04/07/22 22:06 ID:???
GDでGIFが復活したっぽいね。PHPも対応するのかな。
315nobodyさん:04/07/22 23:42 ID:7BmR+CsI
一時的にアップロードしたファイルを読み込むのってどうしたらいいの?

input.php
<?php
echo <<<UPF
<form action="output.php" method="post">
<input type="file" name="upfile"><br>
<input type="submit" value="POST">
</form>
UPF;
?>

output.php
<?php
$outfile = $_POST['upfile'];
$file = @file($output);
print_r($file);
?>

じゃ、だめなの?
316nobodyさん:04/07/22 23:54 ID:???
>>315
   〃∩ ∧_∧
   ⊂⌒( ´・ω・)くぜんぶマニュアルに書いてあったでつ
     `ヽ_っ⌒/⌒c
http://www.php.net/manual/ja/features.file-upload.php
317nobodyさん:04/07/23 00:00 ID:NhG7RjUM
ありがとぅございまっ
318259:04/07/23 03:59 ID:???
>>266
ありがとうです、その書き方でうまくいきました。
319nobodyさん:04/07/23 13:07 ID:???
Wavファイルを読み込んで速度を変更したりする方法をご存知の方が
いらっしゃいましたら、教えて頂けると助かりますm(_ _)m
320nobodyさん:04/07/23 13:13 ID:???
常識で考えるとPHPの仕事とは思えないんですが
321nobodyさん:04/07/23 13:39 ID:???
>>319
pack(), unpack() を調べてごらん。mp3 はそれで編集した。
WAV のフォーマットを聞きたいのであれば Google で。
322nobodyさん:04/07/23 13:58 ID:???
>>321
どもありがとですm(_ _)mフォーマット見て弄ったら速度変えれました。
323nobodyさん:04/07/23 15:23 ID:kRHOf0Jq
php5 と php4 を共存させることはできますか?
324nobodyさん:04/07/23 16:32 ID:???
>>323
私も前に同じ事をやろうとしたが・・・無理だった
共存ではなくサーバーを2つ立てて各PHPを入れて転送するのがよさげ
325nobodyさん:04/07/23 16:46 ID:???
>>324
1つの Apache に PHP4 と PHP5 をインストールして共存に成功したこと
はないけど、Apache を PHP4 用と PHP5 用に 2つ別ディレクトリに
インストールして別の Port 番号で PHP4 用と PHP5 用の Apache を同時に
起動させることは可能。
326nobodyさん:04/07/23 18:05 ID:???
>>323
PHP5を使ってるが特に問題なさげ
ただ、PHP5で組んでいてPHP4に戻した時に何かあるかもね
327nobodyさん:04/07/24 06:05 ID:4AWYwTYs
すごく初心者で申し訳ないですが、質問させて下さい。

index.phpに
readfile("./$QUERY_STRING.txt");
って書いて、index.php?aを開いたらa.txtの内容が出てくる。
index.php?bを開いたらb.txtの内容が出てくる。
ここまでは分かったんですが、例えば、index.phpを開いた時に
txtファイルの一覧&リンクを出てくるようにして、クリックしたら、
一覧があった場所にa.txtの内容を表示するようにするにはどうしたらいいんでしょうか?

リンク一覧を作ってその後にreadfile("./$QUERY_STRING.txt");を書いてみたんですが
下にずらずら繋がっちゃって見た目がよくないんです。
親切な方教えてください。お願いします。
328nobodyさん:04/07/24 06:12 ID:???
親切な方はいません
329nobodyさん:04/07/24 07:05 ID:???
どうしたいのかよくわかんないんだけど
if (empty($QUERY_STRING)) echo リンク一覧;
とかそういうこと?
33017:04/07/24 09:53 ID:???
ereg_replace("((https?://|ftp://)([0-9a-z:_?./~%;()=+#-]|&)+)","<a href='\\1' target='_blank'>\\1</a>",$sql['body']);

perg_replace("/((https?://|ftp://)([0-9a-z:_?./~%;()=+#-]|&)+)/","<a href='\\1' target='_blank'>\\1</a>",$sql['body']);
に置き換え(eregをpreg)たらUnknown modifierが発生するケースが出て来てしまいました
どんな文字が影響していると考えられるのでしょうか?
331nobodyさん:04/07/24 10:18 ID:???
>>330
ext/pcre/php_pcre.c
マニュアルの言葉だと 内部オプション設定ってやつを処理する部分で、
内部オプションにないものを指定した時にエラーとして表示される。
どこかの「/」が邪魔してるんじゃないの?
つーか、オイラなら正規表現でエラーが出たら一文字ずつ削って動作確認するけどな
332nobodyさん:04/07/24 10:32 ID:???
//送信が押された場合
if($_POST['b1']){
//エラーチェック
if(empty($_POST["main"])){
echo "何も本文が入力されていません";
exit;
//データベース書き込み
}else{
$keyday = strftime("%Y/%m/%d %H:%M:%S",time()+3600);
if(empty($_POST["name"])){
$keyname = "無題";
}else{
$keyname = $_POST["name"];
}
$keymain = $_POST["main"];
$result = pg_query("select * from kadaidb;");
$rows = pg_numrows($result);
$rows++;
$radio = '<input type="radio" name="radio" value="$rows">';
pg_query("insert into kadaidb values ('$radio','$rows','$keyday','$keyname','$keymain');");
pg_freeresult($result);
print <<<END
<H2>送信しました</H2><BR><BR>
<H3>管理番号</H3> $rows<BR><BR>
<H3>日付</H3> $keyday<BR><BR>
<H3>タイトル</H3> $keyname<BR><BR>
<H3>本文</H3><BR> $keymain
END;
}
}

ラジオボタンのvalueに$rowsが反映されるようにしたいのですが,どうすればいいのでしょうか。
333nobodyさん:04/07/24 10:51 ID:???
>>332
$rowsが変数として展開されずに そのままの文字列になってるってことかい?
文字列の中に変数を置いた時に ' と " では扱いが異なってくる。
〜 value="'.$rows.'">'; にでもすりゃェェんでないの?
334nobodyさん:04/07/24 11:03 ID:???
おおお!!!!
なりました。ありがとうございます。
335 ◆JirmzAivjs :04/07/24 11:06 ID:???
>>332
$radio = "<input type=\"radio\" name=\"radio\" value=\"$rows\">";
でいいじゃん。
つーかこれだと管理番号かぶるからちょっと見直した方がよくない?
336nobodyさん:04/07/24 11:16 ID:???
日記一覧をラジオボタンで選択し,”削除”っていうボタンを押したら
if($_POST['del']){
$keydel = $_POST['radio'];
pg_query("delete from kadaidb where num=$keydel;");
}
を実行するようにすればいいかなっと思ったのですが,うまく動作しないみたいです…
337nobodyさん:04/07/24 11:24 ID:???
>>336
Perlコーディングスレからのパクリだけど、
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
338nobodyさん:04/07/24 11:27 ID:???
>>336
なんだ唐突に。
お前は誰よ?
339 ◆JirmzAivjs :04/07/24 11:32 ID:???
自分からも質問
未だに$_GET $_POST等を使用するメリットって何ですか?
みんなよく使ってるみたいだけど。参考↓
http://php.s3.to/man/language.variables.predefined.html
http://php.s3.to/man/function.import-request-variables.html
340nobodyさん:04/07/24 11:32 ID:???
332からの続きでそのまま書いてました…
335さんに対して答えてるはずだったのですが,読み直してみたら,答えになっていませんね。

んもう,試行錯誤してたら昼・・・少し寝てからまた頑張ってみます。
341 ◆JirmzAivjs :04/07/24 11:35 ID:???
>>340
スクリプト書いてたらテンパル事も
よくあるから気にしない。
336の部分はパッと見特に問題はないかと
342nobodyさん:04/07/24 11:38 ID:???
>>340
元質問のレス番を名乗るかトリップぐらいつけれ
343Imo ◆.jC7ANgFY. :04/07/24 12:05 ID:???
>>339
それは$_REQUESTを使うべきではといいたいのですか?
 COOKIEと重なるから私は嫌うのですがねぇ
import_request_variablesで展開すべきだといいたいのですか?
 グローバル変数が勝手に埋められるのはあまり・・・
それとも$HTTP_GET_VARSを使うべきではといいたいのですか?
 変数名が長いからあまり・・・
はたまた$_SERVERから必死に分解すべきだといいたいのですか?
 perlと同じことしないとだめなんて・・・
これらと違うのなら何ですか?
344550 ◆JirmzAivjs :04/07/24 12:25 ID:???
>>343
フムフム、つまり
$_POST,$GET,$_COOKIE ローカルで個別に参照
$_REQUEST ローカルで全部参照したい時
$HTTP_GET_VARS 使わない
$_SERVER PHPの意味が無い
import_request_variables 引き回したい時
でおk?
345nobodyさん:04/07/24 12:39 ID:???
厨質問者に厨解答者、これぞ夏の風物詩。

>>336?
もっと根本的なところでアレなのは諦めるとして、フォームでは
$cbox = "<input type=\"checkbox\" name=\"delete[]\" value=\"$rows\" />";
として、削除するコードは
if (isset($_POST['delete']) && is_array($_POST['delete']) && count($_POST['delete']) > 0) {
  $keys = array_map('intval', $_POST['delete']);
  $keys = array_uniquie($keys);
  $key = implode(', ', $keys);
  $query = "DELETE FROM ktaidb WHERE num IN ($key);";
  $result = @pg_query($query);
  /* エラーチェック省略 */
}
とした方が良いと思われ。(各関数はマニュアルで調べるべし)
>>332を見る限りではnum列をINTEGER型で定義してると思うんだけど、SERIAL型の方がいい。
あとね、いきなりDBを操作するコードを書くんじゃなしに
そのつど変数をvar_dump()して期待通りになってるかチェックしていったほうがいいよ。

>>◆JirmzAivj
何もかもだめぽ。
346 ◆JirmzAivjs :04/07/24 12:49 ID:???
>>345
あなたに言われる筋合いは無い
347nobodyさん:04/07/24 14:59 ID:???
>>344
ttp://jp.php.net/manual/ja/security.php
付近を読むべきかと
348nobodyさん:04/07/24 15:16 ID:???
>>345
細かいご指摘ありがとうございました。
削除コードの部分はなんとなく理解できました。
今までphpPgAdminでいちいちSQL文打って確認していましたが,var_dump()の方が数倍楽ですね。

結局寝損ねましたので,またがんばってみますm(_ _)m
349nobodyさん:04/07/24 15:45 ID:???
>>347
よく分かっていないのだが、register_globalsはoffで使った方が初心者には良いってことか?
しかし、
http://php.s3.to/man/language.variables.predefined.html
これを読むと、さらに分からなくなる。誰か解説して。
350nobodyさん:04/07/24 16:04 ID:???
351nobodyさん:04/07/24 16:13 ID:???
>349
ttp://www.sound-uz.jp/php/tips/security.html

Googleって便利だね。
352nobodyさん:04/07/24 17:35 ID:???
よろしけば教えてください。

"00012"の"0"の部分を削除して
"12"だけを取り出したいのですが、どうしてもわかりません。
substrで取り出すにも"12"の部分の桁は変化するので・・・。

よろしくお願いします。
353nobodyさん:04/07/24 17:36 ID:???
>>352
echo (int)"00012"
354nobodyさん:04/07/24 18:22 ID:???
というか、register_globalsはoffが推奨されてるんじゃなかったっけ?
355nobodyさん:04/07/24 19:46 ID:???
2年以上前にリリースされたPHP4.2.0からデフォルトでOffだしね。
未だにregister_globals=On前提のスクリプト書いてる香具師はマジヤバイ。
356nobodyさん:04/07/24 19:59 ID:???
>>353
ありがとうございます。
うまくいきました。
すごい・・・。
357nobodyさん:04/07/24 20:19 ID:???
register_globals=Onって具体的にどうやばいんでしょうか?
358nobodyさん:04/07/24 20:26 ID:???
>>355
session_registerを使っているのもやばいな

>>357
マニュアル嫁
ttp://jp.php.net/manual/ja/ini.sect.data-handling.php#ini.register-globals
359nobodyさん:04/07/24 23:38 ID:rcqw39Y8
現在のコネクション数(netstatでestablishedなTCPの数)を取得する方法ってありますか?
たまにそういう表示してるサイトを見かけるんで、できるようなんですが。
360nobodyさん:04/07/25 00:32 ID:???
質問するのに自演したら自分が損するだけなんだがな
361263:04/07/25 03:17 ID:ZfezmSNL
>295
教えていただいた方法で実現できました。だたこういった2chなどの匿名の掲示板と違い無記名ではない掲示板ですので
$name[$i]($text[$i]の$iと同じ要素に格納されている部分)もいっしょにポップアップ表示させたいと思っております。
可能でしょうか?
362nobodyさん:04/07/25 03:35 ID:???
>>357 日本語通じてるのか?
>>355 読め
363nobodyさん:04/07/25 03:38 ID:???
>>359
netstatすればいい。
364nobodyさん:04/07/25 04:59 ID:???
アホ初心者は適当なレスを絶対スルーする謎の能力を持ってるよな。
365nobodyさん:04/07/25 05:12 ID:???
>>361
どうしたいのか判らんけど、
$replacement = '"<a href=\"#$1\" title=\"名前:$name[$1] 本文:$text[$1]\">&gt;$1</a>"';
じゃだめなのか?
もっと複雑なポップアップをしたいのなら、以前に言われてたけど
ブラウザに任せずJavaScriptを使うべき。

そういや>>295でサニタイズ済みなことを前程にしているのだから、$patternは
$pattern = "|&gt;([0-9]+)|e";
だったな(&の置換忘れ)
366nobodyさん:04/07/25 05:56 ID:FYTamtub
PEAR使ったサイトをローカル(windows&IIS)で動かしたいんだけど、
require_once 'PEAR.php';
とかすると、バイナリ版使ってるためかソースが見つからず動作しない。
とりあえずソースだけ持ってこようと思ったんだけど、
どのソースを移せばいいのかよくわからない。
誰かたちけて。  PHP5です。
367nobodyさん:04/07/25 06:17 ID:???
go_pearを実行
368nobodyさん:04/07/25 09:25 ID:???
>>366
Windows版のほうはあんまり使ってなくてうろ覚えなんだけど、
php.iniでinclude_pathをC:\PHP\PEARとか、ちゃんと設定しる。
もしくはスクリプト冒頭でini_set('include_path', '.;D:\path\to\pear');とかそんな感じ。
369nobodyさん:04/07/25 14:31 ID:???
関数内では関数外でグローバル変数化した変数の値は使えないのでしょうか?
global $hoge;
foo();
exit;
function foo(){
print ($hoge);
}
これは動きませんかね?
370369:04/07/25 14:43 ID:???
あのう、早くレスしてくれません?
これなら自分で確かめた方が早いです
371369:04/07/25 15:01 ID:???
分からないんですか?
普段は偉ぶってるくせに無能揃いですね。
372nobodyさん:04/07/25 15:15 ID:???
ショボイ煽りをPHPであぼーんする方法はありますか?
373nobodyさん:04/07/25 16:17 ID:???
   ___    クルッ…   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  / || ̄ ̄|| <⌒ヽ ))  < >>371 はてさて、
  |  ||__|| <  丿    | どこを縦に読みゃいいんだ?
  | ̄ ̄\三⊂/ ̄ ̄ ̄/  \___________
  |    | ( ./     /
374nobodyさん:04/07/25 16:27 ID:???
脳内あぼーんで対処するしかないかと。
375369:04/07/25 19:37 ID:???
お兄ちゃんに聞いて解決しました。
うちのお兄ちゃんは大学院に行ってるからはっきり言ってお前らより上。
もう偉ぶるのやめてね
376nobodyさん:04/07/25 19:52 ID:???
>>375
私のお兄ちゃんは修士過程終わった後、某研究所で働いてるんだぞ!
ハッキリ言ってお前のお兄ちゃんより上
377nobodyさん:04/07/25 20:11 ID:???
>>375
妹がお兄ちゃんにおねだりするように質問してたら喜んで答えたぞ。
378nobodyさん:04/07/25 20:17 ID:???
>>369
┐(´ー`)┌
夏だねえ・・
379nobodyさん:04/07/25 22:31 ID:???
すみませんちとうまくいかないので質問させてください。

今入退室を付けたチャットを作ってるんです。それで、入室時に名前、時刻、IPを
name<>date<>ip<改行>name<>date<>ip<改行>
の形式でログに保存して、最近の入室履歴ってことで、最新10まで[name 時刻:data]で表示させようと思います。
以下のでやってみたのですが、何も表示されず・・・。何が問題でしょうか。

$data = file('log.log');
for($i = 0;$i > 10;$i++){
$v = split('<>', $data[i]);
echo("$v[0] 時刻:$v[1]<br>");
}
380379:04/07/25 22:35 ID:???
訂正です
$v = split('<>', $data[i]);

$v = split('<>', $data[$i]);
381nobodyさん:04/07/25 22:45 ID:???
>>379
> for($i = 0;$i > 10;$i++){
このへん。
echoの中身も表示されないし、forループに問題があることにすぐ気づかないと。
382379:04/07/25 22:49 ID:???
あぁぁぁぁ・・・やっちまった。
$i>10じゃ動くはずが無いと・・・。
どんなパズルもわかっちゃうと簡単すぎて笑っちゃうもんですね。

わざわざありがとうございました。
383nobodyさん:04/07/25 22:56 ID:???
>>379
・var_dump($data)してみること。
・for構文を良く理解すること。
384nobodyさん:04/07/26 00:03 ID:???
質問なのですが、
requireとrequire_onceはどう違うのでしょうか?
ヘルプを呼んだ限りでは、毎回読み込むか一回読み込むかの違いみたいに
書いてあったのですが、PHPはリクエストのたびにスクリプトを毎回読み込むのではないのですか?
一回しか読み込まないとはどういう動きをするのでしょうか?
385nobodyさん:04/07/26 00:28 ID:???
メモリに同じデータが入ってる時は読み込まなかったりして
386nobodyさん:04/07/26 00:36 ID:???
>>384
何か関数定義したファイルを2回以上require/require_onceで読み込んでみれ。
387nobodyさん:04/07/26 02:49 ID:???
>>384
すでにincludeしたファイルを再び読む込むように指定した場合の挙動の違い。
例えば、読むファイルをテンプレート代わりに使う場合はinclude、
共通ユーザー関数群の定義に使う場合はinclude_onceを使うといい


下手な釣りを見て思い出したが、PHPにはユーザーによる変数の
スーパーグローバル化やラベルジャンプがないのでちょっと困ることがあるな。
あれば楽できるのに・・・と思う局面がたまにある
388nobodyさん:04/07/26 02:54 ID:sMxRgzIj
教えてください。

ファイルをアップロードするスクリプトを組んでいるのですが、ファイルのサイズがある程度大きくなるとうまくいきません。
1) 651バイトの画像ファイルは正常にアップロードできました。
2) テスト用に文字列"1234567890"で埋めた 161,876バイトのテキストファイルは以下の様になります。
   type : text/plain
   size : 321880
   error: 0

実際にUPされたファイルを見てみると
先頭に1,260バイト分 "1234567890"が入っていて次に

-----------------------------7d420b560c66
Content-Disposition: form-data; name="upfile"; filename="クライアント側のファイル名"
Content-Type: text/plain\r\n\r\n

その後最後まで"1234567890"が入っているようです。
(その後の部分は多いのでざっと目視しただけですが、少なくともodでダンプ取った範囲では 1164520=321,872まではデータが埋まってました)

環境は RedhatLinux9.0 PHP-4.2.2 Apache2.0.40 で
file_uploadsはOn
upload_max_filesizeは1M
に設定してあります。



同じスクリプトを別サーバにて動作させると正常に作動するのでどうにも原因がわからないです。
怪しそうな所をお教えください。

ちなみに動作するサーバでも似たような構成で動かしています。
RedhatLinux9.0 PHP-4.2.2-17(SRPMからMB_STRINGをONにして自分でコンパイルした)+ Apache2.0.40 です。
389388:04/07/26 04:29 ID:sMxRgzIj
追記です。

試にうまく動作している方のサーバから自分でビルドしたPHPのパッケージを動作していないサーバにFTPしてインストールしてみました。
php.iniもコピーしました。

結果は以前と同じでサイズが倍ほどに膨れます。

PHPの問題ではないみたいですね。
訳がわからなくなってきました。。
390nobodyさん:04/07/26 05:49 ID:IOiIX+Fr
自分や他の人が持っているdocomo携帯からでは問題なく見られる掲示板が
vodafoneからだと見られないという報告を受けました。文字コードとうで
何か気をつけるべきことがあるのでしょうか?詳しい方教えてください。
391nobodyさん:04/07/26 05:49 ID:???
お約束のApache(PHPのではない)のPOSTデータの限度設定の確認はした?
POSTメソッドを使ったアップロードでFAQ的なところだけど。
392nobodyさん:04/07/26 07:40 ID:???
>>387
変数のスーパーグローバル化というのは global で宣言したり $GLOBALS を
使えばできると思うのだが・・・。
393nobodyさん:04/07/26 09:23 ID:zfZRDkJ9
phpのなかで、fopen/fwriteでファイル書き出しをしたいのですが、通常だったら、
ファイルのオーナーがapacheの実行オーナー(nobodyさん)になってしまいます。
これを、自分のアカウントがオーナーにしたいです。
また、ファイルの内容は変更することがあるので、その時には、ファイルのオーナーを
nobody さんに戻せないといけません。

よろしくおながいします。
394nobodyさん:04/07/26 09:38 ID:???
>>390
auから見てる人はあっち。vodafoneから見てる人はこっち。
とか携帯の仕様を元に振り分けるとか
395nobodyさん:04/07/26 11:18 ID:BnaAbQE9
""の中で、
変数$foo['hoge'][$bar['huga']]を表記するにはどうすればいいですか?

単に、${foo['hoge'][$bar['huga']]}では

Parse error: parse error, expecting `'}''
となります。
396nobodyさん:04/07/26 11:20 ID:???
>>395
{$foo['hoge'][$bar['huga']]}

${hoge}じゃなくて{$hoge}を使えばいい。
397nobodyさん:04/07/26 11:23 ID:BnaAbQE9
>>396
ありがとうございます。解決しました。
{$hoge[]}と${hoge[]}の文法的な違いってなんですか?
398nobodyさん:04/07/26 11:32 ID:zfZRDkJ9
>>394
vodafoneのキャッシュ制限にひっかかってない?
非パケ端末は1ページ6kbyte以下ですよ。
399nobodyさん:04/07/26 11:32 ID:???
>>397
マニュアルを読みましょう。「変数のパース」以下を読んでみて下さい。
http://www.php.net/manual/ja/language.types.string.php
400nobodyさん:04/07/26 11:57 ID:???
>>392
まあ、一々宣言すればいいんだけど、$PHP_SELF位は
スーパーグローバルに登録された方が楽かな・・・とは思うもんで。
それともこういう書き方は(・A ・)イクナイ?
401nobodyさん:04/07/26 13:06 ID:U4MCK2zg
質問させてください!

1:タイムスタンプ名のディレクトリをumask設定してから作成
(他のサイトでumaskしたらいいと書かれていました)
$oldmask = umask(0);
$dir = mkdir($timestamp,0777);
umask($oldmask);

2:そのディレクトリに画像をアップ
3:$name = $dir."/1.jpg";

これでechoで$nameを出力させるときちんとjpg名が出力されるのですが、
is_file($name)等でファイルの存在を調べると、falseが返ってきます。
これはなぜなのでしょうか?知ってる方お願いします。
402nobodyさん:04/07/26 13:20 ID:???
ディレクトリは出来たけど、画像はアップロードできてないだけじゃねーの( ´-`)
アップロード処理の例外処理とかちゃんとしてる?
403nobodyさん:04/07/26 13:24 ID:???
>>401
$dirに何が入ってるか見てみ
404nobodyさん:04/07/26 14:17 ID:???
[PHP-users 22798]
Windowsではできてると言っているのに、、、
「Macでは試験したことが無いですが、Windows限定でよければ。」ってアフォか
405nobodyさん:04/07/26 14:24 ID:???
>>404
そういうおもしろいのは↓へどうぞ
http://pc5.2ch.net/test/read.cgi/php/1090322290/
406nobodyさん:04/07/26 14:29 ID:???
誤爆スマソ
407401:04/07/26 14:42 ID:U4MCK2zg
>>402-403

$nameを出力すると「123456789/1.jpg」みたいになります。

<img src=$name>
はきちんと画像が表示されます。画像はアップされています。FTPでも画像の存在を確認できます。
でもis_file($name)はfalseが返ってくるんです。

is_file("123456789/1.jpg") で確認するとTRUEなのですが、is_file($name)はFALSEなんです。
408nobodyさん:04/07/26 15:07 ID:???
フルパスで
409401:04/07/26 15:26 ID:???
>>408
フルパスでも無理でした。
mkdirで作成したディレクトリにあるファイルをis_fileで調べた場合FALSEを返すのでしょうか?
is_dir($dir)もFALSEでした。
※$dirにはmkdirで作成したディレクトリ名(フルパス)
410nobodyさん:04/07/26 15:32 ID:???
file_existsでも同じ?
411nobodyさん:04/07/26 15:34 ID:4tJVtMce
質問です。
htmlspecialcharsを使うと♥等の文字実体参照ができなくなってしまうのですが、
対処方法はあるのでしょうか。
&amp;を全て&に変換してから表示させれば実現できることを確認しましたが
それだとhtmlspecialcharsの意味が無くなるし・・
よろしくおながいします。
412401:04/07/26 15:42 ID:???
>>410
はい・・・file_existsもfilesizeも、mkdirで作成したディレクトリを含めその中にあるファイルの情報を
得ようとするとFALSEなんです。

if ( file_exists ( $name ) ) //FALSE

print "<img src='".$name."'>";//アップした画像が表示される

413388:04/07/26 15:42 ID:sMxRgzIj
>391
アドバイス有難うございます。

ApacheのPOSTデータの限度設定とはPHPのマニュアルサイトのUser Contributedにのっかっている
LimitRequestBodyのことでしょうか?

そちらを2Mで試してみていますがうまくいかないです。
414nobodyさん:04/07/26 15:42 ID:???
独自のモジュール作ればヨシ!
415nobodyさん:04/07/26 15:45 ID:???
>>401
ディレクトリと画像ファイルのパーミッションどうなってる?
416401:04/07/26 16:14 ID:???
>>415
ディレクトリは777、その中の画像は644です
417nobodyさん:04/07/26 16:27 ID:???
>>413
そうそれ(うろ覚えでスマンね)。
現象が違う(倍に膨れる/該当するエラーが出てない)ので
違うとは思ったが、やっぱり関係ないね。

入ってるデータ見てるとWebクライアント自体がデータをマルチパート化して
その両方の形式とも送ってるみたい。使ってるのはIE?
別のWebクラインアントで試すか、送信データをキャプチャして見てみるのが良いかも。
418nobodyさん:04/07/26 16:41 ID:???
>>401
やはりポカミスな気がする
is_file($name)の$name当たりを見直してみると良いかも
419nobodyさん:04/07/26 17:02 ID:???
俺もポカミスのような気がするなぁ…。
420nobodyさん:04/07/26 17:13 ID:???
>>418-419
自分もそんな気がしてるのですが、藁にもすがる思いで質問しました。
もう一度じっくり見直してみます。有難うございました。
421nobodyさん:04/07/26 17:21 ID:???
>>409
401の$dir = mkdir($timestamp,0777);を実行して
$dirに作成したディレクトリ名が入るのか?
http://www.php.net/manual/ja/function.mkdir.php
422nobodyさん:04/07/26 17:54 ID:???
成功した場合に TRUE 、失敗した場合に FALSE を返します。

423nobodyさん:04/07/26 18:09 ID:???
しかし、

>>412 の、これがわからんな

if ( file_exists ( $name ) ) //FALSE
print "<img src='".$name."'>";//アップした画像が表示される
424nobodyさん:04/07/26 18:15 ID:???
>if ( file_exists ( $name ) ) //FALSE

>print "<img src='".$name."'>";//アップした画像が表示される
の参照ディレクトリが違うだけの話じゃないの?
425nobodyさん:04/07/26 18:57 ID:???
データ(data.cgi)の一番上の行だけ
読み取るにはどうすればよいでしょうか?
426nobodyさん:04/07/26 19:07 ID:???
>>425
今は どうやってるんだい?
427nobodyさん:04/07/26 19:11 ID:???
$msg = file(data.cgi);
これで呼び出すと全部が変数に入るから
一番上のだけ読み込みたいと・・・
428nobodyさん:04/07/26 19:12 ID:???
変数じゃなくて配列な
$msg[0]
429nobodyさん:04/07/26 19:17 ID:???
data.cgiの中身が
「田中さん
山下さん
吉田さん」
だとすると
$msg = file(data.cgi);で

$msg[0] が田中さん
$msg[1] が山下さん
$msg[2] が吉田さん
となるのですか?
430nobodyさん:04/07/26 19:17 ID:???
>>407
>is_file("123456789/1.jpg") で確認するとTRUEなのですが、is_file($name)はFALSEなんです。
↓は試した?
if ( "123456789/1.jpg" != $name ) echo '当然falseだ(゚Д゚ )ゴルァ!!';

>>411
適当に書いたので合ってるか分からんが、
$contents=preg_replace('/&amp;([0-9a-z]+;)/i' ,'&$1', $contents);
等で、実体参照と思われる部分のみさらに置換し直す。
431nobodyさん:04/07/26 19:18 ID:???
>>429
print_r($msg);とか試せ
432nobodyさん:04/07/26 19:24 ID:???
質問ナンデツガ
送信ボタンをクリックしたらAに1が
代入されるとかできますか?
433nobodyさん:04/07/26 19:24 ID:???
>>429
お前は一回マニュアルを読め
434nobodyさん:04/07/26 19:30 ID:???
>>432
お前は一回、、、何から読ませればいいですか?
435nobodyさん:04/07/26 19:31 ID:???
国語の教科書とか
436nobodyさん:04/07/26 19:42 ID:???
$msg = implode(",",array($name,$comment,$time,$host));
$com = file($data);
$fp = fopen($data,"w");
fputs($fp, "$msg\n");
fclose($fp);


fputs(): supplied argument is not a valid stream resource
437436:04/07/26 19:46 ID:???
何が悪いんだよぬるぽーーーーーー!!!
438436:04/07/26 19:48 ID:???
ちなみに$dataのパーミッションは666でつ
ヘルプキボンヌ
439nobodyさん:04/07/26 19:50 ID:???
var_dump($msg)で中身みれよ
440nobodyさん:04/07/26 19:53 ID:???
ちゃんと中身ありますた;;
string(77) "やまもと,おはようございます,2004/07/26 19:52:51,YahooBB************.bbtec.net"
441nobodyさん:04/07/26 20:10 ID:???
$data とか $fp をvar_dump した方がいいと思う。
442436:04/07/26 20:12 ID:???
bool(false)

ナンダコリャ
443nobodyさん:04/07/26 20:33 ID:???
>>442
$fpか? まあ要はファイル開けないぞゴルァ!ってことだな。
if(!$fp=fopen($data,"w")){
echo "cannot open!";
}else{
fputs($fp, "$msg\n");
}
に変えて実行してみれ。
444436:04/07/26 20:43 ID:???
開けませんですた_| ̄|○
445nobodyさん:04/07/26 20:44 ID:???
いや。必要なのは
if(!file_exists($data)){
  echo "file not found."
}
だと思う。
typoしてないかどうかよーくソース眺めてみ。
446436:04/07/26 20:46 ID:???
まじで皆さんごめんなさい_| ̄|○
$dataではなく$logですた;;
447nobodyさん:04/07/26 21:19 ID:???
>>446
おう、それと$fp=fopen($data,"w")だと$logの中身は常に最新の$msg一行だけになるから
$fp=fopen($data,"a");でオープンしとけ。
448nobodyさん:04/07/26 21:24 ID:???
>>447
あり><
どうりで上書きされるわけだ・・・
449388:04/07/26 21:32 ID:sMxRgzIj
>417
クライアントはIE6とネスケ7.1で試してます。

動いている方のサーバは
 Redhat9.0を米国のスタッフが英語環境で(おそらくインターネットサーバとして)インストールして
 その後、私がPHPをMB_STRING付&不要なオプションを削除してリビルド、
 httpd.conf内の不要モジュール等の削除+バーチャルホストの設定を行っています。¥

 ついでに手持ちのもう2台のサーバ(自分でRedhat9.0を日本語ベースでサーバインストール&PHPをMB_STRINGコンパイル
 &apacheを上記サーバとほぼ同じ設定をしたもので試しましたがそちらでも動作しています。

対し動いて居ないサーバは
 SAKURAインターネットのサーバでApache、PHPともインストールされたままのものを使用(1台はPHPのパッケージを昨日入れ替えました)
 10Mプレミアムと10Mスタンダードの2台です。

普通に自力でやった物が動いていて、SAKURAのほうのみ動かない状況です。

これからTCPDUMPで内容解析してみます。
450nobodyさん:04/07/26 21:44 ID:???
つーか、煽りでもなんでもなくて純粋に不思議なんだが、
マニュアルちゃんと読んでない関数をよく使おうと思うな…
特に戻り値把握して無いって普通におかしいだろ?
その関数をそこで使おうと思った理由がスゲー気になる
451388:04/07/26 21:57 ID:sMxRgzIj
サイズが倍になるサーバでtcpdumpしてみました。
概算ですが送信サイズは元のファイルのサイズです。
またhttpヘッダー部のダンプを見てみたところ
Content-Length:.162212  (PHP側では size : 321880と表示される)
の文字があったので送信されるHTTPヘッダーは正しいみたいです。
(まぁ同じクライアントで別サーバで動作するのでクライアント側から送信されるデータは正しいっぽいですね)

もう訳がわからなくなったので一度ApacheをSRPMからビルドしてみます。
452388:04/07/26 22:19 ID:sMxRgzIj
httpd.confだけをApacheインストール標準にもどしてヴァーチャルホストの設定だけを元のものに戻してみた所正しくアップされました。
httpd.confのどこかに問題がありそうです。
これから箇所を特定してみます。
スレ違いになってしまいましたが箇所がわかったら書き込みますね。
453nobodyさん:04/07/26 22:37 ID:???
>>450
入門書かなんかで見たサンプルを丸飲みして覚えてるからこういう事態になるんじゃない?
454388:04/07/26 22:45 ID:sMxRgzIj
場所の特定できました。

AddType application/x-httpd-php .php

これを入れるとサイズが倍になります。。 う〜ん

たしかに自分で設定したほうには入れていなかったです。
これ設定しなくて良かったんでしたっけ?


ともあれ原因がこんな所にあるとは。。 奥が深いです。

アドバイスどうもありがとうございました。
455nobodyさん:04/07/26 22:52 ID:???
>>388では生データの概要全部が読めないんだけど、
アップロード元のhtmlで「enctype="multipart/form-data" 」
は指定されてるよね?
456nobodyさん:04/07/26 22:59 ID:???
>>454
記述はいる筈だけど、それはRHL9(のRPMで入れた)なら
/etc/httpd/conf.d/php.confに書かれてるんじゃないかな。
.htaccessにも書けるし、設定は「上書き」であって
コンフリクトはしないと思うけど。
457nobodyさん:04/07/26 23:10 ID:ehBSQM9L
393への回答キボンヌ
おながいします
458Imo ◆.jC7ANgFY. :04/07/26 23:14 ID:???
chmodで606にすれば解決。
所有者を自分にしたければCGI/perlから作ればよし。
459388:04/07/26 23:19 ID:sMxRgzIj
>455
もちろんマルチパートで送信しています。
手持ちのサーバの大部分はうまく動作しているのです。
最近引き継いだSAKURAインターネットのサーバのみダメな状態だったのです。
送信パケットでは正常なパケットを送信しつつ、ApacheからPHPにデータが渡る時点で倍に増えているような状況でした。

>454
php.conf にはAddTypeは書かれて居ないです。
入っていたのはLoadMduleとLimit関連、DirectoryIndexの3点だけでした。

grepしてみたのですが他にphpのAddTypeをしている箇所は無いようです。
何度か試しましたが[AddType application/x-httpd-php .php]を入れてhttpd再起動でサイズが倍に、
コメントアウトして再起動で正常なサイズでアップされます。

Apache,phpのバージョンの組み合わせの問題でしょうかね?
460nobodyさん:04/07/26 23:42 ID:???
<俺メモ>
RedHat9にPHP4とGD入れるときのconfigureで、--with-gd --with-jpeg-dir=/usr/lib/したとき、
「configure: error: libjpeg.(a|so) not found.」ってエラー出る場合は、
「find /usr/lib -name libjpeg*」しても「libjpeg.so」が見つからないはず。
OSインストール時にパッケージの開発ツールで「Xソフトウェア開発」を入れれば解決。
</俺メモ>
461nobodyさん:04/07/26 23:53 ID:???
すみません、どなたかPHP5でnamespaceがサポートされなかった理由をご存知ないでしょうか。
RC1まではあってRC2で削除されたようですが。
よろしくお願いします。

#interfaceよりnamespaceの方が欲しかった・・・
462nobodyさん:04/07/27 01:09 ID:???
>>461
コードが汚くなるからだったりして
463nobodyさん:04/07/27 01:45 ID:???
速度とトレードしたのかもしれないね
464nobodyさん:04/07/27 02:02 ID:???
Zeevタンの鶴の一声で決まったらしいけど、なんでやろね?
465nobodyさん:04/07/27 02:12 ID:???
プログラム超初心者なので教えて下さい。

あ,データA,データB,
い,データA,データB,
う,データA,データB,

としているデータを?id=あ
で一行目の列のみ検索して一致した場合その行のデータを取得して配列?に入れて表示したいんですけど教えて下さい。
適当に書いてみたんだけど↓(つд⊂)エーン全然ちがうよね??

<?PHP
$file_data = file("data.csv");
foreach ($file_data as $temp_line){
preg_match('/$id/',$temp_line,$parts);}
{
$parts = explode(",",$temp_line,4);
$name1[] = $parts[0];
$name2[] = $parts[1];
$recipe[] = $parts[2];
$comment[] = $parts[3];
}
?>
466nobodyさん:04/07/27 04:03 ID:???
>>465
全然ダメ
そのものズバリ書くのも何なのでヒントを

preg_match の部分が変だし、preg_match は if 文じゃない。
foreach のループの中身もおかしい。

超初心者なら、まずプログラムの書き方を覚えないと
どっかで配布されているスクリプトを拾ってきて、それを読むのがいいかも
467465です:04/07/27 05:13 ID:???
>>466
丁寧な解説ありがとうございます。
やはり基礎からやった方がいいのですね(ノД`)シクシク
頑張ってPHP覚えます。
あと、超初心者向けのPHP入門みたいなホームページをご存知でしたら教えて下さい。
468nobodyさん:04/07/27 08:47 ID:???
検  索  し  ろ  や
469nobodyさん:04/07/27 09:05 ID:???
>やはり基礎からやった方がいいのですね(ノД`)シクシク
コイツ最悪だ
470nobodyさん:04/07/27 09:41 ID:???
いちいち初歩的な質問に答えているから問題なのでは?
スルーしとけば伸びてこないし何れ滅びる
471軟式PHP:04/07/27 09:56 ID:???
>>467
何考えてる〜お前何言ってる〜♪あほの塊〜何考えてる♪
あっほだな〜♪
472nobodyさん:04/07/27 10:26 ID:???
>>468-471はこのスレで一生懸命ピーエイチピーを勉強中の若手ザル
473nobodyさん:04/07/27 10:42 ID:???
>>472
俺は?
474nobodyさん:04/07/27 10:52 ID:???
おはようございます。

includeで他ファイルを読み込むとき、
perlで書かれたCGIを呼び出すことは出来ますか?
試してみるとエラーが出たのですが、なにぶん初心者のため、
構文が誤っていた可能性もあって‥。

<? include("./cgi/bbs/bbs.cgi"); ?>

と記入したのですが

failed to open stream: Permission denied
for inclusion (include_path='.:/usr/local/lib/php')
の2つのエラーが出ました。
phpのパスが出ていたのでphpからperlは呼び出せないのかと‥
475nobodyさん:04/07/27 10:54 ID:???
ネタはやめてください
476nobodyさん:04/07/27 10:57 ID:???
ワラタ
477nobodyさん:04/07/27 11:06 ID:???
まず、おはようございます。 がおもしろかったです。
478nobodyさん:04/07/27 11:09 ID:???
<?php
$id = $_GET['id'];
$file_data = file("data.csv");
foreach ($file_data as $temp_line){
if(preg_match("/$id/",$temp_line)){
$parts = explode(",",$temp_line);
$name1[] = $parts[0];
$name2[] = $parts[1];
$recipe[] = $parts[2];
$comment[] = $parts[3];
}
}
var_dump ($name1,$name2,$recipe,$comment);
?>
できたー俺もPHP勉強中!
479軟式PHP:04/07/27 13:02 ID:???
<?php
$qvId = $_GET['id'];
$fp = fopen("data.csv","r") or die("(;´A`)");
while( $strData = fgetcsv( $fp, 1000, "," ) ){
if( $strData[0] == $qvId )
{
list($name1,$name2,$recipe,$comment) = $strData;
break;
}
}
fclose($fp);
echo $name1.$name2.$recipe.$comment;
?>
480nobodyさん:04/07/27 14:19 ID:???
PHP4.3.7を使ってます。セキュリティ問題についてはとりあえず置いておいて、

form から submit したときに文字化けします。
form のあるファイルは SJIS ですが、恐らく文字コードの問題ではないです。

文字化けというより、\記号(0x5C)もしくはそれを含む漢字の0x5C部分 がだぶって取得される、という現象です。
たとえばフォームに "\100" と入力すると、$HTTP_POST_VARS['xxx'] は "\\100" となりますし、
"ソノタ" を入力すると "ソ\ノタ" と取得されます("ソ" は SJIS で 0x83,0x5C)。

どこに問題があるかわかりますか?
481480:04/07/27 14:20 ID:uLhfG1jO
sageちゃった。
ageさせて。
482軟式PHP:04/07/27 14:23 ID:???
>>480
magic_quotes_gpcでしょう。
483480:04/07/27 14:27 ID:???
>>482
おーなおったー!ありがとー!
ぶちゅ
484nobodyさん:04/07/27 14:32 ID:???
>>474
URLを指定した、Webサーバ経由のincludeなら可能。
つまりcgiの出力結果のinclude。リモートファイルの
直接的なincludeになるので、セキュリティには気をつけること。
#リモートの出力が常に信頼できるものなら良いが。
485484:04/07/27 14:34 ID:???
>>474
ああ、そこのサーバだと駄目かもしれんね。
<httpストリームのinclude
486Imo ◆.jC7ANgFY. :04/07/27 14:38 ID:???
>>478
ちょっと簡略化すればこんな感じかな。
$name1==$idの時という判断なら下のようなプログラムがいいかも。
# チェックせずベタで書いたから修正必要かもしれない

$id = preg_quote($_GET['id']); $k = ',([^\\,\\n]*)';
preg_match_all("/^($id)$k$k$k.*\$/m", file_get_contents('./data.csv'), $match, PREG_PATTERN_ORDER);
list($parts, $name1, $name2, $recipe, $comment) = $match;
var_dump($name1,$name2,$recipe,$comment);
487軟式PHP:04/07/27 14:39 ID:???
セーフモードのヤカン。・゚・(ノ∀`)・゚・。
488Imo ◆.jC7ANgFY. :04/07/27 14:42 ID:???
>>474
こんなことしてみればいかが。# localhostについては検索すること。
include('http://localhost/〜');
でも出力だけしたいのであれば
echo file_get_contents('http://localhost/〜');
のほうがオススメ。
489nobodyさん:04/07/27 14:52 ID:VW36b+BW
.htaccessで、php.iniの設定を変えようとしたのですが、上手くいきません。
<IfModule mod_php4.c>
php_flag output_buffering Off
php_flag magic_quotes_gpc Off
php_value default_charset Shift_JIS
php_value mbstring.language Japanese
php_value mbstring.internal_encoding SJIS
php_value mbstring.http_input auto
php_value mbstring.http_output SJIS
php_flag mbstring.encoding_translation On
php_value mbstring.detect_order auto
php_value mbstring.substitute_character none
</IfModule>
文字コードをSJISで保存・出力したいのですが、これをディレクトリに置くと500エラーになってしまいます。
どうすれば良いでしょうか?
490nobodyさん:04/07/27 15:01 ID:???
IfModuleが使えない鯖なんだろ
491nobodyさん:04/07/27 15:21 ID:???
>>489
そのままで使えないものなのかい?Shift-JIS
492nobodyさん:04/07/27 16:02 ID:???
すみません
PHP+MySQLで日本語検索やりたいんですが、
レコード数が数十万件から100万件程度になると、

WHERE カラム名 LIKE '%検索したい文字%'

ってだけで救いようのないぐらい遅くなります。
なんかアイデア・対処方法は無いでしょうか?

MySQL頼みのFULLTEXTサーチは
日本語NGでしたし・・・。
493492:04/07/27 16:11 ID:???
あ、検索文字列の正規化?はやってます。
全角英数を半角にとか、
カタカナをひらがなにとか。
494nobodyさん:04/07/27 16:16 ID:???
普通正規化とはマスタとデータを分けたりする事を指すのだが、
100万件でそんなに遅くなったっけか。Psqlなら遅くなりそうだが…。
インデックス効いてる?
495492:04/07/27 16:27 ID:???
>>494
お返事ありがとうございます。

LIKE の 頭に ワイルドカードが入ると、
インデックスが効かないのです。

これはMySQLの仕様のようです。
100万件でインデックス効かないから遅いのは当たり前なんですが。
496nobodyさん:04/07/27 16:40 ID:???
それってMySQLの仕様か?
頭にワイルドカード入ってりゃ全件総ナメに決まってんべ
497Imo ◆.jC7ANgFY. :04/07/27 16:44 ID:???
>>495
アイディアだけ。遅くなる率は高いけどもしかしたらというわけで。

・phpでbin2hexしたデータを追加し、それにFulltextIndexをかける。
   データが2倍になるという欠点がある。
・2バイト文字列を2バイト英数字に変換し(不可逆)、それにFulltextIndexをかける。
   意味不明なデーターがひっかかる可能性がある。
・独自で頻度表を作ってみる。
   頻度表でどこまで処理できるかが問題。
・namazuを見習って単語リストを作ってみる。
   とりあえず面倒。
498492:04/07/27 16:54 ID:???
>>497
FulltextIndexですかね。やっぱり。
普通は LIKE '%キーワード%' よりは速くなるらしいですね。

ただ、スペースなどで単語を区切らないといけないので、
chasenとか外部プログラムが必要になるのですが、
ここら辺のサンプルなんか紹介しているようなWebページないでしょうか?

perlだと Text::ChaSenなんてモジュールがあるらしいですが・・・
499nobodyさん:04/07/27 17:15 ID:A3g22VFK
http://www.voidstar.com/gnews2rss.php

上記のサイトを参考にして、複数のニュースサイトのヘッドラインを取得、
静的生成するスクリプトを作ってみました。
サイトを複数指定した場合、最終行に書かれたサイトのみしか取得できないのですが
どこか間違えているのでしょうか…?
どうぞ、ご教授お願い致します…。

sample.dat --------------------
%<a href=\"(.+?)\">(.+?)</a>%|http://www.yourdomain.com
%<a href=\"(.+?)\">(.+?)</a>%|http://www.hogehoge.net
500nobodyさん:04/07/27 17:15 ID:A3g22VFK
sample.php --------------------
<?php
define(HTML_FILE, "sample.html");//出力するファイル名
define(DAT_FILE, "sample.dat");//ログファイル
$urllist = file(DAT_FILE);
while(list(, $val)=each($urllist)) {
 $list = explode("|", $val);
 if ($fp = @fopen($list[1], "r")) {
  while (!feof($fp)) $data .= fgets($fp, 1024);
  fclose($fp);
 }
 $match_count = preg_match_all($list[0], $data, $items);
 for ($i=0; $i< $match_count; $i++) {
  $item_url = $items[1][$i];
  $title = $items[2][$i];
  $title = strip_tags($title);
  $output .= "<a href=\""
    .$item_url ."\" title=\""
    .htmlspecialchars($title) ."\">"
    .htmlspecialchars($title) ."</a><br>";
 }
}
$fp = fopen(HTML_FILE,"w");
fputs($fp, $output);
fclose($fp);
?>
501軟式PHP:04/07/27 17:45 ID:???
(;´Д`)なんか解析するのもだるいな…
502nobodyさん:04/07/27 18:06 ID:???
見た目で。

とりあえず、$dataの初期化が欲しいと違うことを言ってみる。
で、正解はファイル名に\nが入っているから。
503nobodyさん:04/07/27 18:48 ID:???
読むのマンドクセ(;´Д`)
printデバッグ汁
504nobodyさん:04/07/27 19:21 ID:???
>>500
file() で読み込むと行の最後にある改行まで変数に入る。
rtrim() で不要な改行を取り除けば大丈夫。

$list = explode("|", rtrim($val));
505nobodyさん:04/07/27 19:23 ID:???
>>474
Apache DSO 版を使っているのなら virtual() はどう?
506500:04/07/27 20:04 ID:???
>>502>>504
unset()、rtrim()でうまくいきました。
本当にありがとうございます。
507474:04/07/28 09:04 ID:???
>>484 >>488 >>505

レスありがとうでした。
virtual()でいけました。
ありがとうございました。

508nobodyさん:04/07/28 12:37 ID:1Y3BKvIO
>>474
職場で爆笑した責任を取ってもらおうか...
509nobodyさん:04/07/28 13:52 ID:???
教える気がないならスルーしとけ。
510nobodyさん:04/07/28 20:43 ID:???
某スレでapacheのconfのユーザーディレクトリに
AddType text/html .php を記述すればphpがテキストとして
扱われると聞いたのですが、逆にテキストとして扱わない場合(PHPとして扱う)
はどういう書き方があるのでしょうか?
511nobodyさん:04/07/28 20:46 ID:EvRrHsAN
abc001_1.jpg abc002_1.jpg といった連番の画像が500以上あるんですが、
これを 60 x 60 の画像に縮小→切り抜きし、abc001_a.jpg・abc002_a.jpgといった風に
リネームする必要ができました。
どうするのが一番効率が良いでしょうか?
縮小・リネームだけなら、ソフトとPerl・PHPスクリプトを連携して出来るのですが、
切り抜きが入ると、全く方法が思いつきません。どなたかご教授ください。

画像サイズは 160 x 120 とか、縦横比率がバラバラなので、切り抜きが必須なのです orz
512511:04/07/28 20:47 ID:???
すいません、板違いでした orz
513nobodyさん:04/07/28 20:54 ID:???
んが。今マニュアルみて関数の確認してたのに....
imagecopyあたりが適当じゃなかろうか?
514nobodyさん:04/07/28 21:02 ID:???
MMCacheもAPCと同じでincludeファイルも変換してキャッシュ
してくれるのでしょうか?
それとも呼び出されたファイルだけでしょうか?
515nobodyさん:04/07/28 21:22 ID:???
>>510
PHPをモジュールとして組み込んでいる場合は、application/x-httpd-php
CGIの場合は、application/x-httpd-cgiとすることもある。
(application/x-httpd-phpで処理させるように設定することも可)
516nobodyさん:04/07/29 08:53 ID:???
そもそもプログラム側でヘッダーを変更できるのに、
タイプを固定する意味がないという。
517軟式PHP:04/07/29 09:49 ID:???
PHPのマニュアルにも載ってることだが、PHPの隠蔽はやっておくべき。
518nobodyさん:04/07/29 14:47 ID:VlhsQ7NZ
php 4.3.3を使ってるんだが、もしかしてexitで処理を抜けた時って、
register_shutdown_functionで登録した関数呼び出されない?
519nobodyさん:04/07/29 14:53 ID:???
exit前にregistしろよハゲ
520nobodyさん:04/07/29 16:51 ID:???
禿じゃないヨ
521nobodyさん:04/07/29 17:11 ID:???
PHPってバイナリモードだかに出来るって本当ですか?

関数のバイナリじゃなくて。
522nobodyさん:04/07/29 17:11 ID:???
でこが広いだけだよね
523nobodyさん:04/07/29 17:27 ID:???
俺なんかデコ広すぎてツムジが無くなっちゃったよ!
524nobodyさん:04/07/29 17:42 ID:???
それは禿と呼ぶな、普通。
525nobodyさん:04/07/29 17:45 ID:???
俺なんかデコ広すぎてウナジが無くなっちゃったよ!!
526nobodyさん:04/07/29 18:00 ID:???
それはコンパイルしてバイナリしちゃいましたか。
527nobodyさん:04/07/29 22:38 ID:???
フォームを使わないでPOSTでMulitipart/form-dataを指定したときと同じよう
にファイルを添付したいのですが、これ可能でしょうか?
できるとしたら、どのエンコードをし、どういう送信ヘッダを作ればいいんでしょうか?
528nobodyさん:04/07/29 23:17 ID:???
どこから送りたいの?
529nobodyさん:04/07/29 23:18 ID:???
>>527
PHPじゃ無理。フォームの仕様を使うのが正しい。
でなければFlashでも使う。
530nobodyさん:04/07/29 23:43 ID:b7+JpvL1
DOM勉強始めた途端につまづきました。
以下プログラムを実行すると
Error while parsing the document\n
とエラーになってしまいます。
一体何がいけないのでしょうか?

<?php

if(!$dom = domxml_open_file("test.xml")) {
echo "Error while parsing the document\n";
exit;
}

?>
test.xml
<?xml version="1.0"?>
<root>
<test>this is test</test>
</root>
531nobodyさん:04/07/29 23:43 ID:???
>>528,529
http://oshiete1.goo.ne.jp/kotaeru.php3?q=817797
>hogehoge.phpが、メールサーバーにソケット接続、マルチパート処理し、ウェブコンテンツを更新

ちょうど↑と同じようなことなんですが、
ケータイからメール(添付付)をメールサーバーに送り、phpが実行された時にPOPサーバーから受信、
同時に添付ファイルをエンコしてwebサーバーにPOSTし、本文には添付ファイルへのリンクなどを
挿入した状態でPOSTしたいと思ってます。
ケータイでの投稿に対応していないblogになんとかケータイから投稿したいと思ってます。
簡単に言うと写メールBBSのphpの機能にwebサーバーへのPOST的処理を付け加えたという感じです。
やはり、エンコードデータはブラウザに作らせないとダメなんですかね・・・。
532nobodyさん:04/07/30 01:59 ID:???
>>531
fsockopen() とかを使って決まった形式でデータをエンコードして通信すれば可能。
フォーマットは RFC あたりを見て勉強するか、POST を行う際の通信データをキャプチャ
して解析すればできそう。

または curl 関数あたりを使ってもおそらく添付ファイル付きの POST は可能みたいな
感じがする。試していないので間違っているかもしれないけど。

でも、わざわざ POST しなくても FTP とか SCP でファイルとデータを送っても問題なさそう
な気がする。
533nobodyさん:04/07/30 03:23 ID:lnH8lc1C
他のサーバにあるファイルの更新日時情報をsocketを用いて
HTTPヘッダから取得するという方法では、対象が複数の場合、
非常に遅くなってしまいます。
他に方法はないでしょうか?どうぞよろしくお願いします
534nobodyさん:04/07/30 03:29 ID:???
>>533
ありませんね。
遅いというなら処理がヘタなのでしょう。
535533:04/07/30 03:32 ID:lnH8lc1C
http://ns1.php.gr.jp/php-jp/archives/msg11953.html

参考にしたページはこちらなんですが
もう少し簡略できませんでしょうか?
536nobodyさん:04/07/30 03:35 ID:???
>>535
特に簡略化するような部分はありません。
537nobodyさん:04/07/30 03:57 ID:???
>>535
GETメソッドではなくてHEADメソッドで更新日時を取得する。
でも、まあ取得に時間が掛かるのは各々のHTTPコネクション
におけるネゴシエーション処理とかだから、別のプログラムを
組んで同時に複数処理するようにでもしないと、目に見えて
速くはならないよ。
538537:04/07/30 04:00 ID:???
そのスレッドの[PHP-jp 12338]で指摘されてるね<GET→HEAD
539nobodyさん:04/07/30 05:12 ID:mTOZKk4E
質問です。
Windows XP Home Edition のサーバーです。
unlink でファイルを削除しようとすると、
Permission denied とエラーが出てしまいます。
そのファイルのあるフォルダの読み取り専用属性のチェックは
はずしているのですが・・・。
540539:04/07/30 05:29 ID:???
すいません。ただ削除しようとしているファイルを
fcloseで閉じるのをわすれていました。
541軟式PHP:04/07/30 09:15 ID:???
|Д`)
542nobodyさん:04/07/30 09:41 ID:Qj3jxbbr
御願いします。
execを使ってTXTファイルをPSファイルに変換すると
日本語部分が文字化けしてしまうんですが
なんとかならないものでしょうか??
コマンドラインからTXT>PSは文字化けしないのですが・・
543nobodyさん:04/07/30 09:46 ID:???
$text ='123'という文字列を$text ='1<br>2<br>3'に変換したいのですが、
どうやるのが理想的でしょうか?
1文字ずつ抜き出して<br>を加えて行くしかないのでしょうか?
544nobodyさん:04/07/30 09:54 ID:???
>>543
$array = preg_split("//",$text);
$text = implode("<br>",$text,-1,PREG_SPRIT_NO_EMPTY);
545nobodyさん:04/07/30 09:55 ID:???
違う、こうだ
$array = preg_split("//",$text,-1,PREG_SPRIT_NO_EMPTY);
$text = implode("<br>",$array);
546nobodyさん:04/07/30 10:22 ID:???
>>544
早々なお返事、ありがとうございます。
教えて頂いたものを弄って動く様になりました。

PREG_SPRIT_NO_EMPTYというのが気になってぐぐって調べてみたのですが
ヒットしませんでしたし、私の環境では使えない様でした。
特殊環境なのでしょうか?。
547nobodyさん:04/07/30 10:45 ID:???
>>544 ではないが、綴りが間違っている。

正しくは PREG_SPLIT_NO_EMPTY
548nobodyさん:04/07/30 11:08 ID:???
DBにぶち込んだ画像をもってきて
HTMLに表示する時ってどうすればいいですか?
知ってる人教えて〜
549nobodyさん:04/07/30 11:12 ID:???
>>548
アホですか?

ああやっぱりアホでしたか
550nobodyさん:04/07/30 11:27 ID:???
>>543
$text = preg_replace("(.)","$0<br>",$text);
551軟式PHP:04/07/30 11:38 ID:???
>>548
えっと、それってラージオブジェクトで確保してんの?
552nobodyさん:04/07/30 11:39 ID:???
>>550
デリミタが抜けている。
$text = preg_replace("/(.)/","$0<br>",$text);

でも、日本語が入る場合は、mb_ereg_replace を使った方が安全かも。
$text = mb_ereg_replace( "(.)", "\\1<br>", $s );
553nobodyさん:04/07/30 11:57 ID:8Ir+KZbt
>>542
そんなことってあるのか?
554548:04/07/30 11:58 ID:???
はい、そうです。

555nobodyさん:04/07/30 12:02 ID:???
>>554
マジレスカコワルイ
556nobodyさん:04/07/30 12:24 ID:T0I0w0s1
>>542
環境変数LANGをチェックすべし
557nobodyさん:04/07/30 16:09 ID:???
setlocale ってのを使えばいいでつか?
558nobodyさん:04/07/30 16:19 ID:35tZk6a5
>>556
542です。
おっしゃるとおりでございました。
ありがとうございます。 
559nobodyさん:04/07/30 22:20 ID:xMf/Vu/l
>>548
画像はDBにぶち込まないほうがいいよw
560nobodyさん:04/07/30 22:22 ID:???
>>532
RFCも見てみたんですが、boundaryの番号の生成法とか、バイナリデータをどう
エンコードしていいのかさっぱりなので、ヘッダを勝手に生成してくれるPerlでやってみようかと思います。
ありがとうございました。
561nobodyさん:04/07/31 00:18 ID:???
さっきPHP始めたばかりなんですが質問させていただきます
http://abcd.com/test.php?hoge
このtest.php?の後は引数ということでよろしいでしょうか?

その場合test.phpの中でどのように引数を扱えますか?

やりたいことは<a href = "./test.php?hoge.jpg">hoge</a>を
クリックするとhoge.jpgを含むページを吐くようなものです。
562Imo ◆.jC7ANgFY. :04/07/31 00:46 ID:???
>>561
普通は"test.php?file=hoge.jpg"のようにやります。
この場合は$_GET['file']で内容を取得できます。

もし"test.php?hoge.jpg"としてやりたいのであれば
$_SERVER['QUERY_STRING']を参照するとよいかと思います。
こちらの場合は特殊文字がエンコードされているので
解除する必要があります。(rawurldecode参照
563nobodyさん:04/07/31 01:12 ID:8q4uMfb8
拡張子 .php ってvodafoneからじゃ見られないの?docomo、ezや
PCブラウザからは見られると報告を受けているHPが彼らのみ見られないようなのです。
もしくは何か使っちゃいけないTAGとか ファイルの大きさ制限とかあるんですか?
564nobodyさん:04/07/31 01:38 ID:???
>>563
スレ違い
565561:04/07/31 03:50 ID:???
>>562
無事表示できました。
ありがとうございました。
566nobodyさん:04/07/31 04:19 ID:EDchUNZZ
switch($hoge){
case 'check':
$check = Check();
Abc($puni,$check);
break;
}

function Check(){
$check = 'あいうえお';
return $check;
}

function Abc($puni,$check="1"){
if($check == 1){
print "1です。";
}else{
print $check . "です。";
}
}
とやっても $check に 1 以外入らないんですけど、なんで?
567nobodyさん:04/07/31 12:11 ID:???
$baka = "あいうえお";
bk($baka);
function bk($baka="1"){
echo $baka;
}
568nobodyさん:04/07/31 16:57 ID:???
<?php
$data = "data.cgi"; //データファイル


if ($id != "" && $pass != "");
$file = file($data); //データファイルの読み込み
$count = count($file); //行数を数える
for($i=0;$i<$count;$i++){
list($name2,$hn2,$id2,$pass2,$mail2,$add2,$tel2,$level2,$point2,$host2,$time2)=split(",",$file[$i]);
if ($id == $id2){
if ($pass == $pass2){
//掲示板へ飛ぶ
}else{
print " <CENTER><font color=red>パスワードが違います</font></CENTER>";
}
}
}
?>

この場合、IDとPASSが合っていれば別のページに飛ぶようにしたいのですが
別にページに飛ぶための命令文がわかりません。
教えてください;;
569nobodyさん:04/07/31 17:12 ID:???
headerでも使っておけ
それからパスはmd5とかでハッシュ値を取れ
570568:04/07/31 18:56 ID:???
>>569
THX

print "$name01 $name02 $hn $id $pass $mail $age01 $age02 $age03 $add $tel";
if ($name01!=""&& $name02!=""&& $hn!=""&& $id!=""&& $pass!=""&& $mail!=""&& $age01!=""&& $age02!=""&& $age03!=""&& $add!=""&& $tel){

とやってみたんだがTRUEになんねーよ;;
ちゃんと全記入できてるのにな〜・・・
571nobodyさん:04/07/31 19:12 ID:???
>>570
if の中にオカシイ部分がある。よーく見てみ。
つーか最後まで気を抜くな!
572nobodyさん:04/07/31 19:50 ID:???

print "$name01 $name02 $hn $id $pass $mail $age01 $age02 $age03 $add $tel";
if ($name01!=""&& $name02!=""&& $hn!=""&& $id!=""&& $pass!=""&& $mail!=""&& $age01!=""&& $age02!=""&& $age03!=""&& $add!=""&& $tel != ""){

に修正しますた・・・無理ぽ、もうだめぽ_| ̄|○
573nobodyさん:04/07/31 20:49 ID:???
header("Location:hogehoge.php")で飛べる。
headerは便利だから覚えておいたほうがいいよ。他にも色々あるし。
574nobodyさん:04/07/31 20:51 ID:???
>>573
THX! mailtoもいけるのかな?
575nobodyさん:04/07/31 20:53 ID:???
はあ...
ちょっとはHTTP勉強してね
576nobodyさん:04/07/31 21:05 ID:???
http://www.w3.org/Protocols/rfc2616/rfc2616
ここでお勉強しなさいよ
577nobodyさん:04/07/31 21:07 ID:???
>>576
英語ばっかじゃん読めないよ
578nobodyさん:04/07/31 21:10 ID:???
mailtoワロタよ
579nobodyさん:04/07/31 21:21 ID:???
mailtoストームでも作る気なのか?
580nobodyさん:04/07/31 22:36 ID:???
>>579
嵐キタ━━━━━(゚∀゚)━━━━━!!!!
581nobodyさん:04/07/31 23:19 ID:WRy9c9NN
>>572
if文は不安な時は、()でくくるのが吉。
if ( ( $name01!="" ) && ( $name02!="" ) )
みたいに
582nobodyさん:04/07/31 23:24 ID:???
あれ?変数ってブラウザ閉じないとずっと記録されてるよな?
583nobodyさん:04/08/01 00:23 ID:???
PHPでファイル名を抽出することってできますか?
584nobodyさん:04/08/01 00:25 ID:???
583
わかりにくいと思いますので詳しく

自分が何というファイル名かわからないとき
自分のファイル名を取得したい
585nobodyさん:04/08/01 00:30 ID:???
586nobodyさん:04/08/01 00:43 ID:???
>>585
THX!
587nobodyさん:04/08/01 01:10 ID:???
588nobodyさん:04/08/01 01:11 ID:???
スマン、誤爆った!
589nobodyさん:04/08/01 01:38 ID:???
横からすみません。
PHPをコマンドライン側で実行する場合、$_SERVERの代用として
なんという変数を使えばいいんですか?

ついでにageさせてください。
590nobodyさん:04/08/01 01:55 ID:???
HTMLをJPEGに変換するものって無かったですか?
591589:04/08/01 01:56 ID:???
すみません、質問内容が抜けていました。
$_SERVER -> $_SERVER['PHP_SELF'] です。
本当にすみません。。
592nobodyさん:04/08/01 02:03 ID:???
PHP Accelerator使ってる人いる?
うちはApache2+PHP4.3xなんだけど、使ってて動作おかしいとかない?
593nobodyさん:04/08/01 02:07 ID:???
>>592
詳しく・・
594nobodyさん:04/08/01 03:10 ID:???
>>593
動作エラーを詳しく言えばいいのかな?
「Notice: Undefined variable: input_len文字までです。 in /www/xxx/yyy.php on line 498」
っていうエラーが出てきて、その行は
「show_error_msg("コメントは$input_len文字までです。");」
ってなってる。

コンパイラが「input_len文字までです。」を1つの変数と誤認識したんじゃないかと疑ってるのだが。

こんなの出るようなら評判悪いかなぁと思って、動作おかしいとかないか聞いてみた
595nobodyさん:04/08/01 03:14 ID:???
>>592
PHPAもZend Optimizerもプログラムの作りによっては、
動作おかしいというか、落ちることがあるよ。
完全に互換性がある訳じゃない。
使う場合はちゃんとテストした方が良いよ。
596nobodyさん:04/08/01 04:50 ID:???
URLをindex.php?chat=mattariで、
$data_file = "./$chat/log.cgi";にしているのですが
$chat がどうしても空白になります。
なぜでしょうか?
597596:04/08/01 04:53 ID:???
print $chat;
$data_file = "./$chat/log.cgi";

にすれば「mattari」と表示されました・・・
598nobodyさん:04/08/01 05:16 ID:???
>>567
$foo = /{$_GET['chat']}/log.cgi
にしる。
register_variablesをOffにした方がいいぞ
599598:04/08/01 05:17 ID:???
おっと引用符と./を忘れたけどまぁ修正してくれ。
600597:04/08/01 05:24 ID:???
>>598
あり^^
9を逆さまにするなんてなかなかしゃれてるね
601nobodyさん:04/08/01 06:03 ID:???
2チャンネルみたいに8文字のランダムなIDを作るにはどうしたらいいですか?
602nobodyさん:04/08/01 07:17 ID:???
mt_srand, mt_rand, md5, substr辺りを使う
603nobodyさん:04/08/01 07:34 ID:???
ここのIDはcryptベースだろ
604nobodyさん:04/08/01 08:35 ID:???
class内でincludeした、function j()をa::j()として読み込む事は
出来ないのでしょうか?

class a{
function b{
include_once('inc_php');
}
}

#inc_php
function j(){
echo '123456789';
}
605nobodyさん:04/08/01 09:17 ID:???
>>604
その書き方だと、function b の中に function j が入ってくることになるよ。
class a{
 function j(){
  include_once('inc_php');
 }
}
# inc_php
echo '123456789';

キレイにしたいならstrategyパターンあたりを使えばええんでないの?
606nobodyさん:04/08/01 09:38 ID:???
>>605
そうではなくて、includeした時に結果としてclass内の関数として
includeする方法がないものかと想いまして質問させて頂いております。

[結果イメージ]
class a{
function b{
}
function j(){
echo '123456789';
}
}
607nobodyさん:04/08/01 10:14 ID:???
ページ1で$nameに山田と入力
ページ2でprint $name;
ページ3で$nameを表示しようとしたらできないぽ;;
608nobodyさん:04/08/01 13:20 ID:???
>>607
ソース出せよ
609nobodyさん:04/08/01 13:41 ID:???
>>594
EUCで書けば多分日本語関係のエラーはほとんど潰れると思う。
SJIS使うなら変数は{$hoge}と括弧でくくっとこう。${hoge}だったかもしれんが。
print "コメントは".$input_len."文字までです。";でもOK。
610nobodyさん:04/08/01 15:23 ID:???
>606 マニュアル読めよ
611nobodyさん:04/08/01 16:03 ID:6iApVh2k
<?xml version="1.0" encoding="UTF-8"?>
<ITEM>
<CATEGORY Num="01">その他</CATEGORY>
<CATEGORY Num="02">その他2</CATEGORY>
</ITEM>

これに<CATEGORY Num="03">その他2</CATEGORY>を書き込みたいのですが
</ITEM>の後ろにしか書込めません。
</ITEM>の手前にポインタを移動する方法を教えて下さい。
fseekっていうのじゃ無理ですよね?
612nobodyさん:04/08/01 16:15 ID:???
>>610
マニュアルには書いてないと思うがな
知らない奴が出しゃばるな!
613Imo ◆.jC7ANgFY. :04/08/01 16:24 ID:???
>>611
ちょっとヒント。
ob_start関数、これを使えばseekのようなことはできないとしても
期待した結果に持っていくことはできますよ。
614Imo ◆.jC7ANgFY. :04/08/01 16:30 ID:???
>>609
両方可能ですよ。

それと参考までに、
2次元配列使うときは必ず{}でかこまなければなりません。
もしも「echo "ほげ$hoge[1][0]ほげ";」と書いた場合は
echo 'ほげ' . $hoge[1] . '[0]ほげ';と等価になり
「ほげArray[0]ほげ」と出力してしまいます。
echo "ほげ{$hoge[1][0]}ほげ";と書くのが正しい方法です。
615Imo ◆.jC7ANgFY. :04/08/01 16:40 ID:???
>>606
マニュアルには以下のようにかかれています。
「複数のファイルや複数のPHPブロックで分割してクラス
を定義定義することは できません。」

とはいっても似た処理として、
extends(クラスの継承)を使う方法がありますので
そちらを一度は見てみる価値はありそうです。
616nobodyさん:04/08/01 17:08 ID:???
>>605
アフォか。そんな言語使用イヤ過ぎる。
普通にやれよ。

funciton hoge($params)
{
require_once('hoge.func.php');
return hoge($params);
}
617611:04/08/01 17:12 ID:6iApVh2k
>>613
マニュアルには出力のバッファリングを有効にするとあるのですが、
これでポインタ移動できるんでしょうか?
「ob_start ポインタ」でググってもそれらしき記述が見つからないのですが、、、
618Imo ◆.jC7ANgFY. :04/08/01 17:48 ID:???
>>617
一応こんなことができますよ。

ob_start();
echo <<<EOM
<?xml version="1.0" encoding="UTF-8"?>
<ITEM>
<CATEGORY Num="01">その他</CATEGORY>
<CATEGORY Num="02">その他2</CATEGORY>
</ITEM>
EOM;
$data = ob_get_clean();
echo substr_replace($data,
"<CATEGORY Num=\"03\">その他3</CATEGORY>\n",
strrpos($data, '</ITEM>'), 0);
619nobodyさん:04/08/01 18:03 ID:???
>>615
マニュアルのそれは昔に読んだんですよね
funcitonをclass内に読み込み方法があればclass外のfunciton
と競合しないですむので理想的と考え質問したのですが、
それは出来ないみたいですね。
extendsを調べてみます^^ありがとうございます。

>>616
require_once()とinclude_once()の差はエラー時の処理の差で
しかないと記憶しているのですが違いましたか?
アフォな理由を説明してくれ!
620611:04/08/01 18:11 ID:6iApVh2k
>>618
すいません説明不足でした。
送信されてきた<CATEGORY Num="03">その他2</CATEGORY>を

<?xml version="1.0" encoding="UTF-8"?>
<ITEM>
<CATEGORY Num="01">その他</CATEGORY>
<CATEGORY Num="02">その他2</CATEGORY>
</ITEM>
と書かれているxmlファイルに書き足したいのです。
621nobodyさん:04/08/01 18:12 ID:???
>>619
何でそこに反応するかな。

> return hoge($params);
のように以降の処理を普通に実装すりゃいいだけだろう。
622Imo ◆.jC7ANgFY. :04/08/01 18:23 ID:???
>>620
いったんファイルをすべて読んでしまってから書き換えて出力するしかありませんね。
文字の挿入に関してはsubstr_replaceを見ておくといいかと思います。

# fseekで位置を移動するにも場所を知る必要性があるのであらかじめ全部読み取ったほうがいいです。
# fseekの場合</ITEM>に上書きしてしまいますし、、、
623nobodyさん:04/08/01 18:41 ID:???
>>621
あぁ、funciton内で他のfuncitonを呼ぶのがですね^^;。
requireするファイルを絶対パスで実行されると不都合なファイルが
あるからなんですが構造として美しいものではありませんね。
624611:04/08/01 18:52 ID:???
>>622
色々と試してみます。
ありがとうございました。
625nobodyさん:04/08/01 20:05 ID:???
掲示板を作ろうと思うんですけど、下記のやり方が思いつきません
・2重投稿の防止
・連続投稿の防止
・書き込みした内容の編集
・書き込みした内容の削除

当方激しく初心者です;;
もしよければアドバイスお願いします・・・
626nobodyさん:04/08/01 20:11 ID:???
>>625
>・2重投稿の防止
>・連続投稿の防止
>・書き込みした内容の編集
>・書き込みした内容の削除
この機能を除いた掲示板はもうできたのか?
627625:04/08/01 20:13 ID:???
>>626
はい、それはできました。
628nobodyさん:04/08/01 20:16 ID:???
どういう方法で書き込み内容を記録してるかわかんないから答えられない
629625:04/08/01 20:18 ID:???
名前,タイトル,メール,コメント

みたいな感じかな・・・
630nobodyさん:04/08/01 20:19 ID:???
編集も削除もシーケンスでID振らないとどの書き込みか特定できないだろ
631625:04/08/01 20:20 ID:???
シーケンス!?
すまん、初めて聞いた_| ̄|○
632nobodyさん:04/08/01 20:22 ID:???
>>625
PHPの掲示板スクリプト配ってるところを検索してソースを見ろ。
初心者なんだからソースパクれ!
633nobodyさん:04/08/01 20:47 ID:???
「連番」かな

どのようして削除、編集するコメントを
指示するのか考えなかった?
634nobodyさん:04/08/01 22:16 ID:2fDXisU0
拡張子が.phpのファイルにcgiを呼び出して表示させるのは、どうしたらいいですか?
635nobodyさん:04/08/01 22:21 ID:???
拡張子が.phpのファイルに・・・
っておかしな言葉だな。
<?
require("hogehoge.cgi");
?>
であかんのかい?
636634:04/08/01 22:28 ID:2fDXisU0
これだと、cgiファイルの中身が表示されてしまいます。
実行結果を表示させたいのですが。
637nobodyさん:04/08/01 22:32 ID:???
638nobodyさん:04/08/01 23:03 ID:???
log.cgiの中身を全て削除したいのですが
どうすればよいでしょうか?
639nobodyさん:04/08/01 23:12 ID:???
mysql_queryで長いクエリー送るとSyntax Error返してくる。
そのクエリーをphpMyAdminで送ったら正常動作する。
そういう経験ありますか?今これではまってます。助けて。
MySQLサーバーは3.23, phpは5.00ダー。
640Imo ◆.jC7ANgFY. :04/08/01 23:14 ID:???
>>639
セミコロンはずしてみましたか?
641Imo ◆.jC7ANgFY. :04/08/01 23:16 ID:???
>>639
もしかして複数行送ったりとかしてないですよね?

>>638
削除するならば
@unlink('./log.cgi');

0Byteにするならば
fclose(fopen('./log.cgi', 'w'));
642639:04/08/01 23:19 ID:???
メッサ複数行送ってる。ダメなのね。ありがとさん・・・。
643634:04/08/01 23:23 ID:2fDXisU0
えー、やはり変わらず、cgiの中身が表示されてしまいます。
507さん教えてください。
644nobodyさん:04/08/02 02:36 ID:???
中身を削除するって言ってるんだから0byteにするしかないだろ・・・
これだから厨コテは
645nobodyさん:04/08/02 03:13 ID:???
昨日のレスで最もホームランなのは>>612だな。
646nobodyさん:04/08/02 03:52 ID:???
来る奴来る奴奇天烈で差が無いなか結構味わいのあるとこ選考したなw
つーかあれクラス内の関数とか言ってるし関数とメソッドの区別がついとらんだけやろ
最初理解不能だったので、グローバルスコープ要素をクラスメンバにしようっていう
発想の凄まじさは認めたいが、、なんかどの初心者も俺を置いて遥か彼方に旅立っ
ていってしまうよ
647nobodyさん:04/08/02 04:05 ID:???
>>638
やったことあると思うが開いてるならゼロにftruncateすればいい。
ついでにこれを機会にマニュアル読むようになったほうがいいよ。
648nobodyさん:04/08/02 05:24 ID:???
いやいや、log.cgiがファイルとは書いてないな
意外と・・・
649nobodyさん:04/08/02 08:23 ID:???
<INPUT type="submit" name="action" value="書き込み">

#記事書き込み処理
if ($action == "書き込み"){
if ($name == ""){
print " </CENTER>ERROR:名前が記入されていません";
}elseif ($comment == ""){
print " </CENTER>ERROR:コメントが記述されていません";
}else{
if ($subject == ""){
$subject = "無題";
}else{}

}
}


書き込みボタンを押したんだが記事書き込み処理
が無反応です。なぜかactionに書き込みが入らない模様・・・
ナゼダ!!!!!!!!!!!
650nobodyさん:04/08/02 08:36 ID:???
関数って引数を処理し結果を返す命令群の総称だった気がするんだが・・・
メンバ関数と呼ばれるケースもあるしな
651nobodyさん:04/08/02 08:39 ID:???
>>649
$_POST['action'],$_GET['action'],$_REQUEST['action']
のどれかの中身を覗いてみそ
652649:04/08/02 09:01 ID:???
全てカラッポですた><
653nobodyさん:04/08/02 09:06 ID:???
>>652
ん、フォームの方かな^^;
<INPUT type="submit" name="action" value="書き込み">
だけ書いてもダメだよ

<form method='POST' action='filename'>
<INPUT type="submit" name="action" value="書き込み">
</form>

としましょう
654649:04/08/02 09:15 ID:???
<FORM method="POST" action="<?php echo $PHP_SELF; ?>">
<INPUT type="submit" name="action" value="書き込み">
</FORM>

とりあえずFORMです・・・
これでもぬるぽ_| ̄|◎
655649:04/08/02 09:17 ID:???
あ、鯖にうpしたらできました^^;
どうやら使っているPHPエディタが問題のようです;;
ありでした〜
656nobodyさん:04/08/02 09:21 ID:???
ファイルロック機能の動作テストをしようと思たのですが、
PHP全体は、ひとつのプロセスが終ってから次のプロセスを実行するのでしょうか?
テキストファイルに、ただ10000回ほど読み込んだ物をまた上書きするだけのスクリプトを書き、
3,4窓で同時に回したのですが、どうも終ってから動き出しているような気がしてなりません。
ファイルロック用の関数を外した場合でも同じようでした。
そもそもテストの仕方が間違っているのかもしれません;;
環境はWindowsXP、AnHttpd、PHP4.3.2です。(同じPC、同じブラウザ)

また、正しいファイルロックのテストの方法を教えていただけたら幸いです…。
657nobodyさん:04/08/02 09:36 ID:???
>>655
そのPHPエディタって何? ほんとにエディタと関係あるのか?
658655:04/08/02 09:42 ID:???
DzSoft PHP Editor(体験版)です
659nobodyさん:04/08/02 09:57 ID:???
>>656
まず WindowsXP、AnHttpd、PHP4.3.2 を
*BSDもしくはLinux、Apache 1.3.31、PHP 4.3.8 に変えてはどうでしょう?
#OSはともかく、httpdとPHPはマジ。

で、ロックをかけたとき、書き込み中、ロックを解除したときに何らかの出力をさせると良いかと。
あと書き込み中にusleep()してわざと処理に時間がかかるようにすると分かりやすいかも。
flock($fp, LOCK_UN);し忘れてるってのは無しの方向でよろ。
660nobodyさん:04/08/02 09:58 ID:???
<?php
#記事の読み込み
$message = file($logfile);
$count = count($message);
if ($count>=$page){
$count = $page;
}
for ($i=0;$i < $count;$i++){
list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2) = split( ",", $message[$i]);
print " <FONT size=2>$no2</FONT><INPUT type=checkbox name=edit value=$no2> <font size=bSize color=$tCol><b>$title2</b></font>";
if ($mail != ""){
print " <FONT size=2>投稿者:<A href=mailto:$mail2>$name</A></FONT><BR>";
}else{
print " <FONT size=2>投稿者:$name2</FONT><BR>";
}
print " <font size=bSize color=$color>$comment2</font>";
}
?>

HTML内に上を記述するとページが何も表示されなくなりました・・・
なぜでしょうか・・・
661Imo ◆.jC7ANgFY. :04/08/02 10:02 ID:???
>>660
if ($count>=$page){
$count = $page;
}
ここで$countがリセットされているようですよ。
662nobodyさん:04/08/02 10:02 ID:???
>>659
有難う御座います。まずはApacheを入れてみる事にします。
663Imo ◆.jC7ANgFY. :04/08/02 10:08 ID:???
>>656
それと正しいファイルのロック方法は
$fn = fopen($file, 'w');
flock($fn, LOCK_EX);
fwrite($fn, $data);
fclose($fn);
ではなく
$fn = fopen($file, file_exists($file) ? 'r+' : 'w+');
if (flock($fn, LOCK_EX)) {
ftruncate($fn, 0); rewind($fn);
fwrite($fn, $data);
} else {
// ロック失敗
}
fclose($fn);
ですよ。ロックは失敗する可能性もあります。
664nobodyさん:04/08/02 11:01 ID:FFy40LXR
初めて質問します。
cgiとphpを使っていますが、

cgiファイルを使って、一部phpファイルを使いたいです。
たとえばcgi掲示板の中にphp表示(例えば別の掲示板も表示)するとか・・・

ご指導ください。
665nobodyさん:04/08/02 11:09 ID:???
外部コマンドとして呼び出して結果を表示すればよい。
666nobodyさん:04/08/02 11:13 ID:???
>>663
ロックに失敗するのって例えばどんな場合?
667nobodyさん:04/08/02 11:16 ID:???
>>662
バグフィクスされてるのでPHPを4.3.8にするのも忘れずにがんがってください。
下記URIがApacheとPHP4.3.8のインストールに良さげと思った。
ttp://allabout.co.jp/career/database/closeup/CU20031114/

ちなみにイモ回答者の言うことは微妙に間違ってるから信じちゃだめですよ。
668nobodyさん:04/08/02 12:49 ID:???
下の2枚の画像合わせて見ると立体に見えるらしいのですが
http://members.home.nl/saen/Special/Zoeken.swf
PHPで実現するにはどうすればよいのでしょうか?
669nobodyさん:04/08/02 12:54 ID:???
>>668
3回氏ね
670nobodyさん:04/08/02 13:04 ID:???
>>668
Ming
671nobodyさん:04/08/02 13:11 ID:???
セッション情報をクリアしたいのですが、
セッションIDだけはクリアせずそのまま使用したいのですが
何かいい方法はないでしょうか?

現在はsession_unsetを使ってクリアしようとしています。
672660:04/08/02 13:43 ID:???
>>661
if ($count>=$page){
$count = $page;
}

もし$pageより$countのがでかければ
$countに$pageを代入したいのですが・・・
673660:04/08/02 13:51 ID:???
お・・・できてました・・・

しかしこんなバグが残ってしまいました
Aを書き込みする、Bを書き込みすると更にAが書き込みされる・・・
なーぜだああああああああああ
674660:04/08/02 13:58 ID:???
$message = file($logfile);
list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2) = split( ",", $message[0]);
if ($no2 == ""){
$no = 1;
}else{
$no = $no2+1;
}

if ($name != $name2 && $comment != $comment2){
$put = implode(",", array($no,$name,$mail,$subject,$comment,$time,$host,$color,$pass));
$message = file($logfile);
$fp = fopen($logfile, "a");
rewind($fp);
fputs($fp, "$put\n");
if($max <= sizeof($message))
$num = $max - 1;
else
$num = sizeof($message);
for($i = 0; $i < $num; $i++){
fputs($fp, $message[$i]);
}
fclose($fp);
$taju = 0;
unset($message);
}else{
$taju = 1;
}
675nobodyさん:04/08/02 13:59 ID:???
丸投げヤメロ
676nobodyさん:04/08/02 14:01 ID:FFy40LXR
>>665
cgiの外部コマンドでphpを呼び出せるそうですが、
出来るんですね。ただ解説しているサイトがない・・・_| ̄|○
677nobodyさん:04/08/02 14:06 ID:???
`php file.php`
678nobodyさん:04/08/02 14:23 ID:FFy40LXR
>>677

#!/usr/local/bin/perl
$command = `php file.php?q=php&hl=ja&lr=lang_ja`;
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>結果</TITLE></HEAD>\n";
print "<BODY BGCOLOR=\"#ffffff\">\n";
print "$command\n";
print "</BODY></HTML>\n";

でよろしいでしょうか?
679nobodyさん:04/08/02 14:28 ID:9GDxpHGw
PHPを使用して、JPEGイメージにコメントヘッダを書き込むには
どうしたら良いですか?
680662:04/08/02 14:31 ID:???
>>663
サンプルコード有難う御座います。
ロック機能本体についても勉強中です。

>>667
半日かけてなんとかApach導入できました(汗
結果、恐らく今度は同時に動いており、ロック外した状態でリセットされまくりでした。良かったです。
681nobodyさん:04/08/02 14:36 ID:lglFWosb
PHP4.3で、画像ファイルの添付メールを送るにはどうしたら良いですか?
<input type="file">形式で、アップロードされた画像は添付できるのですが
元々サーバ上にある特定の画像を添付してメールしたいのです。
682nobodyさん:04/08/02 14:58 ID:???
>>681
アップロードされた画像を添付できるなら、もともとある画像の添付もわけないと思うが、
ひょっとしてアップロードされた画像をメール配送するスクリプトをどこかでひらってきただけか?
なんか、丸投げのヨカソ。
PEARのMail_mimeでも使えばよろしいかと。
683nobodyさん:04/08/02 15:03 ID:N/tiSL6x
下記のHPを見るとき、http://www.bridal-vip.co.jp/ 時々、開けないときがあります。
表示されないとき、上記のHPを見ると以下のようなソースが書いてありました。このようなHPを多くの人が見れるように改善するときに、最小限の修正をするとしたら、どういった改善方法をとれば、いいのでしょうか。詳しくは、ソースを見てください
684nobodyさん:04/08/02 15:21 ID:???
>>679
5万で教えてやるよ。
685>>674:04/08/02 15:23 ID:???
わかんね
686nobodyさん:04/08/02 15:42 ID:???
phpの文字列の実装ってどうなってるんでしょ。
長さは保持してるのかいな。
最初に確保されるメモリーのサイズは?
CopyOnWriteで実装されてるのか、そうじゃないのか。
687nobodyさん:04/08/02 15:46 ID:???
>>686
つかマニュアル嫁よアホが。確保されているメモリのサイズはデフォで8Mだ。
688681:04/08/02 15:46 ID:???
>>682
凡ミスで、送れていなかっただけでした…。
PEARを使わずに出来れば良いのだけれど(便利で結局使うが)
689nobodyさん:04/08/02 15:48 ID:???
>>681
PEAR使わないなら自分でBoundaryを作ってマルチパートに埋め込んで
送るしかないなぁ。俺は一応その手のライブラリ作ってるけどPEARのが便利だね( ´-ω-)y‐┛~~
勉強にはなったけど。
690nobodyさん:04/08/02 16:01 ID:???
初歩的な質問なんですが
aとwの違いってなんですか?
691nobodyさん:04/08/02 16:07 ID:???
マニュアル読んでも意味がわからなかった?
692nobodyさん:04/08/02 16:31 ID:???
#記事削除
if ($action=="記事削除"){
$fp = fopen($logfile, "w");
$message = file($logfile);
fclose(fopen("$logfile", 'w'));
if($max <= count($message)){
$num = $max - 1;
}else{
$num = count($message);
}

for($i = 0; $i < $num; $i++){
list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2,$color2,$pass2) = split( ",", $message[$i]);
if ($number==$no2){
if ($inpass==$pass2){
fputs($fp, $message[$i]);
}else{
$nopass=1;
}
}
}
fclose($fp);
}

記事削除する文打ったつもりなんだが
「記事削除」を押すとパス違ってても全ての記事が消えてしまう・・・
HELPME!!!
693Imo ◆.jC7ANgFY. :04/08/02 16:36 ID:???
>>644
マニュアルには以下のように書いてありますので
私の書いた処理でもファイルを0Byteすることはできます。

'w' 書きこみのみでオープンします。
ファイルポインタをファイルの先頭に置き、
"ファイルサイズをゼロにします"。
ファイルが存在しない 場合には、作成を試みます。
694nobodyさん:04/08/02 16:41 ID:???
>>671
マニュアルのセッションの章を全部読んでください。

>>679
PHPの関数には無いようなので、JPEGのフォーマットを調べて
ファイル関数群を使って書き込むことになります。
誰か作って公開してるかも知れんけどね。

>>686
実装が気になる場合はソース嫁
695Imo ◆.jC7ANgFY. :04/08/02 16:46 ID:???
>>679
EXIFブロックならばexif_read_dataを使って読むことができますよ。
696Imo ◆.jC7ANgFY. :04/08/02 16:49 ID:???
>>692
$fp = fopen($logfile, "w");
$message = file($logfile);
ここの部分がおかしいですよ。
697692:04/08/02 17:03 ID:???
あり、とりあえずいろいろ修正して

#記事削除
if ($action=="記事削除"){
$message = file($logfile);
fclose(fopen("$logfile", 'w'));
if($max <= count($message)){
$num = $max - 1;
}else{
$num = count($message);
}

for($i = 0; $i < $num; $i++){
print "1 $no2 2 $number 3 $inpass 4 $pass2";
list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2,$color2,$pass2) = split( ",", $message[$i]);
if ($number==$no2 && $inpass==$pass2){
}else{
$fp = fopen($logfile, "w");
rewind($fp);
fputs($fp, $message[$i]);
fclose($fp);
}
}
}

にしたのですが、記事が消えません;;
パスあってるのに〜;;
698Imo ◆.jC7ANgFY. :04/08/02 17:03 ID:???
>>692
ファイルを開いているときの0Byteにする場合はftruncate関数を使います。
ファイルを開いていない場合は'w'モードで開くだけで0Byteになります。
'w'モードで開いた時点でファイルは0Byteになります。
その後にファイルを読み込むと0Byteの文字列が返されることになります。
699Imo ◆.jC7ANgFY. :04/08/02 17:08 ID:???
>>697
私がふとそのまま書いたらこんな感じになります。
とはいってもこれを直接使うといろいろ面倒なので
このソースを見て何かを得てみてください。
あくまで参考までに、、、、

$fn = fopen($logfile, 'r+');
if ($fn and flock($fn, LOCK_EX)) {
  $data = explode("\n", trim(file_get_contents($logfile)));
  $data = array_slice($data, 0, $max);
  $hit = preg_grep("/^$number,.*,$inpass\$/", $data);
  if (count($hit)) {
    $hitnum = array_keys($hit);
    unset($data[$hitnum[0]]);
    ftruncate($fn, 0); rewind($fn);
    fwrite($fn, implode("\n", $data));
  } else {
    echo '該当する記事がないかパスワードが違います';
  }
} else {
  echo 'ファイルが開けなかったかロック失敗';
}
@fclose($fn);
700697:04/08/02 17:10 ID:???
シラナイ命令文イパーイでシボンヌ_| ̄|○

    ||
   (  )
   ∪ ∪
    ∪∪
701Imo ◆.jC7ANgFY. :04/08/02 17:16 ID:???
>>700
あえてあなたの書いたコードを修正するならばこう。
でもファイルロック処理とかしていないから込み合う
サイトではデーターが消えたりします。

// 記事削除
if ($action=="記事削除"){
  $message = file($logfile);
  $fp = fopen($logfile, 'w');
  if($max <= count($message)){
    $num = $max - 1;
  }else{
    $num = count($message);
  }
 
  for($i = 0; $i < $num; $i++){
    // print "1 $no2 2 $number 3 $inpass 4 $pass2";
    list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2,$color2,$pass2) = split(",", $message[$i]);
    if ($number==$no2 && trim($inpass)==trim($pass2)){
      // 該当記事
    }else{
      fputs($fp, $message[$i]);
    }
  }
  fclose($fp);
}
702軟式PHP:04/08/02 17:17 ID:???
>>693
まぁアホは相手にしなさんな。・゚・(ノ∀`)・゚・。
703nobodyさん:04/08/02 17:22 ID:???
>>701
ありです><
なんとかできました(*´д`)ハァハァ
(trimてなんだろ・・・)
704nobodyさん:04/08/02 17:23 ID:???
マニュアルを見る癖をつけろ
705軟式PHP:04/08/02 17:23 ID:???
trimとかchopとかは覚えとけよ。・゚・(ノ∀`)・゚・。
http://www.php.net/manual/ja/function.trim.php
706nobody:04/08/02 17:25 ID:tyWsL5gt
アマゾンのWebサービスからXMLを取得し、SimpleXMLでデータを引き出そうと思っています。
環境はPHP5、WindowsXPpro、Apache2.0です。

例えば、
ttp://xml-jp.amznxslt.com/onca/xml3?t=webservices-20&dev-t=webthreads&locale=jp&KeywordSearch=Amazon&mode=books-jp&type=lite&page=1&f=xml
上記で取得したXMLから、

foreach($xml->Details as $details){
echo $details->ProdctName;
}

などのようにデータを取り出すことはできましたが、取得したXMLのなかで、
著者名(Author)など、各詳細情報(Details)内でも複数あるデータについて
foreachなどでデータを取得することができません。
単純にキーを指定して、$details->Authors->Author[2] などのようにすれば
データは取れるのですが、ループで取得できないとなんとも不便です。
とりあえずこんな感じに書いてみましたがうまく動作しません。

foreach($xml->Details as $key => $details){
echo $details->Manufacturer;
foreach($details->Authors as $authors){
echo $authors->Author;
}
}

これだと著者名の最初1件しか拾えません。countなどでAuthorを数えてみても
正しくカウントされないようです。
これはこういう仕様なのでしょうか?
なにか間違った記述をしているのでしたらご指摘いただけると助かります。
よろしくお願いいたします。
707Imo ◆.jC7ANgFY. :04/08/02 17:27 ID:???
>>703
fileで読み込んだ配列はどうしても最後に"\n"が入ってしまうからtrimで除去したんですよ。
パスワードのあとに","が入っているプログラムなら大丈夫なのですが、、、
708703:04/08/02 17:29 ID:???
そういえば一番後ろにpassがあったような_| ̄|○
本当にアリガトー><

PS.目的別PHPハンドブックを読んでいるがワカンネェ
709Imo ◆.jC7ANgFY. :04/08/02 17:30 ID:???
$details->Authorsが複数存在してるのではなく
$details->Authors->Authorが複数(配列として存在している)のならば
こうあるべきでは?

foreach($details->Authors->Author as $authors){
  echo $authors;
}
710軟式PHP:04/08/02 17:32 ID:???
今日はImo氏がいるからアホの言いがいが無いな…。
また明日な。・゚・(ノ∀`)・゚・。
711nobodyさん:04/08/02 17:32 ID:???
>>699
一瞬でもにでもファイルを 0バイトにすると外部から読み込みが入ると怖いのであまり 0バイトには
しない方が安全だと思う。
やるとすれば以下のような感じかな。実用するならもう少しエラーチェックを真面目にするけど。

if (fwrite($fn, implode("\n", $data))) {
  ftruncate($fn, ftell($fn));
}

あと、fopen で開いているファイルを file_get_contents で開くのはちょっと好きでは
ないので、以下の方法で読み込むとか。

$data = fread(filesize($logfile));
712nobodyさん:04/08/02 17:34 ID:???
>>708
ひとまずWebの日本語マニュアルでも、殆ど問題ない。
http://php.s3.to/man/
713Imo ◆.jC7ANgFY. :04/08/02 17:37 ID:???
>>711
でもその方法でやると後半部分のデータがくずれたりしますよ。
すべての部分(書き込みするために読み取る部分と、書き込みする部分)で
ロック処理をしておけばよっぽどのことがない限り大丈夫なはずです。

file_get_contentsはphpでは推奨しているといかなくとも、
「OSによっては高速になる」との記述もあります。
まぁちょっとの差でしょうけどね。

# それとちょっと間違えてるよ
# $data = fread($fn, filesize($logfile));

714軟式PHP:04/08/02 17:40 ID:???
>>711
|Д`)
715nobody:04/08/02 17:43 ID:tyWsL5gt
>>709
レスありがとうございます。
本当だ。できました。ありがとうございます。

こんな簡単なことに気が付かないとは恥ずかしい・・・。
716711:04/08/02 18:25 ID:???
>>711 で rewind を忘れていた。本当は fwrite の結果を取得してから
if 文を行った方が安全だけど。

rewind($fn);
if (fwrite($fn, implode("\n", $data))) {
  ftruncate($fn, ftell($fn));
}

>>713
後半部分のデータがくずれるというのがよく分からない。
そのために、ftell で書き込み終わったファイルポインタの位置を取得して、
それ以降の部分を切り捨てている。

fwrite から ftruncate までの間に別からファイルの読み込みがあった場合は
確かにくずれるかもしれないけど、0バイトで読み込まれるよりはましだと
思ったということで。

一瞬でもファイルを 0バイトにしたいくないのは、fwrite で失敗、例えば
HDD のディスクが一杯になったりして、ftruncate でファイルを 0バイトに
した後にfwrite が失敗したりするとファイルは 0バイトで止まってしまうと
いう問題もあるからだけど。

711 で書いた fread の引数は確かに間違い。
ただ、fopen で既にファイルを開いていた場合は file_get_contents よりは
fread で全部読み込んだ方が早いのは確か。一応、ベンチマークを取って
確認した。
fopen から fclose までの一連の処理を行うよりは file_get_contents の方が
早いけど。
717686:04/08/02 18:37 ID:???
>>687
"最初に確保されるサイズ"ってのは文字列オブジェクト一つのことなんですけど。
あとデフォで8Mってのはmax_limitのこと?
これは「確保できる最大メモリーサイズ」であって、
どこにも「最初に確保されるサイズ」ってかいてない。
それとも別のオプションがあるのかな。

とりあえず適当に実験してみたところphpの文字列はC文字列で、長さは保持しない感じ。
この辺はあまり気にしてもしょうがないんだが。
718nobodyさん:04/08/02 18:51 ID:???
PHPを使ってHTMLやPDFの内容を
動的に画像生成したいのですが、可能でしょうか?
719nobodyさん:04/08/02 19:05 ID:???
>>718
PHPはファイルを読み込むことができます。
PHPは画像生成をすることができます。
718はhtmlやPDFのレンダリングエンジンを作ることができます。
結論 -> 可能です。
720nobodyさん:04/08/02 19:07 ID:???
ある会員登録の登録フォームで無料メールアドレスでの登録を拒否するようにしたいのですが、
どんな風にスクリプトを書けばいいでしょうか。
流れだけでもわかりませんか?
721Imo ◆.jC7ANgFY. :04/08/02 19:12 ID:???
>>716
そこでそのようなことをしなければならないようじゃ、
それをしてもデーターの後半はくずれてしまいますよ。
と言いたかっただけですよ。

私は一般共用サーバーで使うことを前提にしてやっている
のでそこまで考えていませんが(HDDがいっぱいになるとか、、、

私も調べてみましたがまぁそうっぽいですね。
ファイルサイズがかなり巨大になってくると逆になりますが。
file_get_contentsは引数が少なくて個人的に好きです。
というよりかネットワーク処理のときにfreadの第二引数に
だまされて避けてるだけですが、(ローカルでは問題ありません

# FreeBSD+PHP4.3+PHPAで10000回ループさせた結果
# fopen&fclose:    0.253ms
# fread:         0.223ms
# file_get_contents: 0.335ms
722nobodyさん:04/08/02 19:17 ID:???
>>720
無料メールアドレスのリストを作成し、入力されたメールアドレスを比較すればいいです。
有料メールアドレスのリストでもいいですよ。
723Imo ◆.jC7ANgFY. :04/08/02 19:19 ID:???
>>717
でも文字列中に"\x00"も含められるということは文字の長さを保持しているわけだし、
変数といわれても型がいろいろあるわけで、最低10Byteは消費しているなと思ったり。
推測なんでなんともいえませんが、
724Imo ◆.jC7ANgFY. :04/08/02 19:24 ID:???
>>720
私だったらこんなの書きますよ。

$deny = array('hotmail.com', 'mail.goo.ne.jp');
list($mail_user, $mail_domain) = explode('@', $mail, 2);
if (in_array($mail_domain, $deny)) {
  die('別のアドレスで登録してくださいませ');
}

725679:04/08/02 19:33 ID:???
レスありがとうございます
>>684
高いっす
>>694
知り合いから頼まれて作っているのですが(携帯用待ち受け画面サイト)、
端末に合わせて自動的に画像を拡大縮小してほしいということで
 元ファイル読み込み→GDでリサイズ→imagejpegで出力
という処理をしています(ファイルとしては書き出していません)。
で、携帯のほうで転送不可にしたいということで、ドコモ用・au用で
違った転送不可フラグを書き込みたい、と。
やはり一度書き出さないと無理なのでしょうか?
気合入れてググってきます・・・。
>>695
そのexif_read_data()の逆の関数があればラクなんですけど・・・
exif_write_data($image,"comment","hogehoge");みたいな。
726Imo ◆.jC7ANgFY. :04/08/02 19:39 ID:???
>>725
packでがんばって処理するしかないようですね。
とりあえずJPEGのフォーマット関連のサイト、書いときますね。
ttp://www02.so-net.ne.jp/~koujin/jpeg/jpeg.html
ttp://www.yk.rim.or.jp/~mamo/Computer/DS-7/exif.html
ttp://www2.airnet.ne.jp/~kenshi/exif.html

ここは消えてるけどweb.archiveになら残ってるからアドレスだけ
ttp://www.ba.wakwak.com/~tsuruzoh/Computer/Digicams/exif.html
727nobodyさん:04/08/02 19:58 ID:???
>>722さん>>724さんレスありがとー

今のところhotmailが対象なのですが、他のメールも登録を考えた方がいいかな?と
思ってるので、そのリストを作成してみます。

ソースの提示もしていただき感謝です。
今のスクリプトへうまく組み込めればいいのだけど、最近php始めたもので^^;
参考にしてやってみます!

728nobodyさん:04/08/02 22:18 ID:???
flockでロックしているファイルを、
file()で読み込もうとするとどうなりますか?
flockを使うならファイル処理はfopenで揃えた方がいいでしょうか?
729nobodyさん:04/08/02 23:11 ID:lHZ4GoiW
>>725
二つアドバイス。

一つ目
生成されるファイルサイズに気をつけてね。
vodafoneのV3/4シリーズは、ファイルサイズ最大6Kbyteだ。
QVGAサイズで6Kbyteは早漏圧縮率を上げないとね。

二つ目
QVGA対応端末の中には、Webアクセス時、QVGAサイズの画像を表示できない端末があります。
そやつらは、vodafoneだったら四分割、ezwebだったらダウンロードさせるしかないです。

730nobodyさん:04/08/02 23:17 ID:lHZ4GoiW
おながいします。
千通ちかいメールを送る必要があります。
Mail::send()を使おうと思ってるんですが、sendmailで送るのと、smtpで送るのとで、速度面ではどちらが高速でしょうか?
ちなみに、MTAはqmailです。
731nobodyさん:04/08/02 23:41 ID:d5GNjYEU
変数に文字列が入ってるんですが、最初から20文字までを表示したいプログラムって、どのように組んだらいいのでしょうか?
for分を使ってカウントしようとしたのですが、文字そのものをカウントできなくて困ってます。

よろしくお願いします。
732nobodyさん:04/08/02 23:42 ID:8RF4q1S0
フォームからメール送信時のBccについて質問させて下さい

$to = '[email protected]';
$bcc = "[email protected]";
$from = "[email protected]";
$title = "sampletitle";
$headers = "From: $from\r\n";
$headers .= "Bcc: $bcc\r\n";
$msg = file("./mailtxt.txt");
$msg = implode("",$msg);
mb_send_mail($to,$title,$msg, $headers);
のように書いてtoの他にbccでも送信したいのですが
送信されません、マニュアルをみるとmb_send_mail()はヘッダの区切りが\nになっていましたが
mail()の方は\r\nになっていましたので両方試しましたがダメなのはそこではなさそうなのですが
どこがおかしいかご指摘いただけますか。

旧サンのコバルトのraQ550、Apache/1.3.20+php4.0.6です。
733nobodyさん:04/08/02 23:47 ID:???
ポカーンな質問でとても申し訳無いのだけども...

スクリプト内部に"->"という記述があるのだけども
これってどんな意味があるのかどうかご教授を...

余りにも漠然としたワードなんで
ググっても全くヒットしなかったデスん('A`)
734nobodyさん:04/08/03 00:00 ID:7JP71wHz
735nobodyさん:04/08/03 00:02 ID:???
phpとクラスとかオブジェクトとかで検索すると
出てくるんでないかあい?
736nobodyさん:04/08/03 00:05 ID:???
>>731
substr()
737nobodyさん:04/08/03 00:57 ID:???
>>734 >>735
なるほど!
クラスを用いた時のメンバ変数やメソッドにアクセスする為の
演算子という事が少しずつ分かってきました

激しく目から鱗です、謝々!!
738nobodyさん:04/08/03 01:30 ID:???
アロー演算子な
739nobodyさん:04/08/03 02:10 ID:OM2Aei59
コンストラクタでnewしてそのクラス内で
$this->オブジェクト->メンバ名
としても
Object->メンバ名
となってしまうんですが、どこがおかしいのでしょうか?
740nobodyさん:04/08/03 02:22 ID:Q+9yurzP
その「Object->」はどっから出てきたんだ?
具体的なエラーメッセージor挙動を書きなさい
741739:04/08/03 02:29 ID:OM2Aei59
すいません、言葉足らずでした(^^;
設定情報を格納するクラスをつくっていて、
他のクラスのメンバにそのクラスのオブジェクトを生成・代入し、
print "なんたらかんたら$this->オブジェクト->メンバ名";
みたいな感じで出力させたところ、何故か出力が
Object->メンバ名
になってしまうのです。
一応C++をやっていたのですが、PHPではpublicなメンバみたいなのは使えなかったりするのでしょうか?
742軟式PHP:04/08/03 09:13 ID:???
<?php
/*-----親クラス-----*/
class Oya{
//メンバ変数
var$musukoObj;
//メンバ関数
function Oya(){
$this->musukoObj = new Musuko;
print$this->musukoObj->GetData();
}
}
/*-----子クラス-----*/
class Musuko{
//メンバ変数
var$data;
//メンバ関数
function Musuko(){
$this->data = 100;
}
function GetData(){
return $this->data;
}
}
//--クラス定義終了
$objOya = new Oya();
?>
100が出力されるけど、こういうことではない?
743軟式PHP:04/08/03 09:14 ID:???
あ、タブで区切っちゃってた。・゚・(ノ∀`)・゚・。
適当なところにスペースよろしく。
744Imo ◆.jC7ANgFY. :04/08/03 10:39 ID:???
>>741
print "なんたらかんたら{$this->オブジェクト->メンバ名}";
こうやってみたらいかが?
745nobodyさん:04/08/03 13:20 ID:WVIz7Nic
PHP4.1.2時代に作ったプログラムを4.3.8用に修正したんだけど、
PHPのバージョンを4.3.8に上げる前に、
プログラムは前もって4.3.8に修正したヤツを
現行のサーバーに入れようと思ってます。

文法をより適切に修正しただけで、新しい関数などは用いてはいないので
4.3.8用に修正したプログラムでも4.1.2で動くかと思ったら、
一箇所ダメなところが。
「mb_ereg()」関数が4.1.2時代にはまだ「mbereg()」としてしか存在していなかったようで、
mb_ereg()関数を呼び出しても未定義と怒られる。
なので、

function mb_ereg($str1,$str2,$str3){
return mbereg($str1,$str2,$str3);
}

のような感じで関数をとりあえず定義してバージョンアップ前まではお茶を濁そうと思っていたら
三番目の引数が問題でうまく動かない。

mb_eger("(hoge)$",$data,$regs);

とした場合に正規表現にマッチした部分を$regs[1]として
取り出すことができなくなってしまうのでお手上げ。

なので、「mb_ereg()」と自作した関数をそのまま「mbereg()」関数に
リンク(エイリアス?)するような方法はないでしょうか?
746739:04/08/03 13:36 ID:???
>>742-744
レスどうもです!

>>742,743
やっちゃいますよね、それ。
内容は大体そんな感じです。
結局のところ、原因は・・・

>>744
まさにこれでした!
便利さには危険が付きまとうんですね(笑

皆さん、どうもありがとうございました。m(_ _)m
747Imo ◆.jC7ANgFY. :04/08/03 14:19 ID:???
>>745
たとえばこんな感じ?

function mb_ereg($str1,$str2,&$str3){
return mbereg($str1,$str2,$str3);
}
748745:04/08/03 14:27 ID:???
>>747
なるほど、参照渡し。
PHPで参照渡しってほとんど使ったことなかったから思い付きませんでした。
ありがとうございます。助かりました。
749nobodyさん:04/08/03 15:05 ID:???
ていうか参照渡しとすぐ分かるだろうに・・・
750nobodyさん:04/08/03 15:27 ID:KxZQfxxV
ググってもよく分からないので有識者の方にお聞きします。

いままで、結構な規模のPHPプログラムをincludeを使って書いています。
このソースを外部に公開することになったのですが、
functionを使う感覚でincludeを使って処理を別ファイルに書き出していたので、
プログラム的にちょっとみっともないかな、と思っています。

ですが、問題はここではなくて、
includeとfuctionで同じ(ような)処理を呼び出す場合、
処理スピードが違う等のメリットはあるのでしょうか?
functionではメモリにキャッシュされるような気もするのですが、
それに関するドキュメントが見つかりませんでした。

メリットが特になければ、
「スピードには問題ない!」で押し通そうと思っているのですが...
751nobodyさん:04/08/03 15:41 ID:???
セッション情報をクッキーでブラウザに渡すとき、
Set-Cookie ヘッダは session_start() 関数を実行するときに表示されているんでしょうか?
環境は 4.3.6 + FreeBSD のレンタル鯖です。
752nobodyさん:04/08/03 16:03 ID:BfqwKzi+
ApacheとTomcatを連携させている所にPHP4.3.8をインストールして
HTMLに<?php include("test.jsp"); ?>と記述してみたのですが、
test.jspのソースがそのまま表示されてしまいます。
Apacheのhttpd.conf中のAddType application/x-httpd-phpに
「.jsp」を追加してみたのですがだめでした。

JSPのファイルからJSPをインクルードする方法なら簡単なのですが、
どうしてもHTMLからJSPをインクルードしたいんです。
JSPを表示する方法が分かる方がいたら教えてください。
753nobodyさん:04/08/03 16:11 ID:???
754nobodyさん:04/08/03 16:17 ID:???
>>749
「人生いろいろ、会社もいろいろ、社員もいろいろだ」 
小泉純一郎首相様が言ってました。
755nobodyさん:04/08/03 16:47 ID:???
>>750
取り合えずPHP4が前提でいいのかな?
「メモリにキャッシュ」をどのようにイメージしてるかが
ちょっと不明だが、サブプログラムのincludeでも
メインプログラム上のfunctionでの記述でも実行前に
メモリに取り込まれるのは変わらない。またこれは、
includeの箇所が実際に実行されるされないに関わらない。
スピードに関わるとしたら、includeの場合はファイルのopenや
close等の処理などで、塵も積もれば的な差異が出る可能性はある。
しかしその程度は瑣末な事。

>functionを使う感覚でincludeを使って処理を別ファイルに書き出し
素の処理コードをまんまincludeしてるのかな?
「公開」の目的とするものによっては、きちんと追いやすいコードに直すべきだよ。
includeはライブラリ然としたものを読み込むべし。
756752:04/08/03 17:24 ID:???
>>753
できました。ありがとうございます。
757nobodyさん:04/08/03 17:31 ID:???
>>755
750です。
回答ありがとうございます。

メモリにキャッシュ、というのは、2度目以降の読み込みを想定していました。
functionだとメモリ上に常駐してくれるのかな、と。
includeはテンプレートを読み込むっていうイメージがあるもんで。

> 素の処理コードをまんまincludeしてるのかな?
そうです。
よく考えると、functionの方がコードとしては追いやすいですよね。
外部へは時間の関係で今のまま出しますが、
少しずつ、手直ししていくことにします。
重ねてありがとうございました。
758nobodyさん:04/08/03 17:58 ID:???
>>754
759nobodyさん:04/08/03 18:08 ID:???
質問なんですが、皆PHPをはじめたときどうやって勉強しましたか?
1文ずつ覚えていったり一つ何かを作ろうとしたり・・・
俺の場合は本買ってまず掲示板作ろうととりかかりましたが
勉強のやり方はあっているでしょうか?
760軟式PHP:04/08/03 18:35 ID:???
>>759
合ってるやり方なんて無いよ。自分で見つけるものさ。
自分が作りたいものを目指して勉強するのがいいんじゃないかな。
761759:04/08/03 19:06 ID:???
必死に掲示板を作っているけど
ロックのかけ方もわからないし、クッキーすら全く・・・
出来たものも微妙です・・・
762軟式PHP:04/08/03 19:13 ID:???
最初はそんなもんじゃないかな。
ロックの概念とか頭に入れてるだけでもマシな方かと。
763nobodyさん:04/08/03 19:26 ID:???
>>759
一番最初はcgiの拡張子をphpにしてエラーが無くなるまで頑張ったよ
764Imo ◆.jC7ANgFY. :04/08/03 19:27 ID:???
大まかなところから考えていく。これがコツ。たとえば掲示板に書き込む処理なら、
「掲示板に書き込む」
 「内容のチェック」
  「必須項目チェック」
   「内容が空欄であればエラー」
  「最大文字長チェック」
   「それぞれにあった文字数以上であればエラー」
  「不正文字チェック」
   「\x00を除去する」
   「改行を\nに統一する」
    「\r\nを\nに、\rを\nに置換する」
   「問題のある文字(タグなど)を置換する」
  「改行をタグに変換」
 「ファイルの書き込む」
  「ファイルを開く」
  「ファイルをロックする」
  「ファイルを読み込む」
  「データを追加する」
  「ファイルに書き込む」
  「ファイルのロック解除」
  「ファイルを閉じる」
1つ1つの細かいところは簡単。でも、漠然としてるから難しく感じる。
まぁとはいってもロックはちゃんと理解していないとだめだけどね。

# でもちゃんとしたロックをできている人はphpプログラマーでは少数
# 今度ホームページでも作ってそれについて書こうかな、
765nobodyさん:04/08/03 20:12 ID:???
phpまともに理解していない糞コテが何言ってんだか
766nobodyさん:04/08/03 20:16 ID:???
>>757
>メモリにキャッシュ、というのは、2度目以降の読み込み

この辺あたりから同じプログラムが連続して処理された場合の
キャッシュのようなものがあると考えてるのだと思われるのだが、
PHPはJavaのように何らかのアプリケーションサーバが常に
起動してる訳じゃなくて、基本的には1回こっきりで閉じている。
但しその1回の中での同一の処理については、効率化のための
処理が行われている。

httpdのモジュールとして運用した場合は若干違うのだが、
CGI版の挙動を調べてみると判りやすいだろう。
# CLIの方がもっと判りやすいか。

「同じプログラムが連続して処理された場合のキャッシュ」については
PHP Accelerator、Zend Performance Suite(Zend Accelerator)、
PECLに移された APCなどのプロダクトが関連するので、それを調べること。
767745:04/08/03 20:47 ID:???
747氏の方法で解決と思いきや、
第三引数を指定しない場合にエラーになってしまいます。

function mb_ereg($str1,$str2,&$str3=""){

とするとエラーになってしまうし。
どうしたものでしょう?

参照渡しの場合は初期値の設定は不可?
768Imo ◆.jC7ANgFY. :04/08/03 21:19 ID:???
>>767
完全な実現は無理だと思うのですが、とりあえず
mb_eregを呼び出すときにmb_ereg($str1, $str2, &$str3);
定義の方をfunction mb_ereg($str1,$str2,$str3="")
にすることによってある程度実現は可能です。
769Imo ◆.jC7ANgFY. :04/08/03 21:26 ID:???
>>765
じゃぁこれをもってこのスレから立ち退きますね。
少なくとも次スレまでは、
770nobodyさん:04/08/03 21:34 ID:29Vzu5Ve
フォルダ内のファイルを表示するプログラムを作りたい場合、どのような関数を使えばいいですか?
771nobodyさん:04/08/03 21:42 ID:???
(´Д`;) まにゅある見ようぜ
わざわざ日本語に訳してくれてんだし
772745:04/08/03 21:42 ID:???
>>768
ありがとう。
今はテストできる環境がないので、明日試してみます。
773770:04/08/03 21:49 ID:29Vzu5Ve
readdirですね。スマソ
774nobodyさん:04/08/04 15:24 ID:???
flock($fp,LOCK_EX)
でロックかけたあと、ロックを外すにはどうすればいいのですか?
775nobodyさん:04/08/04 15:28 ID:???
>>774
で、オマイはマニュアルのflockのページを見たのかと。
776774:04/08/04 15:32 ID:???
スマン、解除の方法見落としていた・・・
777nobodyさん:04/08/04 15:39 ID:+l+GCo7r
774にロックをかけるにはどうすれば良いのですか?
778軟式PHP:04/08/04 16:14 ID:???
flock( fopen(">>774","r"), LOCK_EX );
779nobodyさん:04/08/04 16:27 ID:???
>>778
774のファイルハンドルはいずこへ…。
780nobodyさん:04/08/04 16:43 ID:T7C0bXmt
PHPを使って、フォームから数字を入れて、たとえば5と入れたら0〜5までを表示させるプログラムを教えてください。
781nobodyさん:04/08/04 16:47 ID:???
<?php

$no = 5;
for ($i=$no ; $i >= 0; $i--){
print $i;
}
?>

これでダメなのか?
782nobodyさん:04/08/04 16:54 ID:T7C0bXmt
だめでした_| ̄|○
フォームの処理は
<?php
echo $_POST["名前"];
?>
でいいんですよね
783軟式PHP:04/08/04 16:59 ID:???
フォームの書き方にもよるよ。
method属性指定してなかったらデフォはGETで送られるし。
784nobodyさん:04/08/04 17:03 ID:???
>>780
フォームで入力した値を取得して、
適正な値(正の数値、整数等々)かどうか確認して、
for構文を使って初期の値(0)から、入力値まで
カウントアップ(例示のでは+1)して、echoする。
初期値とカウントアップ、適正値の条件などは容易に
変更できるようにパラメータ設定としておくのが定石。
785軟式PHP:04/08/04 17:03 ID:???
<?php
$iNo = intval($_REQUEST["名前"]);
for( $i = 0; $i <= $iNo; $i++ )
{
print $i."<br>";
}
?>
一応答えおいとく。
786nobodyさん:04/08/04 17:04 ID:T7C0bXmt
学校の課題なんですが・・・。

フォームから正の整数を入力して送信すると、1からその数字までの整数の
並び方を表示するPHPスクリプトを作れ。フォームの入力はテキストフィール
ドやメニューを使ってもよい。入力が0以上かどうかのチェックも行え。
787軟式PHP:04/08/04 17:05 ID:???
て、宿題丸投げかよ・・・○| ̄|_
788nobodyさん:04/08/04 17:07 ID:T7C0bXmt
ああ!!
さっきのできました!
でも”5”の指定なしはどうすればいいんでしょう・・・?
789nobodyさん:04/08/04 17:08 ID:T7C0bXmt
あああ!
できました!!どうもありがとうございました!!
790nobodyさん:04/08/04 17:14 ID:???
書き込む前に考えろや

こチな!のAA貼っとけや
791nobodyさん:04/08/04 17:16 ID:T7C0bXmt
小一時間考えました○| ̄|_
4人で・・・
すみません。
792nobodyさん:04/08/04 17:16 ID:???
>>788
課題を貰ってるのは君らだけなんだから、
授業を受けてる生徒内で解決するか
その課題に書いてある条件をここに列挙しろよ。
マルチ先にしか書いてない条件なんて、他の人は判らん。

でも先生も、このスレとPHP-usersと丸投げMLぐらいは読んでると思うぞ。
793軟式PHP:04/08/04 17:20 ID:???
>>792
>でも先生も、このスレとPHP-usersと丸投げMLぐらいは読んでると思うぞ。
確かに読んでそうだな・・・(藁
794nobodyさん:04/08/04 17:41 ID:???
795nobodyさん:04/08/04 17:59 ID:???
てか、このレベルの課題って・・・何年生?低学年か?
796軟式PHP:04/08/04 18:09 ID:???
しかも4人がかり。中学生かな。
797nobodyさん:04/08/04 18:11 ID:???
ていうか学校の授業ってサーバサイドスクリプトの勉強なんかするんだ
普通はCとかスタンドアロンアプリケーションなんだけどな
798nobodyさん:04/08/04 18:12 ID:???
時代が違うんだよおじちゃん
799nobodyさん:04/08/04 18:16 ID:???
専門学校だたりして?
800nobodyさん:04/08/04 18:17 ID:???
専門であのレベルだとしたら行く価値全くねーな
801軟式PHP:04/08/04 18:19 ID:???
俺が高校の時はCOBOLだったが。DIVISION萌え。・゚・(ノ∀`)・゚・。
802nobodyさん:04/08/04 18:20 ID:???
オレモー
IDENTIFICATION DIVISION
803nobodyさん:04/08/04 18:28 ID:???
WORKING-STORAGE SECTION
804nobodyさん:04/08/04 18:30 ID:???
大文字はやめてくれよ
加齢臭オヤジども
805nobodyさん:04/08/04 18:32 ID:???
>>804
おまえは77レベルで変数定義してな
806nobodyさん:04/08/04 18:38 ID:???
プログラミングとか、ネットマナーとか、独学じゃなくて
誰かに教えてもらう時代になったんだな
807nobodyさん:04/08/04 18:41 ID:+l+GCo7r
$_SESSIONを利用した場合にリンクによるGETによりPHPSESSIDが
盗まれた場合に同一ドメインまたはサーバー上のPHPが利用出来れば
$_SESSIONの内容を拾得する事が可能であると想うのですが、
このリスクをさける為にはsession.use_only_cookies=1にする以外の
手はないのでしょうか?
808nobodyさん:04/08/04 18:48 ID:???
言いたいことは分かるが
>同一ドメインまたはサーバー上のPHPが
この辺の日本語がおかしい

809nobodyさん:04/08/04 18:50 ID:???
日本語の添削始めちゃったよ
810nobodyさん:04/08/04 18:56 ID:???
うわぁぁぁん;;文字サイズ13pxなのにかなりデケーヨ;;
811nobodyさん:04/08/04 19:01 ID:???
[<A href="<?php echo "$script?action=new"; ?>" target="_self">新規投稿</A>]
[<A href="<?php echo "$script?action=search"; ?>" target="_self">検索</A>]
[<A href="<?php echo "$script?action=admin"; ?>" target="_self">管理室</A>]

にしているのですが、$actionに変数が格納されません、なぜでしょうか?
812nobodyさん:04/08/04 19:09 ID:oguY/FCP
>>811
実際のブラウザ上でアンカーのhrefは何になってる?
813811:04/08/04 19:10 ID:???
ごめんなさい、”いつのまにか”ちゃんと表示されました・・・
本当迷惑かけてごめんなさい・・・釣ってきます、、
814nobodyさん:04/08/04 19:20 ID:???
なんだ register_globals の問題かと思った。
815nobodyさん:04/08/04 19:36 ID:5xfxrndz
入力されたデータをDBに書き込みたいんですが、
普通にINSERT文をクエリー発行すると
複数ユーザに同時に書き込みされた時に
DBアクセスが著しく遅くなってしまいます。
同時アクセスを防ぐ方法として、
一個のフラグのようなファイルを作ってみたのですが
どうも確実に同時書き込みを防いでくれません。
その辺を便利に防いでくれる関数はないでしょうか?
それか、便利な防ぎ方が載っているサイトがあれば教えて下さい。
816nobodyさん:04/08/04 19:53 ID:???
テーブル構造が悪いんじゃなかろうか?
817nobodyさん:04/08/04 19:55 ID:???
ぽまいら、>>791はXPでテトラプログラミングをしている先進的な学校の生徒でつよ

>>807
ついでにcookieもssl-secureにしておけば多い日も安心。

>>815
まずはDBのチューニングかな。
その前にスクリプトのチューニングが必要かも知れんけど:-p
その後で、使っているDBのロック機能を調べてみれ。
PHP側だけで排他制御するのはあんまりお勧めできない。
一箇所でも忘れたら全部パー。それでもあえてやるならflock関数かな。
818nobodyさん:04/08/04 19:57 ID:???
同時アクセスの制御自体はデータベースサーバがやってくれるわけだし
俺もテーブル構造が悪いんだと思う
819nobodyさん:04/08/04 20:09 ID:???
ていうか
テーブルのロックするsql文あったでしょ
820nobodyさん:04/08/04 20:11 ID:???
みんな他人の回答も読もうぜ。
821nobodyさん:04/08/04 20:27 ID:???
あくまでアクセスブロックで防ぐとして、

ブロックされた人には
「只今、混みあっています。少々時間が経ってから再度アクセスください。」
とかってエラー出すのだろうか?
822807:04/08/04 20:55 ID:+l+GCo7r
SESSION機能を使っている時にIPの確認は毎回行っているのですが、
他に個人を識別するのに役に立つ情報などは何かあるのでしょうか?。

>>808
ハード一台で複数のドメインを管理している貧乏サーバーとか
あるかな、とひねくれた発想を^^;。
サーバー上でSESSIONがファイルとして保存されている場所が
同じであればドメインが異なってもアクセス出来てしまうのでは
ないかという事も考えてみました^^;;。
ひねくれすぎですね・・・。

823nobodyさん:04/08/04 20:59 ID:???
IPアドレス+UserAgent+MACアドレス

とか。

仕様的にはMACアドレスだけでも(ルータレベルまでは)識別できるはずだけど、
インターネット上には同じMACアドレスが山ほどあるみたいだからね。
8241:04/08/04 21:00 ID:???
クッキーについて教えてください
825nobodyさん:04/08/04 21:02 ID:+6UXuj/L
すいません、ちょとお聞きしたいのですが、
今、PHPとPostgresSQLとで、プログラムを作ってるんですが、
DBから得たresultから、1行づつデータを読み込む部分での質問です。

たとえば、5行のresultがあるとして、
3行目まで読み込んだところで、ポインタをまた1行目に戻したい場合、
関数は何を使えばいいのですか?

sybase_data_seek を使ってもうまくいかず(PHPのバージョンが足りてないのかも知れませんが)
MySQLなら、mysql_data_seekという関数があるようですが、
Postgresの方には、同じような役割の関数はないのでしょうか?

開発環境を変えることができないことを前提で、
どなたか教えてほしいです。
826nobodyさん:04/08/04 21:11 ID:???
> MySQLなら、mysql_data_seekという関数があるようですが、
> Postgresの方には、同じような役割の関数はないのでしょうか?

sybase_data_seek
827nobodyさん:04/08/04 21:25 ID:???
質問読まずに書き込む
PEARのDB.php使って結果を配列に格納すれば無問題
828nobodyさん:04/08/04 21:57 ID:???
829nobodyさん:04/08/04 22:29 ID:???
PHP+MySQLで掲示板作ったのですがコメントの部分がたまに文字化けするのはなぜでしょうか?
文字コードもEUC-JPにコンバートしてるのですが、たまーに文字化けしてしまいます。
ご教授よろしくお願いします。
830825:04/08/04 23:12 ID:???
>>826
それは、PHPのバージョンがいくつから使えるんですか?
試してみたのですが、エラーでたんですけど・・・。

831nobodyさん:04/08/04 23:23 ID:???
>>830
PostgreSQLを使うのにsybaseの関数を何故使うのか、ということだと思うのだが。
元質問の話に戻すと、まぁ、なんだ。おまいもマニュアル嫁。
PostgreSQL関係の関数って高々70個くらいだろ。
832nobodyさん:04/08/05 00:46 ID:jHqBsTPN
>>829
とりあえずここ見て設定確かめろ
http://tsuttayo.sytes.net/php/char_trn/
833nobodyさん:04/08/05 01:20 ID:???
会員制の掲示板を作ったとして、
その人がログインしているかどうか確かめることってできますか?
ID、PASSを入力してログインするとログインしている人の名前が出るとか・・・
またブラウザを閉じるとその人の名前が消えたり・・・
834nobodyさん:04/08/05 01:38 ID:???
何もかもダメダメだな
835nobodyさん:04/08/05 02:45 ID:???
マニュアルから逆引きの方法教えてください・・・
836nobodyさん:04/08/05 03:06 ID:???
Parse error: parse error, unexpected $ in 94って何すか?
特にミスっている場所ないのですが・・・
837nobodyさん:04/08/05 03:14 ID:???
>>833
cookieかsession
838836:04/08/05 03:15 ID:???
ちなみに文はこれです
<?php
$data = file($gdata);
$count = count($data);
for ($i=0;$i<=$count;$i++){
list ($idr,$passr,$lvr,$expr,$char,$winr,$loser,$hpr,$atcr,$defr,$masr,$dexr) = split( ",", $data[$i]);
if ( $id != $idr ){
if ($i == 1){
print " <OPTION value=$idr selected>$idr</OPTION>";
}else{
print " <OPTION value=$idr>$idr</OPTION>";
}
}
?>
839nobodyさん:04/08/05 03:15 ID:???
>>836
ミスってなきゃエラーでねぇよ
840nobodyさん:04/08/05 03:19 ID:???
これで満足?

<?php
$data = file($gdata);
$count = count($data);
for ($i=0;$i<=$count;$i++){
list ($idr,$passr,$lvr,$expr,$char,$winr,$loser,$hpr,$atcr,$defr,$masr,$dexr) = explode( ",", $data[$i]);
if ( $id != $idr ){
if ($i == 1){
print " <OPTION value=\"$idr\" selected>$idr</OPTION>";
}else{
print " <OPTION value=\"$idr\">$idr</OPTION>";
}
}
}
?>
841836:04/08/05 03:23 ID:???
まだまだ欲求不満ヽ(;´д`)ノ
(ちなみにexplodeてなんだろ)
842nobodyさん:04/08/05 03:31 ID:???
正規表現いらないときはsplitよりexplodeのほうが高速

http://php.s3.to/man/function.explode.html
843836:04/08/05 03:33 ID:???
なるほどさんくす!
しかしエラーが一向に消えない・・・
844nobodyさん:04/08/05 03:34 ID:???
94行目付近がこのソースなんだろ?
845836:04/08/05 03:36 ID:???
88 </TR>
89 </TBODY>
90</TABLE>
91</FORM>
92</CENTER>
93</BODY>
94</HTML>


_| ̄|○
846nobodyさん:04/08/05 03:38 ID:???
どこかの } が足りないと思われ
ちなみに838のソースはforを閉じてないぞ
847836:04/08/05 03:45 ID:???
>>846
あり! '}'忘れてました(*´д`)
ifとforが同じ列だったんで分かりづらかったようです><
有難うございました^^
848nobodyさん:04/08/05 04:34 ID:???
一つのプログラム文を複数にわたって使うやりかた・・・
どうだっけ?w
849848:04/08/05 04:37 ID:???
例えば

print "あいうえお";
print "かきくけこ";

上の二つを呼び出す文
850836:04/08/05 04:47 ID:???
<?php
print " <TD bgcolor=#ffffff align=center><SELECT size=1 name=getyou>";
$data = file($gdata);
$count = count($data);
for ($i=0;$i>=$count;$i++){
list ($idr,$passr,$lvr,$expr,$char,$winr,$loser,$hpr,$atcr,$defr,$masr,$dexr) = split( ",", $data[$i]);
print $idr;
if ( $id != $idr ){
if ($i == 0){
print " <OPTION value=$idr selected>$idr</OPTION>";
}else{
print " <OPTION value=$idr>$idr</OPTION>";
}
}
}
?>


ヒロシです。
上の文を作ってみましたが、$idrに変数が格納されません・・・。
851nobodyさん:04/08/05 04:53 ID:???
>>848
何したいのかわからん

>>850
データに、 $idr に対応する部分あるか?
852850:04/08/05 05:01 ID:???
解ケツ!
forの不等号が反対でした!
853初心者:04/08/05 05:02 ID:???
変数はブラウザを閉じない限りはずっと格納された状態なんでしょうか?
854nobodyさん:04/08/05 05:05 ID:???
>>853
スクリプトが実行されている間のみかと(初期化しない限りは
855初心者:04/08/05 05:07 ID:???
1ページ目で、変数を$Aに入れる
2ページ目で変数を$Bに入れる
3ページ目で$Aと$Bを表示させる
$Aはカラッポ、$Bにはちゃんと入ってる。。。
という現象です・・・
856nobodyさん:04/08/05 05:08 ID:???
>>855
ページを切り替えるときにPOSTなりGETなりCOOKIEなりで渡してやらねば・・・
857初心者:04/08/05 05:10 ID:???
ごめんなさい、GET、COOKIEについてはサッパリです・・・
POSTはこの状況じゃ使えないです。
858nobodyさん:04/08/05 05:12 ID:???
>>857
とりあえず何がやりたいのかわからんが
example.php?A=$A&B=$B
こんな感じで呼び出してやればいいんでない?
859nobodyさん:04/08/05 05:13 ID:???
>>853
サーバサイドとクライアントサイド・スクリプトの
違いについて勉強してこい。してきた上で
「シリアライズしてファイル化」について調べると
幸せになれるかもしれぬ。
860nobodyさん:04/08/05 05:20 ID:???
>>855
それも課題なのだろうか…という疑問がちょっと沸いた。
それなら「セッション変数」「hidden」だな。
861初心者:04/08/05 05:27 ID:???
とりあえずhiddenで解決できました。
しかしなぜ3ページ目まで変数が渡らないんだろう・・・
862nobodyさん:04/08/05 05:31 ID:???
あたり前田のクラッカー
863nobodyさん:04/08/05 05:44 ID:???
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ']' in 〜 on line 35
864nobodyさん:04/08/05 05:58 ID:???
print " <CENTER>$idrrが$dmgに餌をあげた!</CENTER><BR>";

この文何かおかしいかな?
これがエラーの原因なんだが
865nobodyさん:04/08/05 06:08 ID:???
{$foo}
866nobodyさん:04/08/05 06:49 ID:???
sjis馬鹿は死んでも治らない。
867nobodyさん:04/08/05 07:25 ID:???
for文を使って数回同じ文を使いたいのですが
$Aが0または$Bが0になった場合抜け出したいのですが
どうすればよいですか?
868867:04/08/05 07:34 ID:???
for ($i=0;$i<=$A || $i<=$B;$i=$i+0){}
こんな文が使えるなんて初めて知りました><
869nobodyさん:04/08/05 08:08 ID:???
> $i=$i+0
キモッ
while(...) でいいじゃん
870nobodyさん:04/08/05 08:15 ID:???
>869
お前の方がよっぽどきもいわパゲッ!
871nobodyさん:04/08/05 08:24 ID:???
> $i=$i+0
コスモを感じる
872nobodyさん:04/08/05 08:29 ID:???
(=゚ω゚)ノィョゥ
クッキーの使い方教えてくださいおながいします

P.S マニュアル読んでもわかんねーよヽ(`д´)ノウワァァァァン
873nobodyさん:04/08/05 08:43 ID:???
874536:04/08/05 09:04 ID:???
おはよー。今日もマニュアルひき頑張ろうぜ。

>>869
>>871
お前ら言い過ぎw
875nobodyさん:04/08/05 09:06 ID:???
while ($A != 0 and $B != 0)
876軟式PHP:04/08/05 09:07 ID:???
>>874
他スレでの名前になってた。・゚・(ノ∀`)・゚・。
877nobodyさん:04/08/05 09:10 ID:???
クッキーにa'b"cという文字を保存してそれを出力するとa\\\\\\\'b\\\\ってなってしまうのですが
どうしたらいいでしょうか?
878nobodyさん:04/08/05 09:14 ID:???
$data = file($gdata);
$count = count($data);
$fp = fopen($gdata,"w");
flock ($fp,LOCK_EX);
for ($x;$x<=$count;$x++){
list ($idx,$passx,$lvx,$expx,$chax,$winx,$losex,$hpx,$atcx,$defx,$masx,$dexx) = split( ",", $data[$x]);
if ($x == $i2){
$expx = $expr;
$winx = $winr;
$losex = $loser;
fputs($fp, $data[$x]);

}elseif($x==$i3){
$expx = $exprr;
$winx = $winrr;
$losex = $loserr;
fputs($fp, $data[$x]);
}else{
fputs($fp, $data[$x]);
}
fclose ($fp);
}

データが消えてしまう・・・
何がおかしいんだろうか・・・
879軟式PHP:04/08/05 09:14 ID:???
magic_quotes_gpcをOFFにしてみれ。
880軟式PHP:04/08/05 09:19 ID:???
とりあえず添削を。
for ($x;$x<=$count;$x++)
$x=0ぐらいしる。

で、データが消えてしまうってどういう意味で言ってるのか分からないけど
fopen($gdata,"a")でやってみれ。
881軟式PHP:04/08/05 09:22 ID:???
あとsplit(",",rtrim($data[$x]));も試してみちょくれ。
882nobodyさん:04/08/05 09:49 ID:???
クッキーに保存されたa"b'cを抽出して出力するとa\\\\ になってしまうのはなじぇ?
883軟式PHP:04/08/05 09:56 ID:???
>>882
エスケープされるから( ´−`)
884nobodyさん:04/08/05 09:59 ID:???
どうやったらうまく出力できるでしょうか?
885nobodyさん:04/08/05 10:15 ID:???
magic_quotes_gpcをoffにすることは できません。
で、stripslashesを使ってもうまくいきません。。。
886nobodyさん:04/08/05 10:21 ID:???
>>862
懐かしいよ・・
887nobodyさん:04/08/05 10:23 ID:???
>>886 >>862
学校の先生が言ってた
888軟式PHP:04/08/05 10:26 ID:???
>>885
\だけ消したいならreplace使って消すといいよ。
889nobodyさん:04/08/05 10:35 ID:???
>>885
>>magic_quotes_gpcをoffにすることは できません。
他の処理で使うからかな?それともoffにしたくてもphp.iniをいじれないからかな?

後者なら.htaccessで
php_flag magic_quotes_gpc Off
これも.htaccessが使用可能だければだけど
890nobodyさん:04/08/05 10:38 ID:???
はい。クッキーにはa'b"cが保存されていて
$a = str_replace("\\","",$a);とやってみましたが
表示される文字はa'b になってしまう。。だぶるくおーてーしょん以降が表示されないのです。。
891nobodyさん:04/08/05 10:49 ID:???
除去してもいいんじゃない?
$a = str_replace("\"", "", $a);
892nobodyさん:04/08/05 10:52 ID:???
( ´゚д゚`)えーーー
除去でいいの?
なんか不安なんだけど
クッキーの文字自体に\があった場合はどうするのよ
893nobodyさん:04/08/05 11:03 ID:???
ちなみにみなさんはフォームからの入力データをクッキーに保存させるときってどうしてますか?
894nobodyさん:04/08/05 11:10 ID:???
俺は全てDB任せですが
895nobodyさん:04/08/05 11:13 ID:???
>>894
クッキーもDBにお任せですか?
896nobodyさん:04/08/05 11:14 ID:???
>>895
クッキーには最低限の情報を与えます
例えばID
あとはクッキーからIDを読み取り、そのIDの情報をDBから取り出します
897nobodyさん:04/08/05 11:15 ID:???
ID変えたら終わりだろ
898nobodyさん:04/08/05 11:18 ID:???
>>896
ホームラン級のバカだな
899nobodyさん:04/08/05 11:18 ID:???
>>893
大事な情報なら自作暗号化アルゴリズムで暗号化します
900nobodyさん:04/08/05 11:19 ID:???
>>896
コスモを感じる
901nobodyさん:04/08/05 11:24 ID:???
あとは空気から雰囲気を読み取り、その雰囲気の情報を経験から取り出します
902nobodyさん:04/08/05 11:25 ID:???
COOKIE嫌いなん?(俺も嫌いだが…)
PHP3か?
4ならSESSIONでも良いじゃないか。
903nobodyさん:04/08/05 11:37 ID:???
俺もクッキーは大嫌いだね。
セッションが一番いい。
まぁセッションもクッキー使ってるわけだけど
904nobodyさん:04/08/05 12:27 ID:???
何で嫌いなん?の何が嫌いなん?
905882:04/08/05 12:38 ID:???
どうやっても無理でしたので896さんの方法でやることにします。
結果は同じなのでま、いいか
906nobodyさん:04/08/05 12:43 ID:???
>>892
urlencodeでも汁
907nobodyさん:04/08/05 12:45 ID:???
>>905
これでどう?
if (get_magic_quotes_gpc()) {
$a = stripslashes($a);
}
908nobodyさん:04/08/05 12:48 ID:???
>>878
}
fclose ($fp);
}
  ↓
}
}
fclose ($fp);
909nobodyさん:04/08/05 12:54 ID:???
>>905
"を&quot;に変換する。
910nobodyさん:04/08/05 12:55 ID:???
>>907無理です。。
\\\がついてくる

ちなみにIDだけ保存してDBから取り出すと
cryptされたパスワードが抽出されてしまってだめでした。。
911nobodyさん:04/08/05 13:08 ID:???
>>910
907のstripslashesってまんまその為のものなんだが・・
ttp://jp.php.net/manual/ja/function.stripslashes.php

クォート取り除いた変数名と、クッキーに書き込んでる変数名が違うなんてことはないよね?
912nobodyさん:04/08/05 13:27 ID:dWrkED0y
PHP4で処理の途中で何秒間か止めたりする方法って
ありませんでしょうか?
913nobodyさん:04/08/05 13:27 ID:???
クッキーに保存されてる変数$aのデータはクオート取り除いたデータです
クッキーにはa%27b%26quot%3Bcと保存されていますので。。
で、$aをクッキーから抽出して表示するとa\\\'bと。。こうなってしまうのです
914nobodyさん:04/08/05 13:32 ID:???
>>912
寝ろ
915nobodyさん:04/08/05 13:33 ID:???
>>912
すりーぷ
916nobodyさん:04/08/05 13:35 ID:???
そういえば
眠れない時に羊を数えるのってsheepがsleepに似てるからなんだよ
917nobodyさん:04/08/05 13:45 ID:UeFJsakm
>>904
クッキー使えなくしているクライアントが結構いる。
クッキーからIEの穴つつけたりした。
918912:04/08/05 14:04 ID:dWrkED0y
>>914 >>915
ありがとうございました。
919nobodyさん:04/08/05 14:07 ID:???
>>913
Windowsで動かしてます?
Shift-JISなら入力データをEUC-JPに変換、クォートしたらクッキーに書き込み、
クッキーから抽出したらShift-JISに戻して表示でどうです?
$a = mb_convert_encoding($a, "EUC", "SJIS");
920nobodyさん:04/08/05 14:51 ID:???
自分自身のファイル名(index.phpなど)を取得できる関数ってありますか?
921nobodyさん:04/08/05 14:59 ID:???
>>920
var_dump($_SERVER);
922nobodyさん:04/08/05 15:04 ID:???
>>920
__FILE__
923nobodyさん:04/08/05 15:06 ID:???
>>921-922
どうもです
924nobodyさん:04/08/05 15:12 ID:???
>>916
へぇ〜 へぇ〜 へぇ〜 
3へぇ〜 
925nobodyさん:04/08/05 15:17 ID:???
Unsupported operand types なんですが以下の変更で起きました (T-T)

$list1、$list2 ともに配列です。

$all = array_merge($list1, $list2);
  ↓
$all = $itemList1 + $itemList2;

なにが原因と考えられるでしょうか?
926nobodyさん:04/08/05 15:20 ID:???
>>916
今日の一番にします。
927925:04/08/05 15:36 ID:???
自己解決

$list1 or $list2 が array の 他に undef の場合があった。

array_merge()は undef でもマージできるけど
+ だと 型違いでマージできず。
928nobodyさん:04/08/05 19:28 ID:???
セッションってやたら便利だけど
キャッシュが効かないのが嫌。仕方ない?
929nobodyさん:04/08/05 20:01 ID:???
>>928
そんなおまいのためにsession_cache_limiterですよ
930nobodyさん:04/08/05 20:09 ID:???
931nobodyさん:04/08/05 20:34 ID:4UXeuveB
質問です。

今、ラジオボタンでの入力を取り出すプログラムを書いてるんですが、
name属性が可変の場合、取り出す時にどうやって指定すればいいのでしょう?

具体的には下のようなソース。
<input type="radio" name="<?php echo $groupCode ?>" value="rw" >
<input type="radio" name="<?php echo $groupCode ?>" value="r" >
<input type="radio" name="<?php echo $groupCode ?>" value="n" >

↑で取り込んだやつを、
if( $groupCode == "rw" ){
   $readStatus = "T";
   $writeStatus = "t";
}

のような感じで取り出したいのですが、
if文の中が、文字列の比較になってしまって、
どうしても取り出せないんです。

どなたかアクロバットなやり方を知りませんか?


932nobodyさん:04/08/05 20:47 ID:???
こんな感じでどうですか

<input type="radio" name="groupCode" value="rw"<?php if ($groupCode== "rw") { print " checked"; };?>>
<input type="radio" name="groupCode" value="r"<?php if ($groupCode== "r") { print " checked"; };?>>
<input type="radio" name="groupCode" value="n"<?php if ($groupCode== "n") { print " checked"; };?>>

if( $groupCode == "rw" ){
   $readStatus = "T";
   $writeStatus = "t";
}
933nobodyさん:04/08/05 20:58 ID:???
あ、すまぬ可変って内容でしたね・・ちょっと寝ぼけてまつ
hiddenで別に渡せないかなぁ?
934nobodyさん:04/08/05 21:09 ID:???
・・・hiddenでも出来ないかな、これでどうかな?

if( ${$groupCode} == "rw" ){
   $readStatus = "T";
   $writeStatus = "t";
}

何度も書き込んですまぬ、そろそろ寝よう・・
935932:04/08/05 21:20 ID:???
>>934
無理ですー。

うーむ、全面的につくり変えないとあかんのかな・・・
936nobodyさん:04/08/05 21:21 ID:???
$groupCode = "rw";
$data = "groupCode";
echo $$data; //rw
937932:04/08/05 21:32 ID:???
>>936
できましたー、こんな単純なことでいいんですねー。
まじで、ありがとうございます。

938nobodyさん:04/08/05 21:34 ID:???
$groupCode = "A00";
$A00 = "rw";
echo $$groupCode; //rw
実は逆だった…
939nobodyさん:04/08/05 22:24 ID:???
なんども、出ている質問かもしれませんけど、
PHP version4.2.xで動いていたソースが4.3.xで動かなく
なる場合はどうすればいいんですか?
940nobodyさん:04/08/05 22:33 ID:???
>>939
ソースを書き換えるか4.2.xで永遠に動かし続ける。
941nobodyさん:04/08/05 22:36 ID:???
どう書き換えればいいですか?
942nobodyさん:04/08/05 22:40 ID:???
動かなくなったところの関数等をgoogleとかで調べて書き換えればいいと思うよ。
943nobodyさん:04/08/05 22:40 ID:???
俺っちには説明できない内容と量だからhttp://www.php.gr.jp/
でRelease Announcementの和訳でも見てくれ。

もしくは説明できる人説明よろろ
944nobodyさん:04/08/05 23:07 ID:???

  い  夏
  ん  厨
  じ  い
  ゃ  っ
  ん  ぱ
     い
945nobodyさん:04/08/05 23:18 ID:sAzaKBea
NTT代理店がメアド晒し・スパムのマニュアル・社内掲示板・会議予約を一般公開!(社外秘丸見え)
しかも出会い系やアダルトグッズの販売も。今日行われたちんぽ会議の謎とは・・・

【突撃】広告部隊作業マニュアル公開中5【OFF】
http://ex7.2ch.net/test/read.cgi/news4vip/1091710263

まとめサイト
ttp://www.geocities.jp/syupam_chinpou/index.html
946nobodyさん:04/08/05 23:20 ID:???
ファイルのアップロードのやり方がわかりません。
<form enctype="multipart/form-data" action="_URL_" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000000">ファイル<input name="userfile" type="file">
</form>
としたのですが、どこにうpするか決められるのですか?
(送信ボタンは別にあるものとして・・・)
947nobodyさん:04/08/05 23:22 ID:???
>>946
マニュアルの目立つ所に書いてあるだろ。
948946:04/08/05 23:23 ID:???
すまん、マニュアル読んでわかんなかったから
ここで聞いたんだが・・・もう一度見てくるぽ
949nobodyさん:04/08/05 23:28 ID:???
ttp://jp.php.net/manual/ja/features.file-upload.php
内容を理解できなかったって言うならやばいぞ。
950nobodyさん:04/08/05 23:29 ID:???
$_FILES['userfile']['name'];
の使い方が理解できんのよ・・・
951nobodyさん:04/08/05 23:33 ID:???
$_FILES['userfile']['name']はアップロードしたファイルの名前だ。
サンプルを見て試して手加えて身体で覚えろ。
マヌアル10回声を出して読んで来い。
952nobodyさん:04/08/05 23:37 ID:???
>>946
アップロードされる場所の話ならむしろこっちかな。
http://jp.php.net/manual/ja/ini.sect.file_uploads.php

>>950
理解できないなら使わなければいいじゃない。
つーかクライアント側の元ファイル名なんて使いたいとも思わないな。
どんな文字入ってるか分からんし。
953946:04/08/05 23:53 ID:???
Warning: move_uploaded_file(***): failed to open stream: Permission denied in /usr/home/free/home/phpworld/public_html/pu/upload.php on line 8
Warning: move_uploaded_file(): Unable to move '/var/tmp/phpxgdg4W' to '***' in /usr/home/free/home/phpworld/public_html/pu/upload.php on line 8
954nobodyさん:04/08/05 23:55 ID:???
>>953
で、訳してみたらどういう意味だった?
955nobodyさん:04/08/06 01:31 ID:ZX7YO8MK
おれもあぷろだ作ったけど、普通は何度も実験して覚えるもんだがなぁ
結果だけ急いでると勉強にならんよ
956nobodyさん:04/08/06 02:56 ID:OcQEeCf3
上げての質問お許しを。

phpプログラムを複数改造しましたが古い方のものと
同じフォルダに入れてしまいました。
タイムスタンプもほぼ同じで区別がつきません。
そこで、例えばa.phpとa'.phpを比べて内容を比べる良い方法はありませんか?
比較する中で違う部分を反転表示させると言った便利な技はないでしょうか?
たくさんあるので途方に暮れています。
957nobodyさん:04/08/06 03:05 ID:???
スレ違い、というか板違い。
958nobodyさん:04/08/06 03:20 ID:???
>>956
diff
959nobodyさん:04/08/06 08:11 ID:???
を。そろそろ次スレの季節じゃ・・?
>>956
OS書いてないってことは、PHPを使って比較したいってことか?
http://www.vector.co.jp/vpack/filearea/win95/util/text/diff/index.html
960nobodyさん:04/08/06 08:32 ID:Herwsld0
皆さん、はじめまして。
最近、PHPを学習してる者ですが正規表現の所でつまづいて困っています。
半角英文字3文字と5桁の数字を組み合わせたものを
if文判定で否定したいのですが
  
if(eregi("^[^(abc[0-9]{5}])",$hoge))
{
処理A
}
else
{
処理B
}
でやってもうまくいきません。どなたか分かる方ご教授ください。
よろしくお願いします。
961nobodyさん:04/08/06 08:33 ID:???
diff
962nobodyさん:04/08/06 08:36 ID:???
>半角英文字3文字と5桁の数字
ここが分からない。
つまり合計8文字になるってことか?
なら
if ( eregi("(^[a-zA-Z0-9]{8}$)",$hoge) && eregi("(^[a-zA-Z]{3}$)",$hoge) )
963962:04/08/06 08:38 ID:???
eregに訂正してちょ
964軟式PHP:04/08/06 09:07 ID:???
なぜいまだにeregを使うのか俺には理解できぬ。
965960:04/08/06 09:13 ID:Herwsld0
>>962
すいません。説明不足でした。
最初の英数3文字abcは固定で、続く数字5桁は変動ありにしたいのです。
abc11111,abc22222,abc12345とこんな感じならOKという感じです。
総文字数は>>962さんの言うとおり8文字です。
これを否定したいので
もし入力データが上記のようだったら処理B,上記の形式を取ってなかったら
処理Aというような感じにしたいのです。
拙い説明で本当に申し訳ないのですが、どうかよろしくお願いします。


966nobodyさん:04/08/06 09:22 ID:???
PHP超初心者で<(__)>ペコリ
http://pc5.2ch.net/test/read.cgi/tech/1057324268/75
967nobodyさん:04/08/06 09:27 ID:???
if(!ereg("^[abc]{3}[0-9]{5}$",$hoge)){
echo "A";
}else{
echo "B";
}
968軟式PHP:04/08/06 09:27 ID:???
>>965
while(;;)
{
if( preg_match("/(^[a-zA-Z0-9]*$)/",$hoge,$match) )
{
print $match[0];
}
}
969960:04/08/06 09:49 ID:Herwsld0
皆さん。出来ました。
本当に有難うございました。
970nobodyさん:04/08/06 10:25 ID:???
>596
そういうツールを PHP で書いてみたら?
それなりのものができたらお手本として diff の
ソースを見てみるといい。
971nobodyさん:04/08/06 12:01 ID:???
Spreadsheet_Excel_Writer
ttp://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.php
で数値に色をつけたり大きさを変えたり sum() は使えるようになりました。
ところでグラフを描く方法はないのでしょうか?
# jpGraph なら画像で作れますが、Excel で作りたいのです。
972970:04/08/06 13:00 ID:???
ごめんよう。レス番まきがえた。

>596 でなくて >956 ですた。
973nobodyさん:04/08/06 13:11 ID:???
974nobodyさん:04/08/06 13:41 ID:sHfe9a+G
./img/xxx/zzz/123.jpg

と言うファイルがあってそれをGDで自動でサムネイルを作っているのですが。
サムネイル作成時に、./img/xxx/zzz/のパーミッションを777に変えないと
サムネイルが作成出来ないですが、
この./img/xxx/zzz/を自動で777に変えたいのですが、
何か方法はないでしょうか?
explodeを使って切り出しして後でそれぞれのディレクトリー名を繋げればいいのですが、
./img/xxx/zzz/ は毎回フォルダー名が変わるので
./img/xxx/zzz/123.jpgだと最後の「/」部分で前と後ろを分解する方法はないでしょうか?
よろしくお願いします。


975軟式PHP:04/08/06 13:46 ID:???
chmodで変える。basename,dirname使う。おけ?
976nobodyさん:04/08/06 13:52 ID:???
>>975
さっそくありがと!
chmodは分かるのでdirnameとbasenameで調べてみます!
どもでした!
977nobodyさん:04/08/06 14:21 ID:???
普通にコピーしてやったのですが必ず下記の文が出てしまいます

ファイルアップロード攻撃をされた可能性があります。デバッグ関連情報:
Array
(
[userfile] => Array
(
[name] => MapEditor.zip
[type] =>
[tmp_name] =>
[error] => 2
[size] => 0
)

)
978軟式PHP:04/08/06 14:38 ID:???
979977:04/08/06 14:41 ID:???
>>978
スマン、読んでも理解不能・・・
980nobodyさん:04/08/06 14:48 ID:???
>>977ではエラーコードが2だと出ている。
その上で>>978を読めば分かると思うんだけど・・・

分からないのならもっと基本的なところから始めたほうがいい。
981977:04/08/06 14:52 ID:???
エラーの数が2個かとオモタヨ煤i; ̄□ ̄)
982nobodyさん:04/08/06 14:55 ID:???
成功(・∀・)と思いきや

Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 2924 is not allowed to access / owned by uid 0 in 〜

ファイルアップロード攻撃をされた可能性があります。デバッグ関連情報:
Array
(
[userfile] => Array
(
[name] => Masic.html
[type] => text/html
[tmp_name] => /var/tmp/phpddOVVd
[error] => 0
[size] => 13291
)

)

とりあえず吊ってきます ||
983軟式PHP:04/08/06 15:05 ID:???
ああ、そこのサーバーじゃ無理かもな。セーフモードかかってるよ。
984nobodyさん:04/08/06 15:07 ID:???
AAACAFEの糞やろーーーーーうわああああああああああああああん!!!
985nobodyさん:04/08/06 15:10 ID:???
そろそろ次スレ建てまつか
986982:04/08/06 15:26 ID:???
って・・・画像うpのCGI使えるんだからうpできるでしょ?
987nobodyさん:04/08/06 15:30 ID:???
(ノ∀`)アチャー ほんと、基本からやれや
988軟式PHP:04/08/06 15:31 ID:???
PHP側の制限であってperlの制限ではない。
989nobodyさん:04/08/06 16:24 ID:???
知ったかは分からないエラーを全てセーフモードのせいにするようだ
990976:04/08/06 16:33 ID:???
うんむ・・
$image_dir_path = dirname($image_path);/*元イメージ格納ディレクトリーパス*/
$mkdir_path = $image_path.$mkdir_name;/*サムネイルを作成するディレクトリーまでのパス*/
mkdir($mkdir_path , 0777);
chmod ($mkdir_path , 0777);/*←これが無いとmkdirでは755にしかならなかった、*/
で一応目的のディレクトリーを作ってサムネイルも作成できるのだけど
$mkdir_path へディレクトリーを作るにはその上層のディレクトリーのアクセス権を777にしないと
行けないので、mkdirの前にchownでchown($xxx , www);
としたけど、
chownするのはそのまた上層にwwwへのアクセス権777が必要みたい・・・
結局、サムネイルを作成するディレクトリーまですべてwwwをオーナにして777にしないと
いけない状態。。
どうすればいいんだろうか。。
991nobodyさん:04/08/06 16:36 ID:???
>>989
原因や解決策がわかるなら答えてみろよ。
できねーんだろ?
ならセーフモードのせいかどうかわからないってことだ。
つまりお前みたいなやつが一番の知ったか。
992nobodyさん:04/08/06 16:40 ID:???
【次スレ】

【PHP】質問スレッドpart20【php】
http://pc5.2ch.net/test/read.cgi/php/1091774679/
993 :04/08/06 16:43 ID:???
993
994軟式PHP:04/08/06 17:01 ID:???
>>991
いちゃもんつけたいだけのアホみたいだから放っておいたほうがいいよw
995nobodyさん:04/08/06 17:02 ID:???
995
996nobodyさん:04/08/06 17:29 ID:???
↑995

. .996

↓997
997nobodyさん:04/08/06 18:02 ID:???
>>991
( ´,_ゝ`)
まぁそうやって逃げてればいいよ。
998nobodyさん:04/08/06 18:04 ID:???
XREAで普通に画像うpできてるけど・・・
セーフモードで

>>983釣り?
999nobodyさん:04/08/06 18:06 ID:UNSVOLia
983は自分にセーフモードをかけてる予感♪
1000nobodyさん:04/08/06 18:07 ID:UNSVOLia
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。