トップページ⇒php
1001コメント312KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん04/07/16 07:12ID:KvHeypq/
・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


抜けているものがあったら補足願います
0002nobodyさん04/07/16 07:13ID:KvHeypq/
過去スレ
【PHP】質問スレッドpart18【php】
http://pc5.2ch.net/test/read.cgi/php/1087191395/
000399704/07/16 08:08ID: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

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

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

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

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

として確認。
XSS が可能かどうかはユーザが使用しているブラウザによるけど。
IE は XSS が可能だったかな。
000799404/07/16 10:36ID:???
どう頑張ってもダメだったからsudoで強引に実行するようにしたよ
セキュリティうんこ過ぎヌルポ(゚д゚)<シメジ
0008nobodyさん04/07/16 11:12ID:VHr1659r
>>7
がっ
0009nobodyさん04/07/16 12:09ID: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をどう定義すればよいのかよくわかりません。どなたか詳しく教えていただけないでしょうか?
0010nobodyさん04/07/16 12:33ID:???
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) / ネットワークワークステーション / 開発ツール / ドキュメント
0011nobodyさん04/07/16 13:09ID:???
>>9
Apache 1.3.x との組み合わせで起きるバグです。
ttp://bugs.php.net/bug.php?id=29132
ttp://news.php.net/php.internals/11223
00121104/07/16 13:10ID:???
番号間違えた。
>>10
0013nobodyさん04/07/16 13:26ID:???
PostgreSQLなどを絡めたプログラムでトランザクションのテストを
したい時は皆さんどうされてます?複数のPCで同時に送信!とか
しか思いつかないんですが○| ̄|_
0014 ◆.jC7ANgFY. 04/07/16 14:02ID:???
私はやったことないですが、

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

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

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

1行目でちょうどよい時間(次の偶数分00秒を決定する)
2行目でそのときまでsleepする。
運悪く偶数分00秒とかそういうのにあたらなければ大丈夫なはずです。
誤差は1秒ほどありますが、
0016nobodyさん04/07/16 14:05ID:xpSWVZ91
質問です。
touchなどでファイルを作成すると所有者がapacheになります。
chownは無効なので他に変更する方法はないでしょうか?
今のところ umask(0); で動作は問題ありませんが、
何か手がありましたらお願いします。
レンタル鯖 Linux Apache/1.3.29 (Unix) PHP/4.2.4-dev safe_mode:off
0017nobodyさん04/07/16 14:21ID:???
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\" )となります。
0018 ◆.jC7ANgFY. 04/07/16 14:25ID:???
>>16
execやvirtual関数を使いcgiを通してファイルを作成する方法しかないようです。
# execでログインすることもできるかも・・・
00191004/07/16 14:26ID:???
>>11
ども。
00201704/07/16 14:29ID:???
enctype忘れてました;;すいません
0021nobodyさん04/07/16 15:15ID:???
>>14
なるほど、その手法でトランザクション処理のテスタークラスなんか
作ってみて実験してみたいと思います。ありがとです(*´ω`*)b
00221604/07/16 15:24ID:vSsgWICn
>>18
レスありがとうございます。
その方向で調べてみます。
0023nobodyさん04/07/16 16:29ID:???
質問です。

変数名を得る方法は無いでしょうか?
0024nobodyさん04/07/16 16:32ID:???
>>23
ある
0025 ◆.jC7ANgFY. 04/07/16 17:21ID:???
>>23
こういうこと?
print_r($GLOBALS);
0026nobodyさん04/07/16 17:27ID:???
>>25
get_defined_vars
0027nobodyさん04/07/16 17:42ID:???
正規表現スレから誘導されてきました。
全角・半角を無視して検索文字列をハイライトするいい方法ありませんかね?
パフォーマンスが悪いのは承知で、
$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のオプションで全角半角を無視ってのできないかなあ。
0028nobodyさん04/07/16 17:43ID: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を上書き
とやったのですが他に何かやらなければならないことってあるんでしょうか?
0029nobodyさん04/07/16 17:46ID:3Z+JZGJD
>>28
php4ts.dllをC:\Windows\system32にコピーしてみ
0030nobodyさん04/07/16 18:01ID:23o0JgNK
>>29
�d!
直りました
0031nobodyさん04/07/16 18:08ID:LgkOLcz8
質問です。
サーバ上にある●●.htmlというファイルを、
毎日0時にbackup_●●.htmlという風にコピーしてバックアップをとりたいのですが、
タイマーみたいに時間指定でプログラムを動かすにはどうしたらいいでしょうか?
0032 ◆.CzKQna1OU 04/07/16 18:19ID:???
>>31
cronとかじゃなくて?
0033nobodyさん04/07/16 18:35ID:???
>>32
調べてみます!
0034 ◆.jC7ANgFY. 04/07/16 18:49ID:???
>>33
cronを使えるサーバーは少ないのでこういうのはカウンタに連動させたりするのがベスト。
0035nobodyさん04/07/16 19:03ID:???
>>34
目的がバックアップと言ってるのにそれのどこがベストなんだよ。
0036 ◆.jC7ANgFY. 04/07/16 19:04ID:???
>>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;}
0037nobodyさん04/07/16 19:11ID:ctj/r83y
>>33 >>34

Windows だって タスク・スケジューラー や
Cygwin 版の cron (+cygrunsrv) で できるんではないでしょうか
0038nobodyさん04/07/16 19:14ID:ctj/r83y
>>37
>>34 は cron が自由に設定出来るようなプロバイダ鯖は、
あまり無いといいたいと 見た
0039nobodyさん04/07/16 19:19ID:???
日本語はちょっと不自由ってことか。
0040nobodyさん04/07/16 19:30ID:???
>>37=38
貴方以外はみんなわかってたよ
0041nobodyさん04/07/16 19:33ID: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);
}
0042nobodyさん04/07/16 19:49ID:???
質問じゃないが、PHPの脆弱性発見だとさ。
知っている人なら対策コード書いてるor本体アップデートしてると思うがいちおうURL貼ります。

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

じゃないのか?
0048Imo ◆.jC7ANgFY. 04/07/16 21:46ID:???
$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時ごろにバックアップできるぞ!
0049nobodyさん04/07/16 22:06ID: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に戻した
0050カポコン04/07/17 02:48ID:???
ttp://f13.aaacafe.ne.jp/~munge/
HTML化致しました。
00511704/07/17 12:04ID:???
PHP5で
$_REQUEST = array_map('htmlspecialchars',$_REQUEST);
すると「〜」が、?になるのですが仕様の変更ですか?
PHP4の時でもなったいたのだろうか・・記憶にないのですが。
00525104/07/17 12:05ID:???
すると「〜」が &#12316;に
0053カポコン04/07/17 14:50ID:???
>>48
header("Pragma:no-cache");かclearstatcache()
0054nobodyさん04/07/17 16:18ID:cAUyli63
$mail_data=Array();

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

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

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

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

こんなことを、試してみましたがうまく抜き出せません。
PReg_Grep関数じゃだめなんでしょうか?
0059nobodyさん04/07/17 19:11ID:???
>>58
やり方は合ってるよ。preg_grepで問題なし。
試しに手元のメールデータを突っ込んでみたが問題無く動く。
それで動かないなら、$mail_dataが想定と違うんじゃないかな?
$mail_dataを一行ずつ表示して確認してみたら?
00605804/07/17 19:39ID:cAUyli63
>59
ごっそり、連なってる、データ郡からとってきてくれるのかと思いました。
StrTokでばらばらにしてやってみます。
0061nobodyさん04/07/18 11:12ID:yQjoCnlA
namazuを導入しようと考えているんですが
ひっかかるはずの検索ワードを打っても絶対に0件ヒットしました
としか出てくれません。
この場合、どこかの設定がおかしいのでしょうか?
以下のサイトを隅から隅まで見てみましたがそれらしき情報はありませんでした。
http://www10.plala.or.jp/miyazawa/namazu/
http://homeserver-streaming.com/Trouble/namazu/
0062nobodyさん04/07/18 11:46ID:???
>>61
スレ違い
0063nobodyさん04/07/18 11:53ID:FJ1yfCK5
<?php
include 'http://192.168.0.1/test.php?no=001';
?>
とやっても no=001 の部分がどうしても反映されません。
普通にブラウザでhttp://192.168.0.1/test.php?no=001にアクセスすると反映されています。
includeで引数を渡す方法ってないですか?
マニュアルにはこれで出来るって書いてあるのだけれども。
0064nobodyさん04/07/18 12:54ID:???
>>63
マニュアルに書いてあるんだけれども、OSとPHPのバージョンの条件はクリアしてるの?
0065nobodyさん04/07/18 13:43ID:???
>>63
俺はできたよ(当方Apache/2.0.48 (Win32) PHP/4.3.4)
>>64の言うとおり問題はOSとPHPのバージョンだと思う。
0066nobodyさん04/07/18 14:30ID:???
>>65
4.3.8にバージョンうpした方がいいんでない?
0067 ◆JirmzAivjs 04/07/18 14:32ID: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がクッキーで発行されているのがネックなんですが、どうにかする方法はないのでしょうか?
0068nobodyさん04/07/18 16:24ID:???
>>67
ASPから発行されたクッキーをPHPから渡してあげればいいのでは?
別の言い方をすると、セッションが継続する間中 ずっとPHPで面倒を見るってことだけど。
0069nobodyさん04/07/18 17:31ID:???
このサイトのように同じページにいろいろなページを
表示させるにはどうすればよいですか?
ttp://www.tkool.net/index.php
0070nobodyさん04/07/18 17:37ID:???
マルチタスク
00716904/07/18 17:47ID:???
>>70
初めて聞いた言葉だ・・・
0072nobodyさん04/07/18 18:16ID:ajil2/nN
fedora core 1 に最初から入っていたPHPを4.3.6から4.3.8にしようと思って
ソースをコンパイルしてインストールしたんですが
$ php -v
の結果は4.3.8なのにサーバ上でphpinfo()を表示させると4.3.6のままです
どこがダメなんでしょうか
0073nobodyさん04/07/18 18:17ID:???
会員制画像アップローダで画像をファイルとしてアップロードした
場合、絶対パスでアクセスされてしまう可能性があると想うのですが、
みなさんはどうされていますか?。
拡張子の変更などをしても内容のデータがそのままであれば見るのは
容易だと想うのです。
画像データを暗号化し画像を表示する時にPHP経由で複合化して
表示するか、またはSQLなどに放り込んでしまうか、サーバーに拡張子
によるアクセス拒否が出来るならそれを使う等しか思い付かないのです
が他に良い方法はあるのでしょうか?。
0074nobodyさん04/07/18 18:31ID:???
>>73
君は、.htaccessを知らないと
0075nobodyさん04/07/18 18:39ID:???
>>72
どういう風にインストールしたか秘密にしているあたりがダメダメだね
0076nobodyさん04/07/18 18:51ID: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
0077nobodyさん04/07/18 18:52ID: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に書いてないんだけどなんでかな
00787304/07/18 19:00ID:???
>>74
今は自前鯖なんで、httpd.confに書いてたり^^;。
ゴメンヨ・・・。

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

<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になるということです。
どうしてこうなるんですか?
0085nobodyさん04/07/18 22:07ID:???
>>84
独特なformだね
00867204/07/18 22:22ID:???
>>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はどこ行っちゃったんでしょうか
0087nobodyさん04/07/18 23:16ID:???
>>84
2バイトが二つで4でしょ
0088nobodyさん04/07/18 23:26ID:???
>>87
ハァハァ(*´д`*)━( *´д )━(  *´)━(  )━(゚   )━(Д゚  )━( ゚Д゚ )ハァ?
0089nobodyさん04/07/18 23:55ID:???
>>84
あ行が怪しいぞ
0090nobodyさん04/07/19 00:27ID:eJnEJcBx
PHPUnit2の使い方がわからん・・・
だれかおしえてください
0091nobodyさん04/07/19 00:52ID:qsqOem7W
phpでmds的なファイル分割形式を用いたUPローダー作成を考えているのですが
実現可能でしょうか?どこか参考になるサイト等ありましたらお教えください。
0092nobodyさん04/07/19 09:07ID:???
初歩的な質問で申し訳ないが
掲示板をつくり、1つの記事を削除する場合は
その記事意外を再度上書きすればいいんだよな?
0093nobodyさん04/07/19 09:25ID:???
>>92
ソーダ 
0094nobodyさん04/07/19 10:26ID:zI9w6JFi
質問です。バージョンはphp-4.3.3です。

$a = array('田中太郎<>12<>りんご<>','山田太郎<>16<>なし<>','吉田太郎<>12<>すいか<>');
のような配列を<>で分割した2番目の要素(12,16,12)でソートするにはどうすればいいんですか?
ソート後は
山田太郎:16才:好物なし
田中太郎:12才:好物りんご
吉田太郎:12才:好物すいか
のように2番目の要素(12,16,12)以外も表示したいんです。
0095nobodyさん04/07/19 11:04ID:???
PHPをちょっと勉強してみようかなと思い
ttp://www.yumenara.com/pwp/
のサイトを読んで
現在の時刻を表示させる<?php echo date("n月j日") ?>を入れてみたんですが
何故か文字化けして「79」としか表示されません
どうすればいいんでしょう?
PHPバージョンは4.3.8でサーバーはApache2.0.49
OSはWinXPです
ちなみにp2というPHPで作られた2chビュアーは文字化けせずに正常に表示されます
00969504/07/19 11:04ID:JjQNbyQZ
上げ忘れました
すいません
0097nobodyさん04/07/19 11:06ID:???
普通は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);
0098nobodyさん04/07/19 11:18ID:???
>>95
文字化けって分かってるなら文字コードの設定も書かないと。
というか、書いているうちに原因に気づくんだろうけどねぇ。
http://www.php.net/manual/ja/ref.mbstring.php
0099nobodyさん04/07/19 11:25ID:???
>>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);
01009504/07/19 11:35ID:JjQNbyQZ
>>98
mbstringは導入してました
php.iniの設定も色々変えてみましたが直りませんでした
全角の文字が表示されていないようなんですが…(全て全角で入力すると何も表示しませんでした)
0101nobodyさん04/07/19 11:48ID:???
>>95 >>100
なんでここできいてんだ?
0102nobodyさん04/07/19 11:49ID:???
>>95 >>100
なんでわざわざあげてんだ?
01039504/07/19 11:51ID:???
>>101
質問スレなんで…

>>102
ID出さなくてもいいんですか?
0104nobodyさん04/07/19 12:00ID:???
>>100
だからどういう設定になってるのか訊いてるんだよ
日本語解らないの?
0105nobodyさん04/07/19 12:04ID:???
>>103
文字エンコーディングの設定はどうなってるの?
ソースのそれはどうなの?
やらなきゃいけないのは正しい設定にすることで、
闇雲に変更することじゃない。
どうしたらいいのか分からない場合は>>98のEUC-JPの設定にして
ソースもEUC_JPで書くのがお勧め。
01069504/07/19 12:19ID:???
>>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>
0107nobodyさん04/07/19 12:29ID:???
>>106
php.iniの設定はどうなってるの?って訊いてるんだけど
釣りか?
01089504/07/19 12:38ID:???
>>107
ttp://www.php.net/manual/ja/ref.mbstring.php
これのSJISユーザ用のphp.iniの設定です
0109nobodyさん04/07/19 12:45ID:???
>>108
・・・。
アンタさっきphp.iniの設定をいじったって言ってたけど
今はそのページの内容に戻ってるって事かい?

自分の環境のphp.iniのmb_string関連の部分をコピペしろよ
01109004/07/19 12:48ID:???
ぐぐったら見っけた。
ダウンロードした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

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

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

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

$page = file($index);
?>

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

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

PHPのページの一部に他のページを貼り付けるということです
012311404/07/19 14:58ID:???
デキター!
回答してくれた方ありです!
0124nobodyさん04/07/19 16:13ID:???
夏ですなぁ
0125nobodyさん04/07/19 17:06ID:???
あと1ヶ月ちょいは耐えるしかない
0126nobodyさん04/07/19 21:11ID:???
すみませんが教えてくだちぃ。
ファイルアップロードで、下記の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>

0127nobodyさん04/07/19 21:31ID:???
>>126
upfile.phpの最初にphpinfo()書いてよく眺めればわかるよ
0128PHP04/07/19 21:51ID:4+OKTR+f
PHPで配列自体をソートするときってどうしたらいいの?
Array[0](A0,B0,C0)
Array[1](A1,B1,C1)
Array[2](A2,B2,C2)
でBの項目でソートしたいときってどうしたらいいの?
012912604/07/19 21:59ID:???
>>127
うん、よくわかった。さんくす!!!
0130nobodyさん04/07/19 22:15ID:???
>>128
>>94あたりの話を応用。
0131 ◆JirmzAivjs 04/07/20 00:43ID:???
>>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/
でがんばってまつ。
0132xxx04/07/20 01:57ID:zj8DyYfz
ごめんなさい!本当に分からないです。
Array ( [0] => 2004072000<>0<>xxx<>2<>0 [1] => 2004072000<>0<>index<>0<>0 )
の配列を中の[3]の配列の値でソートして、[2]の値のついたdatファイルを読み込んで表示させたいんです。
どうしたらいいか分かりません…。
どうしたらいいんでしょう?
0133nobodyさん04/07/20 02:34ID:TlHHsRNJ
すいませんが解決法あったら教えてください。
HTML中の一部を繰り返したいのですが、

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

mbstringを有効にするのならば
phpインストールフォルダ以下のextensionディレクトリに
php_mbstring.dllは入ってますか?
extension=php_mbstring.dllのコメントはずしてますか?
0141nobodyさん04/07/20 10:50ID: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];
としても何も表示されないのは何ででしょうか?
0142nobodyさん04/07/20 11:28ID:???
>>141
print_r(preg_grep($grep, $mail));
0143nobodyさん04/07/20 11:33ID:fJEHV2g/
>142
ありがとうございます。
しかし、print_r だと、配列の中身全部出てしまいます。

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

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

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

もっと簡単な方法はないのでしょうか?
みなさんはどのようにしていますか?
0147nobodyさん04/07/20 13:10ID:???
>>146
フォームから得るキーとそのデフォルトを配列にしておいて、
ループしながらやってる。
どのみち最低でもSQLインジェクション対処せんきゃならんし。
0148nobodyさん04/07/20 13:15ID:???
フォーム入力のデータは一通り入力チェックかける様にしてる
SQL発行する際はPREPARE使ってる
0149nobodyさん04/07/20 14:45ID:???
DBに書き込む際
型がおかしいとき、DBが判断してくれるのでDBが弾くのを任せるか
前もってPHP側で見てやるか、どっちがいいでしょう
0150nobodyさん04/07/20 14:49ID:???
親切にエラーが出たフォームとか教えてやるにはPHP側でやるしか無かんべ
0151nobodyさん04/07/20 15:02ID:???
PHP側でチェック
0152nobodyさん04/07/20 16:21ID:yRgYyr5n
>>147
>>148
なるほど。有難う御座いました。
0153nobodyさん04/07/20 18:12ID:???
フォームから得た値は管理者が入力するフォームで無い限りちゃんとサニタイズしろよ。
0154nobodyさん04/07/20 18:58ID:???
WebProg作るならクロスサイトスクリプティングの脆弱性ぐらい気をつけんとね。
0155nobodyさん04/07/20 19:04ID:???
DBに突っ込むだけの場合はサニタイズしてません
0156nobodyさん04/07/20 19:06ID:???
>>155
なんで?真面目にその理由を聞きたい
0157nobodyさん04/07/20 19:07ID:???
ログイン時に照会されるのみの情報だからです
0158nobodyさん04/07/20 19:09ID:???
>>157
全然意味がわからんのだが
フォームデータにSQL仕込まれたらどうすんの?
0159nobodyさん04/07/20 19:15ID:???
SQLから出したデータにもhtmlspecialcharsしておくべきですかね?
0160nobodyさん04/07/20 19:15ID:???
入れるときにしてるんなら必要ないよ。
0161nobodyさん04/07/20 19:16ID:???
意味が分からんねぇ・・・
"select * from auth where ID = ".$_POST['ID']
としてあとのパスワードやらをmysql_fetch_assocでDBから情報とって調べる
0162nobodyさん04/07/20 19:17ID:???
え、俺、自分の欲しい物リストスクリプト作って使ってるんだが
全然サニタイズしてないや
したほうがいいのかなぁ・・・
0163nobodyさん04/07/20 19:18ID:???
perlと違ってhtmlspecialchars()関数一個ですむのになぜめんどくさがるかねぇ
0164nobodyさん04/07/20 19:19ID:???
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からパクッた。マジお勧め
0165nobodyさん04/07/20 19:38ID:???
>>161
$POST['ID']='aaa; delete from auth'みたいなのが入ってきたらどうすんの?
016613904/07/20 19:56ID:???
>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は他の奴報告してくれ
0167nobodyさん04/07/20 20:18ID:???
<form accept-encoding="xxx">これ最強。
PEARのHTML_QuickFormを使えば再帰的にstripslashesしてくれて便利。

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

とにかく貴様ら、SQLインジェクションのヤバさをもっと知るべきだと思います。
そんなヤバい仕事をしてる貴様らとか超偉い。もっとがんばれ、超がんばれ。
0171nobodyさん04/07/20 20:39ID:???
>>168
問題なのはこれ→「;」
一度セキュリティ関連のサイトを読むことをお奨めする
0172nobodyさん04/07/20 20:44ID:???
>>171
なるほど。
でも、上の場合だと複問い合わせされることもあるよね?
その場合はselectとか見る必要あるよね?
0173nobodyさん04/07/20 20:44ID:???
>>168 ポイントがずれてる
>>169 ぜんぜんだめ
MySQLならmysql_real_escape_stringした文字列をさらに'(シングルクォート)で囲む。
(PHP4.3.0未満はmysql_escape_string, PostgreSQLはpg_escape_string)
DB_common::quoteSmartは型を考慮してそこらへんを自動でやってくれる。
0174nobodyさん04/07/20 20:46ID:???
>>173
へぇ
じゃあDB_common::quoteSmartだけ使えばいいんですね
0175nobodyさん04/07/20 20:55ID:???
>>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するのが望ましいけど長くなるので省略。
0176nobodyさん04/07/20 20:58ID:???
>>175
どうもありがとう。
今までPEARは全然使ったことなかったよ。
使った方が簡単そうでいいね。
0177nobodyさん04/07/20 21:21ID:???
mysql_real_escape_stringは「;」が素通りしてしまうのですね
0178nobodyさん04/07/20 21:22ID:???
>>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」な指定はしないから、
ちゃんと確認して使用すること。
0179nobodyさん04/07/20 21:30ID:???
フォームデータでどれをソートするかという情報を送るのですが
その場合、許可する文字列を列挙して
$regex=hoge|moge;

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

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

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

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

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

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

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

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

で質問なんですが、
$db->query(,"SELECT * FROM hore WHERE id = {$_GET['id']}");
とかやってたとして、具体的に被害出せます?
例えば '";DELETE FROM hoge; とか突っ込んでも大抵の DB だと無効なクエリになるのでは、、
0191nobodyさん04/07/20 22:33ID:???
俺もオモタ
>>165は失敗するんじゃないか?
1文として送信するんじゃないの?
0192nobodyさん04/07/20 23:08ID:???
>>190-191
実行するよ。実際やってみれ。
要は$db->query("SELECT * FROM table;DELETE FROM table");
で後ろのDELETE文を実行してしまうかどうかだが、実行する。
0193 ◆JirmzAivjs 04/07/20 23:20ID:???
>>190-191
すべて有効になりますね。drop databaseなんて打たれたらどうします?
全部アボーンっすよ((;゚Д゚)ガクガクブルブル
0194nobodyさん04/07/20 23:23ID:???
まあdrop権限など無いわけだが
0195nobodyさん04/07/20 23:27ID:???
prepare使えるならprepare使っておけば問題ないよね?
019619004/07/20 23:53ID:???
>>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`
019719004/07/21 00:05ID:???
>>196
おや、DBによって挙動が異なるのかな?
以前検証したときは、pgsqlでPearDBじゃなくてpg_queryだったんだけど、
確かに後ろ側も実行してましたよ。
0198nobodyさん04/07/21 01:38ID:???
ファイルの最終行を取得する効率的な方法ない?
めっちゃファイルサイズ大きくて、全部読み込むの大変。
0199nobodyさん04/07/21 01:48ID:???
>>198
$l = exec("tail -n 1 $filename");
0200nobodyさん04/07/21 01:58ID:???
ていうか
delete from groupsでは構文がおかしくないか?
020119804/07/21 02:11ID:???
あ、tailを使えば良いのか。PHPでやろうとしてたらかなぁ、頭になかった。
ありがとん。
020219004/07/21 02:28ID:???
>>197
mysql だす。
MSSQL とか、初期設定で複数のクエリを通すので危険とか昔聞いたような聞いてないような。

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


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

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

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



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

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

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


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

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

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

そんで、その程度ならpreg_replaceで十分だろ。
0237nobodyさん04/07/21 15:49ID:???
>>233
Pear
http://pc5.2ch.net/test/read.cgi/php/985665522/
0238nobodyさん04/07/21 15:49ID:???
旬は9月から年内いっぱいくらいかな。
0239nobodyさん04/07/21 16:42ID:???
cryptって先頭8文字だろ?少なすぎ
md5が手軽でいいかと
0240nobodyさん04/07/21 16:45ID:???
>>239
標準DESの場合はな。
0241nobodyさん04/07/21 17:10ID:???
すみませんが教えてください。

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

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

0242nobodyさん04/07/21 17:27ID:???
>>241
そこまで見当がついているなら、先ずはマニュアル嫁。
0243nobodyさん04/07/21 17:37ID:???
PHP5を使っているのですが、$_REQUESTにはCOOKIEの情報も
含まれるみたいなのですが、これはPHP4の時からそうなっていた
のでしょうか?
今まで気づかなかっただけか・・・^^;。
0244軟式PHP04/07/21 18:27ID:???
>>243
それがっどうしたっ!あっほだよっ♪
0245nobodyさん04/07/21 18:37ID:???
なつかしい
024624304/07/21 18:49ID:???
>>244
ごめんようぅ print_r($_REQUEST);
ってprint_r使う事がほとんどなかったのよん;
0247nobodyさん04/07/21 18:51ID:???
セキュリティ関連ならこの辺も参考にしとけ
ttp://jp.php.net/manual/ja/security.php
0248nobodyさん04/07/21 18:55ID:???
>>246
PHP4でも含まれていたはずだけど、今まで無かったのなら↓これの所為では?
ttp://jp.php.net/manual/ja/ini.sect.data-handling.php#ini.variables-order
0249nobodyさん04/07/21 18:57ID:???
今年のLLWeekendにはどうしてPHP出てないんですか?
つか去年はどうして出れたんですか?
0250nobodyさん04/07/21 19:02ID:???
Part1 : http://ebi.2ch.net/php/kako/982/982687820.html
Part2 : http://pc.2ch.net/php/kako/1003/10032/1003283567.html
Part3 : http://pc.2ch.net/php/kako/1013/10139/1013919792.html
Part4 : http://pc.2ch.net/php/kako/1022/10229/1022999539.html
Part5 : http://pc.2ch.net/php/kako/1031/10317/1031721334.html
Part6 : http://pc5.2ch.net/php/kako/1038/10389/1038988518.html
Part7 : http://pc5.2ch.net/php/kako/1044/10444/1044478561.html
Part8 : http://pc5.2ch.net/php/kako/1050/10502/1050249148.html
Part9 : http://pc5.2ch.net/php/kako/1057/10579/1057947512.html
Part10: http://pc5.2ch.net/php/kako/1064/10641/1064104114.html
part11: http://pc5.2ch.net/php/kako/1067/10676/1067635640.html
part12: http://pc5.2ch.net/test/read.cgi/php/1070639208/
part13: http://pc5.2ch.net/test/read.cgi/php/1073291978/
part14: http://pc5.2ch.net/test/read.cgi/php/1076163015/
part15: http://pc5.2ch.net/test/read.cgi/php/1078592587/
part16: http://pc5.2ch.net/test/read.cgi/php/1081267619/
part17: http://pc5.2ch.net/test/read.cgi/php/1084781699/
0251nobodyさん04/07/21 20:24ID:???
>>250
GJ!でもpart12-14はみれないぽ
0252nobodyさん04/07/21 20:29ID:???
mb_eregで^を無視するのは仕様か?
0253nobodyさん04/07/21 20:57ID:???
夏厨の釣りってこんな程度?
0254nobodyさん04/07/21 22:49ID:???
>>253
はぁ?答えられないなら書き込まないでね^^
0255nobodyさん04/07/22 02:00ID:???
夏ですなあ
0256nobodyさん04/07/22 02:03ID:???
<?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 : ^マルチバイト
*/
025720304/07/22 02:29ID:???
>222
遅れましたがとんくすです。
試しにレンタルしてる鯖でこっそり試してみたら小さいファイルだったら大丈夫そうですが、
RLimitCPUなんかよりもreadfileしたファイルがサイズ制限みたいなのを受けて落ちてきませんでした。
いろんな設定があるもんだなと思いました(自分apacheの設定深くはしらんので…)。
汎用性のあるものを作りたいので諦めました。また他の方法考えてみます。ありがとでした。
0258nobodyさん04/07/22 03:07ID:???
GDなどを使ってバーコードを表示するライブラリを探しています。

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

というのは見つけたのですが、45/49で始まるもの以外も使うので
汎用的に使うにはちょっと難しい感じです。
どこかに転がっていないでしょうか?
0259nobodyさん04/07/22 04:33ID:???
変数の入った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");
}
?>

とやったら
0260nobodyさん04/07/22 04:36ID:???
>>259
途中で送ってしまった・・・
それでこれでは間違ってるようなのですがどうすれば
var.txtに書いたファイル名を1行目から表示していけるか誰か教えてください。
あ、データベースは使えません。
0261 ◆JirmzAivjs 04/07/22 04:46ID:???
3回includeしてるからじゃ?
0262nobodyさん04/07/22 04:56ID:???
include_once()に変えとけ
026323404/07/22 05:19ID: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ないをクオーテーション等でくくってみてもうまくいかず、アドバイスいただけたらと思います。
0264ちなみに04/07/22 05:27ID:O8WfHKX6
title=title とかけばコメント部にtitleとは出るのですが
title=$text[10] 等書いてもその部分はコメントが出されません。
$text[10]には当然値は入っているのですが・・・
0265nobodyさん04/07/22 06:16ID:???
>>264
preg_replace_callbackを使って、コールバック関数内でglobal $text, $i;を宣言すればいい。
(元のfor文がグローバルスコープにあるのが前提だけど)
クラスを使えば変数のスコープに悩まされずに済む。

・・・それ以前にa要素のtitle属性に全文をぶち込もうという蛮勇のほうが問題と思うが。
しかもstrip_tagsもhtmlspecialcharsもかけずに。
ポップアップさせたいのならCSSとJavaScriptで対応した方がいいよ。
p2のソースとか参考にしる。
0266nobodyさん04/07/22 08:11ID:???
>>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);
0267nobodyさん04/07/22 11:32ID:???
>258
http://www.mribti.com/barcode/sample.php

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

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

そこだけ GD::Barcode で逃げるしかないかなぁ。ちょっと悔しいですが。
0269nobodyさん04/07/22 12:22ID: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 />

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

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

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

>>271>>273
行頭改行に&nbsp;を入れたいんだよ。
でも、うちが使ってるサーバーではならなかったんだよ(;´д`)
0287nobodyさん04/07/22 15:04ID:???
>>286
お前の日本語が不自由な事を威張られても
お兄さん困っちゃうんだけどな
0288nobodyさん04/07/22 15:14ID:???
解決したとたん命令口調とは。夏ですな。
0289nobodyさん04/07/22 15:23ID: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度読み込んでるからでしょうか?クマった・・
0290nobodyさん04/07/22 15:24ID:ZtAuJUSe
>>289
あぁ・・間違った。。訂正です・・
while ( $filename = $save_dir->read() ) {
$filepath = $save_dir2 . $filename;

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

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

読み取りは一般的なスキャナで図形として読み取って、
そこから補正かけて解析するのは、この手の扱いに慣れてないと
面倒かもしれん(そしてQRコードが良く出来ていることに気づく)
0295nobodyさん04/07/22 16:09ID:???
>>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);

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

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

$regtimeって何に使ってるんだ?
0303nobodyさん04/07/22 17:33ID:ZtAuJUSe
>>289の質問は素通りされてるところをみると、厨な質問だったのでしょうか・・?
_| ̄|円
0304nobodyさん04/07/22 17:52ID:???
>>303
PHP 側から見たファイルパスと Web 側から見たファイルパスは違うので画像が表示されないのは当然。
HTML で出力されたソースを見て画像の正しい位置を出力するようにしてみたら?
0305nobodyさん04/07/22 17:58ID:ZtAuJUSe
>>304
えーと、下の画像一覧表示の構文だけなら問題無く表示できます。
エラーの内容からすると、2回目のwhile ( $filename = $save_dir->read() ) {
が呼び出された時に呼び出しエラーがでてるみたいです・・
030628904/07/22 18:03ID: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回行っています。
どちらか一つならエラーはでず、思惑通り表示されます。
030729804/07/22 18:03ID:???
2ch風BBS作ってるんですよ
ここのURLにもあるでしょ
time関数が!
0308nobodyさん04/07/22 18:24ID:???
UNIXタイムスタンプと言ってくれ
time関数とか臭い
0309Imo ◆.jC7ANgFY. 04/07/22 18:27ID:???
>>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; //画像一覧
}
0310nobodyさん04/07/22 18:29ID:???
>>306
それなら $up_dir->close() をファイル容量計算の後に閉じないと $up_dir のポインタが最初に戻らないのでは?
filesize() あたりでエラーになっているとか。エラー内容を書けば分かると思うけど。

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

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

一意性を求めたいなら他に方法があるからマニュアル引いて自分で調べろや
0314nobodyさん04/07/22 22:06ID:???
GDでGIFが復活したっぽいね。PHPも対応するのかな。
0315nobodyさん04/07/22 23:42ID: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);
?>

じゃ、だめなの?
0316nobodyさん04/07/22 23:54ID:???
>>315
   〃∩ ∧_∧
   ⊂⌒( ´・ω・)くぜんぶマニュアルに書いてあったでつ
     `ヽ_っ⌒/⌒c
http://www.php.net/manual/ja/features.file-upload.php
0317nobodyさん04/07/23 00:00ID:NhG7RjUM
ありがとぅございまっ
031825904/07/23 03:59ID:???
>>266
ありがとうです、その書き方でうまくいきました。
0319nobodyさん04/07/23 13:07ID:???
Wavファイルを読み込んで速度を変更したりする方法をご存知の方が
いらっしゃいましたら、教えて頂けると助かりますm(_ _)m
0320nobodyさん04/07/23 13:13ID:???
常識で考えるとPHPの仕事とは思えないんですが
0321nobodyさん04/07/23 13:39ID:???
>>319
pack(), unpack() を調べてごらん。mp3 はそれで編集した。
WAV のフォーマットを聞きたいのであれば Google で。
0322nobodyさん04/07/23 13:58ID:???
>>321
どもありがとですm(_ _)mフォーマット見て弄ったら速度変えれました。
0323nobodyさん04/07/23 15:23ID:kRHOf0Jq
php5 と php4 を共存させることはできますか?
0324nobodyさん04/07/23 16:32ID:???
>>323
私も前に同じ事をやろうとしたが・・・無理だった
共存ではなくサーバーを2つ立てて各PHPを入れて転送するのがよさげ
0325nobodyさん04/07/23 16:46ID:???
>>324
1つの Apache に PHP4 と PHP5 をインストールして共存に成功したこと
はないけど、Apache を PHP4 用と PHP5 用に 2つ別ディレクトリに
インストールして別の Port 番号で PHP4 用と PHP5 用の Apache を同時に
起動させることは可能。
0326nobodyさん04/07/23 18:05ID:???
>>323
PHP5を使ってるが特に問題なさげ
ただ、PHP5で組んでいてPHP4に戻した時に何かあるかもね
0327nobodyさん04/07/24 06:05ID: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");を書いてみたんですが
下にずらずら繋がっちゃって見た目がよくないんです。
親切な方教えてください。お願いします。
0328nobodyさん04/07/24 06:12ID:???
親切な方はいません
0329nobodyさん04/07/24 07:05ID:???
どうしたいのかよくわかんないんだけど
if (empty($QUERY_STRING)) echo リンク一覧;
とかそういうこと?
03301704/07/24 09:53ID:???
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が発生するケースが出て来てしまいました
どんな文字が影響していると考えられるのでしょうか?
0331nobodyさん04/07/24 10:18ID:???
>>330
ext/pcre/php_pcre.c
マニュアルの言葉だと 内部オプション設定ってやつを処理する部分で、
内部オプションにないものを指定した時にエラーとして表示される。
どこかの「/」が邪魔してるんじゃないの?
つーか、オイラなら正規表現でエラーが出たら一文字ずつ削って動作確認するけどな
0332nobodyさん04/07/24 10:32ID:???
//送信が押された場合
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が反映されるようにしたいのですが,どうすればいいのでしょうか。
0333nobodyさん04/07/24 10:51ID:???
>>332
$rowsが変数として展開されずに そのままの文字列になってるってことかい?
文字列の中に変数を置いた時に ' と " では扱いが異なってくる。
〜 value="'.$rows.'">'; にでもすりゃェェんでないの?
0334nobodyさん04/07/24 11:03ID:???
おおお!!!!
なりました。ありがとうございます。
0335 ◆JirmzAivjs 04/07/24 11:06ID:???
>>332
$radio = "<input type=\"radio\" name=\"radio\" value=\"$rows\">";
でいいじゃん。
つーかこれだと管理番号かぶるからちょっと見直した方がよくない?
0336nobodyさん04/07/24 11:16ID:???
日記一覧をラジオボタンで選択し,”削除”っていうボタンを押したら
if($_POST['del']){
$keydel = $_POST['radio'];
pg_query("delete from kadaidb where num=$keydel;");
}
を実行するようにすればいいかなっと思ったのですが,うまく動作しないみたいです…
0337nobodyさん04/07/24 11:24ID:???
>>336
Perlコーディングスレからのパクリだけど、
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

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

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

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

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

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

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

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

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

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

今入退室を付けたチャットを作ってるんです。それで、入室時に名前、時刻、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>");
}
038037904/07/25 22:35ID:???
訂正です
$v = split('<>', $data[i]);
↓
$v = split('<>', $data[$i]);
0381nobodyさん04/07/25 22:45ID:???
>>379
> for($i = 0;$i > 10;$i++){
このへん。
echoの中身も表示されないし、forループに問題があることにすぐ気づかないと。
038237904/07/25 22:49ID:???
あぁぁぁぁ・・・やっちまった。
$i>10じゃ動くはずが無いと・・・。
どんなパズルもわかっちゃうと簡単すぎて笑っちゃうもんですね。

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


下手な釣りを見て思い出したが、PHPにはユーザーによる変数の
スーパーグローバル化やラベルジャンプがないのでちょっと困ることがあるな。
あれば楽できるのに・・・と思う局面がたまにある
0388nobodyさん04/07/26 02:54ID: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 です。
038938804/07/26 04:29ID:sMxRgzIj
追記です。

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

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

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

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

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

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

${hoge}じゃなくて{$hoge}を使えばいい。
0397nobodyさん04/07/26 11:23ID:BnaAbQE9
>>396
ありがとうございます。解決しました。
{$hoge[]}と${hoge[]}の文法的な違いってなんですか?
0398nobodyさん04/07/26 11:32ID:zfZRDkJ9
>>394
vodafoneのキャッシュ制限にひっかかってない?
非パケ端末は1ページ6kbyte以下ですよ。
0399nobodyさん04/07/26 11:32ID:???
>>397
マニュアルを読みましょう。「変数のパース」以下を読んでみて下さい。
http://www.php.net/manual/ja/language.types.string.php
0400nobodyさん04/07/26 11:57ID:???
>>392
まあ、一々宣言すればいいんだけど、$PHP_SELF位は
スーパーグローバルに登録された方が楽かな・・・とは思うもんで。
それともこういう書き方は(・A ・)イクナイ?
0401nobodyさん04/07/26 13:06ID: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が返ってきます。
これはなぜなのでしょうか?知ってる方お願いします。
0402nobodyさん04/07/26 13:20ID:???
ディレクトリは出来たけど、画像はアップロードできてないだけじゃねーの( ´-`)
アップロード処理の例外処理とかちゃんとしてる?
0403nobodyさん04/07/26 13:24ID:???
>>401
$dirに何が入ってるか見てみ
0404nobodyさん04/07/26 14:17ID:???
[PHP-users 22798]
Windowsではできてると言っているのに、、、
「Macでは試験したことが無いですが、Windows限定でよければ。」ってアフォか
0405nobodyさん04/07/26 14:24ID:???
>>404
そういうおもしろいのは↓へどうぞ
http://pc5.2ch.net/test/read.cgi/php/1090322290/
0406nobodyさん04/07/26 14:29ID:???
誤爆スマソ
040740104/07/26 14:42ID: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なんです。
0408nobodyさん04/07/26 15:07ID:???
フルパスで
040940104/07/26 15:26ID:???
>>408
フルパスでも無理でした。
mkdirで作成したディレクトリにあるファイルをis_fileで調べた場合FALSEを返すのでしょうか?
is_dir($dir)もFALSEでした。
※$dirにはmkdirで作成したディレクトリ名(フルパス)
0410nobodyさん04/07/26 15:32ID:???
file_existsでも同じ?
0411nobodyさん04/07/26 15:34ID:4tJVtMce
質問です。
htmlspecialcharsを使うと♥等の文字実体参照ができなくなってしまうのですが、
対処方法はあるのでしょうか。
&amp;を全て&に変換してから表示させれば実現できることを確認しましたが
それだとhtmlspecialcharsの意味が無くなるし・・
よろしくおながいします。
041240104/07/26 15:42ID:???
>>410
はい・・・file_existsもfilesizeも、mkdirで作成したディレクトリを含めその中にあるファイルの情報を
得ようとするとFALSEなんです。

if ( file_exists ( $name ) ) //FALSE

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

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

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

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

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

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

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

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

$msg[0] が田中さん
$msg[1] が山下さん
$msg[2] が吉田さん
となるのですか?
0430nobodyさん04/07/26 19:17ID:???
>>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);
等で、実体参照と思われる部分のみさらに置換し直す。
0431nobodyさん04/07/26 19:18ID:???
>>429
print_r($msg);とか試せ
0432nobodyさん04/07/26 19:24ID:???
質問ナンデツガ
送信ボタンをクリックしたらAに1が
代入されるとかできますか?
0433nobodyさん04/07/26 19:24ID:???
>>429
お前は一回マニュアルを読め
0434nobodyさん04/07/26 19:30ID:???
>>432
お前は一回、、、何から読ませればいいですか?
0435nobodyさん04/07/26 19:31ID:???
国語の教科書とか
0436nobodyさん04/07/26 19:42ID:???
$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
043743604/07/26 19:46ID:???
何が悪いんだよぬるぽーーーーーー!!!
043843604/07/26 19:48ID:???
ちなみに$dataのパーミッションは666でつ
ヘルプキボンヌ
0439nobodyさん04/07/26 19:50ID:???
var_dump($msg)で中身みれよ
0440nobodyさん04/07/26 19:53ID:???
ちゃんと中身ありますた;;
string(77) "やまもと,おはようございます,2004/07/26 19:52:51,YahooBB************.bbtec.net"
0441nobodyさん04/07/26 20:10ID:???
$data とか $fp をvar_dump した方がいいと思う。
044243604/07/26 20:12ID:???
bool(false)

ナンダコリャ
0443nobodyさん04/07/26 20:33ID:???
>>442
$fpか? まあ要はファイル開けないぞゴルァ!ってことだな。
if(!$fp=fopen($data,"w")){
echo "cannot open!";
}else{
fputs($fp, "$msg\n");
}
に変えて実行してみれ。
044443604/07/26 20:43ID:???
開けませんですた_| ̄|○
0445nobodyさん04/07/26 20:44ID:???
いや。必要なのは
if(!file_exists($data)){
  echo "file not found."
}
だと思う。
typoしてないかどうかよーくソース眺めてみ。
044643604/07/26 20:46ID:???
まじで皆さんごめんなさい_| ̄|○
$dataではなく$logですた;;
0447nobodyさん04/07/26 21:19ID:???
>>446
おう、それと$fp=fopen($data,"w")だと$logの中身は常に最新の$msg一行だけになるから
$fp=fopen($data,"a");でオープンしとけ。
0448nobodyさん04/07/26 21:24ID:???
>>447
あり><
どうりで上書きされるわけだ・・・
044938804/07/26 21:32ID: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で内容解析してみます。
0450nobodyさん04/07/26 21:44ID:???
つーか、煽りでもなんでもなくて純粋に不思議なんだが、
マニュアルちゃんと読んでない関数をよく使おうと思うな…
特に戻り値把握して無いって普通におかしいだろ?
その関数をそこで使おうと思った理由がスゲー気になる
045138804/07/26 21:57ID:sMxRgzIj
サイズが倍になるサーバでtcpdumpしてみました。
概算ですが送信サイズは元のファイルのサイズです。
またhttpヘッダー部のダンプを見てみたところ
Content-Length:.162212  (PHP側では size : 321880と表示される)
の文字があったので送信されるHTTPヘッダーは正しいみたいです。
(まぁ同じクライアントで別サーバで動作するのでクライアント側から送信されるデータは正しいっぽいですね)

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

AddType application/x-httpd-php .php

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

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


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

アドバイスどうもありがとうございました。
0455nobodyさん04/07/26 22:52ID:???
>>388では生データの概要全部が読めないんだけど、
アップロード元のhtmlで「enctype="multipart/form-data" 」
は指定されてるよね?
0456nobodyさん04/07/26 22:59ID:???
>>454
記述はいる筈だけど、それはRHL9(のRPMで入れた)なら
/etc/httpd/conf.d/php.confに書かれてるんじゃないかな。
.htaccessにも書けるし、設定は「上書き」であって
コンフリクトはしないと思うけど。
0457nobodyさん04/07/26 23:10ID:ehBSQM9L
393への回答キボンヌ
おながいします
0458Imo ◆.jC7ANgFY. 04/07/26 23:14ID:???
chmodで606にすれば解決。
所有者を自分にしたければCGI/perlから作ればよし。
045938804/07/26 23:19ID: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のバージョンの組み合わせの問題でしょうかね?
0460nobodyさん04/07/26 23:42ID:???
<俺メモ>
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ソフトウェア開発」を入れれば解決。
</俺メモ>
0461nobodyさん04/07/26 23:53ID:???
すみません、どなたかPHP5でnamespaceがサポートされなかった理由をご存知ないでしょうか。
RC1まではあってRC2で削除されたようですが。
よろしくお願いします。

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

あ,データ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];
}
?>
0466nobodyさん04/07/27 04:03ID:???
>>465
全然ダメ
そのものズバリ書くのも何なのでヒントを

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

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

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は呼び出せないのかと‥
0475nobodyさん04/07/27 10:54ID:???
ネタはやめてください
0476nobodyさん04/07/27 10:57ID:???
ワラタ
0477nobodyさん04/07/27 11:06ID:???
まず、おはようございます。 がおもしろかったです。
0478nobodyさん04/07/27 11:09ID:???
<?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勉強中!
0479軟式PHP04/07/27 13:02ID:???
<?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;
?>
0480nobodyさん04/07/27 14:19ID:???
PHP4.3.7を使ってます。セキュリティ問題についてはとりあえず置いておいて、

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

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

どこに問題があるかわかりますか?
048148004/07/27 14:20ID:uLhfG1jO
sageちゃった。
ageさせて。
0482軟式PHP04/07/27 14:23ID:???
>>480
magic_quotes_gpcでしょう。
048348004/07/27 14:27ID:???
>>482
おーなおったー!ありがとー!
ぶちゅ
0484nobodyさん04/07/27 14:32ID:???
>>474
URLを指定した、Webサーバ経由のincludeなら可能。
つまりcgiの出力結果のinclude。リモートファイルの
直接的なincludeになるので、セキュリティには気をつけること。
#リモートの出力が常に信頼できるものなら良いが。
048548404/07/27 14:34ID:???
>>474
ああ、そこのサーバだと駄目かもしれんね。
<httpストリームのinclude
0486Imo ◆.jC7ANgFY. 04/07/27 14:38ID:???
>>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);
0487軟式PHP04/07/27 14:39ID:???
セーフモードのヤカン。・゚・(ノ∀`)・゚・。
0488Imo ◆.jC7ANgFY. 04/07/27 14:42ID:???
>>474
こんなことしてみればいかが。# localhostについては検索すること。
include('http://localhost/〜');
でも出力だけしたいのであれば
echo file_get_contents('http://localhost/〜');
のほうがオススメ。
0489nobodyさん04/07/27 14:52ID: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エラーになってしまいます。
どうすれば良いでしょうか?
0490nobodyさん04/07/27 15:01ID:???
IfModuleが使えない鯖なんだろ
0491nobodyさん04/07/27 15:21ID:???
>>489
そのままで使えないものなのかい?Shift-JIS
0492nobodyさん04/07/27 16:02ID:???
すみません
PHP+MySQLで日本語検索やりたいんですが、
レコード数が数十万件から100万件程度になると、

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

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

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

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

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

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

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

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

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

sample.dat --------------------
%<a href=\"(.+?)\">(.+?)</a>%|http://www.yourdomain.com
%<a href=\"(.+?)\">(.+?)</a>%|http://www.hogehoge.net
0500nobodyさん04/07/27 17:15ID: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);
?>
0501軟式PHP04/07/27 17:45ID:???
(;´Д`)なんか解析するのもだるいな…
0502nobodyさん04/07/27 18:06ID:???
見た目で。

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

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

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

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

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

関数のバイナリじゃなくて。
0522nobodyさん04/07/29 17:11ID:???
でこが広いだけだよね
0523nobodyさん04/07/29 17:27ID:???
俺なんかデコ広すぎてツムジが無くなっちゃったよ!
0524nobodyさん04/07/29 17:42ID:???
それは禿と呼ぶな、普通。
0525nobodyさん04/07/29 17:45ID:???
俺なんかデコ広すぎてウナジが無くなっちゃったよ!!
0526nobodyさん04/07/29 18:00ID:???
それはコンパイルしてバイナリしちゃいましたか。
0527nobodyさん04/07/29 22:38ID:???
フォームを使わないでPOSTでMulitipart/form-dataを指定したときと同じよう
にファイルを添付したいのですが、これ可能でしょうか?
できるとしたら、どのエンコードをし、どういう送信ヘッダを作ればいいんでしょうか?
0528nobodyさん04/07/29 23:17ID:???
どこから送りたいの?
0529nobodyさん04/07/29 23:18ID:???
>>527
PHPじゃ無理。フォームの仕様を使うのが正しい。
でなければFlashでも使う。
0530nobodyさん04/07/29 23:43ID: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>
0531nobodyさん04/07/29 23:43ID:???
>>528,529
http://oshiete1.goo.ne.jp/kotaeru.php3?q=817797
>hogehoge.phpが、メールサーバーにソケット接続、マルチパート処理し、ウェブコンテンツを更新

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

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

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

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

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

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

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

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

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

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

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

もし"test.php?hoge.jpg"としてやりたいのであれば
$_SERVER['QUERY_STRING']を参照するとよいかと思います。
こちらの場合は特殊文字がエンコードされているので
解除する必要があります。(rawurldecode参照
0563nobodyさん04/07/31 01:12ID:8q4uMfb8
拡張子 .php ってvodafoneからじゃ見られないの?docomo、ezや
PCブラウザからは見られると報告を受けているHPが彼らのみ見られないようなのです。
もしくは何か使っちゃいけないTAGとか ファイルの大きさ制限とかあるんですか?
0564nobodyさん04/07/31 01:38ID:???
>>563
スレ違い
056556104/07/31 03:50ID:???
>>562
無事表示できました。
ありがとうございました。
0566nobodyさん04/07/31 04:19ID: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 以外入らないんですけど、なんで?
0567nobodyさん04/07/31 12:11ID:???
$baka = "あいうえお";
bk($baka);
function bk($baka="1"){
echo $baka;
}
0568nobodyさん04/07/31 16:57ID:???
<?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が合っていれば別のページに飛ぶようにしたいのですが
別にページに飛ぶための命令文がわかりません。
教えてください;;
0569nobodyさん04/07/31 17:12ID:???
headerでも使っておけ
それからパスはmd5とかでハッシュ値を取れ
057056804/07/31 18:56ID:???
>>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になんねーよ;;
ちゃんと全記入できてるのにな〜・・・
0571nobodyさん04/07/31 19:12ID:???
>>570
if の中にオカシイ部分がある。よーく見てみ。
つーか最後まで気を抜くな!
0572nobodyさん04/07/31 19:50ID:???

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

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

自分が何というファイル名かわからないとき
自分のファイル名を取得したい
0585nobodyさん04/08/01 00:30ID:???
>>584
ttp://www.php.net/manual/ja/reserved.variables.php#reserved.variables.server
0586nobodyさん04/08/01 00:43ID:???
>>585
THX!
0587nobodyさん04/08/01 01:10ID:???
おね
http://www.ii-park.net/~goldred/ero-box/001.jpg
http://www.ii-park.net/~goldred/ero-box/002.jpg
http://www.ii-park.net/~goldred/ero-box/003.jpg
0588nobodyさん04/08/01 01:11ID:???
スマン、誤爆った!
0589nobodyさん04/08/01 01:38ID:???
横からすみません。
PHPをコマンドライン側で実行する場合、$_SERVERの代用として
なんという変数を使えばいいんですか?

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

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

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

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

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

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

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

[結果イメージ]
class a{
function b{
}
function j(){
echo '123456789';
}
}
0607nobodyさん04/08/01 10:14ID:???
ページ1で$nameに山田と入力
ページ2でprint $name;
ページ3で$nameを表示しようとしたらできないぽ;;
0608nobodyさん04/08/01 13:20ID:???
>>607
ソース出せよ
0609nobodyさん04/08/01 13:41ID:???
>>594
EUCで書けば多分日本語関係のエラーはほとんど潰れると思う。
SJIS使うなら変数は{$hoge}と括弧でくくっとこう。${hoge}だったかもしれんが。
print "コメントは".$input_len."文字までです。";でもOK。
0610nobodyさん04/08/01 15:23ID:???
>606 マニュアル読めよ
0611nobodyさん04/08/01 16:03ID: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っていうのじゃ無理ですよね?
0612nobodyさん04/08/01 16:15ID:???
>>610
マニュアルには書いてないと思うがな
知らない奴が出しゃばるな!
0613Imo ◆.jC7ANgFY. 04/08/01 16:24ID:???
>>611
ちょっとヒント。
ob_start関数、これを使えばseekのようなことはできないとしても
期待した結果に持っていくことはできますよ。
0614Imo ◆.jC7ANgFY. 04/08/01 16:30ID:???
>>609
両方可能ですよ。

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

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

funciton hoge($params)
{
require_once('hoge.func.php');
return hoge($params);
}
061761104/08/01 17:12ID:6iApVh2k
>>613
マニュアルには出力のバッファリングを有効にするとあるのですが、
これでポインタ移動できるんでしょうか?
「ob_start ポインタ」でググってもそれらしき記述が見つからないのですが、、、
0618Imo ◆.jC7ANgFY. 04/08/01 17:48ID:???
>>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);
0619nobodyさん04/08/01 18:03ID:???
>>615
マニュアルのそれは昔に読んだんですよね
funcitonをclass内に読み込み方法があればclass外のfunciton
と競合しないですむので理想的と考え質問したのですが、
それは出来ないみたいですね。
extendsを調べてみます^^ありがとうございます。

>>616
require_once()とinclude_once()の差はエラー時の処理の差で
しかないと記憶しているのですが違いましたか?
アフォな理由を説明してくれ!
062061104/08/01 18:11ID: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ファイルに書き足したいのです。
0621nobodyさん04/08/01 18:12ID:???
>>619
何でそこに反応するかな。

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

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

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

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

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

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

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

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

}
}


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

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

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

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

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

で、ロックをかけたとき、書き込み中、ロックを解除したときに何らかの出力をさせると良いかと。
あと書き込み中にusleep()してわざと処理に時間がかかるようにすると分かりやすいかも。
flock($fp, LOCK_UN);し忘れてるってのは無しの方向でよろ。
0660nobodyさん04/08/02 09:58ID:???
<?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内に上を記述するとページが何も表示されなくなりました・・・
なぜでしょうか・・・
0661Imo ◆.jC7ANgFY. 04/08/02 10:02ID:???
>>660
if ($count>=$page){
$count = $page;
}
ここで$countがリセットされているようですよ。
0662nobodyさん04/08/02 10:02ID:???
>>659
有難う御座います。まずはApacheを入れてみる事にします。
0663Imo ◆.jC7ANgFY. 04/08/02 10:08ID:???
>>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);
ですよ。ロックは失敗する可能性もあります。
0664nobodyさん04/08/02 11:01ID:FFy40LXR
初めて質問します。
cgiとphpを使っていますが、

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

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

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

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

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

しかしこんなバグが残ってしまいました
Aを書き込みする、Bを書き込みすると更にAが書き込みされる・・・
なーぜだああああああああああ
067466004/08/02 13:58ID:???
$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;
}
0675nobodyさん04/08/02 13:59ID:???
丸投げヤメロ
0676nobodyさん04/08/02 14:01ID:FFy40LXR
>>665
cgiの外部コマンドでphpを呼び出せるそうですが、
出来るんですね。ただ解説しているサイトがない・・・_| ̄|○
0677nobodyさん04/08/02 14:06ID:???
`php file.php`
0678nobodyさん04/08/02 14:23ID: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";

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

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

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

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

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

#記事削除
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);
}
}
}

にしたのですが、記事が消えません;;
パスあってるのに〜;;
0698Imo ◆.jC7ANgFY. 04/08/02 17:03ID:???
>>692
ファイルを開いているときの0Byteにする場合はftruncate関数を使います。
ファイルを開いていない場合は'w'モードで開くだけで0Byteになります。
'w'モードで開いた時点でファイルは0Byteになります。
その後にファイルを読み込むと0Byteの文字列が返されることになります。
0699Imo ◆.jC7ANgFY. 04/08/02 17:08ID:???
>>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);
070069704/08/02 17:10ID:???
シラナイ命令文イパーイでシボンヌ_| ̄|○

    ||
   (  )
   ∪ ∪
    ∪∪
0701Imo ◆.jC7ANgFY. 04/08/02 17:16ID:???
>>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);
}
0702軟式PHP04/08/02 17:17ID:???
>>693
まぁアホは相手にしなさんな。・゚・(ノ∀`)・゚・。
0703nobodyさん04/08/02 17:22ID:???
>>701
ありです><
なんとかできました(*´д`)ハァハァ
(trimてなんだろ・・・)
0704nobodyさん04/08/02 17:23ID:???
マニュアルを見る癖をつけろ
0705軟式PHP04/08/02 17:23ID:???
trimとかchopとかは覚えとけよ。・゚・(ノ∀`)・゚・。
http://www.php.net/manual/ja/function.trim.php
0706nobody04/08/02 17:25ID: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を数えてみても
正しくカウントされないようです。
これはこういう仕様なのでしょうか?
なにか間違った記述をしているのでしたらご指摘いただけると助かります。
よろしくお願いいたします。
0707Imo ◆.jC7ANgFY. 04/08/02 17:27ID:???
>>703
fileで読み込んだ配列はどうしても最後に"\n"が入ってしまうからtrimで除去したんですよ。
パスワードのあとに","が入っているプログラムなら大丈夫なのですが、、、
070870304/08/02 17:29ID:???
そういえば一番後ろにpassがあったような_| ̄|○
本当にアリガトー><

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

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

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

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

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

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

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

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

こんな簡単なことに気が付かないとは恥ずかしい・・・。
071671104/08/02 18:25ID:???
>>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 の方が
早いけど。
071768604/08/02 18:37ID:???
>>687
"最初に確保されるサイズ"ってのは文字列オブジェクト一つのことなんですけど。
あとデフォで8Mってのはmax_limitのこと?
これは「確保できる最大メモリーサイズ」であって、
どこにも「最初に確保されるサイズ」ってかいてない。
それとも別のオプションがあるのかな。

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

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

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

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

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

072567904/08/02 19:33ID:???
レスありがとうございます
>>684
高いっす
>>694
知り合いから頼まれて作っているのですが(携帯用待ち受け画面サイト)、
端末に合わせて自動的に画像を拡大縮小してほしいということで
 元ファイル読み込み→GDでリサイズ→imagejpegで出力
という処理をしています(ファイルとしては書き出していません)。
で、携帯のほうで転送不可にしたいということで、ドコモ用・au用で
違った転送不可フラグを書き込みたい、と。
やはり一度書き出さないと無理なのでしょうか?
気合入れてググってきます・・・。
>>695
そのexif_read_data()の逆の関数があればラクなんですけど・・・
exif_write_data($image,"comment","hogehoge");みたいな。
0726Imo ◆.jC7ANgFY. 04/08/02 19:39ID:???
>>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
0727nobodyさん04/08/02 19:58ID:???
>>722さん>>724さんレスありがとー

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

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

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

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

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

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

よろしくお願いします。
0732nobodyさん04/08/02 23:42ID: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です。
0733nobodyさん04/08/02 23:47ID:???
ポカーンな質問でとても申し訳無いのだけども...

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

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

激しく目から鱗です、謝々!!
0738nobodyさん04/08/03 01:30ID:???
アロー演算子な
0739nobodyさん04/08/03 02:10ID:OM2Aei59
コンストラクタでnewしてそのクラス内で
$this->オブジェクト->メンバ名
としても
Object->メンバ名
となってしまうんですが、どこがおかしいのでしょうか?
0740nobodyさん04/08/03 02:22ID:Q+9yurzP
その「Object->」はどっから出てきたんだ?
具体的なエラーメッセージor挙動を書きなさい
074173904/08/03 02:29ID:OM2Aei59
すいません、言葉足らずでした(^^;
設定情報を格納するクラスをつくっていて、
他のクラスのメンバにそのクラスのオブジェクトを生成・代入し、
print "なんたらかんたら$this->オブジェクト->メンバ名";
みたいな感じで出力させたところ、何故か出力が
Object->メンバ名
になってしまうのです。
一応C++をやっていたのですが、PHPではpublicなメンバみたいなのは使えなかったりするのでしょうか?
0742軟式PHP04/08/03 09:13ID:???
<?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が出力されるけど、こういうことではない?
0743軟式PHP04/08/03 09:14ID:???
あ、タブで区切っちゃってた。・゚・(ノ∀`)・゚・。
適当なところにスペースよろしく。
0744Imo ◆.jC7ANgFY. 04/08/03 10:39ID:???
>>741
print "なんたらかんたら{$this->オブジェクト->メンバ名}";
こうやってみたらいかが?
0745nobodyさん04/08/03 13:20ID: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()」関数に
リンク(エイリアス?)するような方法はないでしょうか?
074673904/08/03 13:36ID:???
>>742-744
レスどうもです!

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

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

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

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

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

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

メリットが特になければ、
「スピードには問題ない!」で押し通そうと思っているのですが...
0751nobodyさん04/08/03 15:41ID:???
セッション情報をクッキーでブラウザに渡すとき、
Set-Cookie ヘッダは session_start() 関数を実行するときに表示されているんでしょうか?
環境は 4.3.6 + FreeBSD のレンタル鯖です。
0752nobodyさん04/08/03 16:03ID: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を表示する方法が分かる方がいたら教えてください。
0753nobodyさん04/08/03 16:11ID:???
>>752
>>488
0754nobodyさん04/08/03 16:17ID:???
>>749
「人生いろいろ、会社もいろいろ、社員もいろいろだ」 
小泉純一郎首相様が言ってました。
0755nobodyさん04/08/03 16:47ID:???
>>750
取り合えずPHP4が前提でいいのかな?
「メモリにキャッシュ」をどのようにイメージしてるかが
ちょっと不明だが、サブプログラムのincludeでも
メインプログラム上のfunctionでの記述でも実行前に
メモリに取り込まれるのは変わらない。またこれは、
includeの箇所が実際に実行されるされないに関わらない。
スピードに関わるとしたら、includeの場合はファイルのopenや
close等の処理などで、塵も積もれば的な差異が出る可能性はある。
しかしその程度は瑣末な事。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0809nobodyさん04/08/04 18:50ID:???
日本語の添削始めちゃったよ
0810nobodyさん04/08/04 18:56ID:???
うわぁぁぁん;;文字サイズ13pxなのにかなりデケーヨ;;
0811nobodyさん04/08/04 19:01ID:???
[<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に変数が格納されません、なぜでしょうか?
0812nobodyさん04/08/04 19:09ID:oguY/FCP
>>811
実際のブラウザ上でアンカーのhrefは何になってる?
081381104/08/04 19:10ID:???
ごめんなさい、”いつのまにか”ちゃんと表示されました・・・
本当迷惑かけてごめんなさい・・・釣ってきます、、
0814nobodyさん04/08/04 19:20ID:???
なんだ register_globals の問題かと思った。
0815nobodyさん04/08/04 19:36ID:5xfxrndz
入力されたデータをDBに書き込みたいんですが、
普通にINSERT文をクエリー発行すると
複数ユーザに同時に書き込みされた時に
DBアクセスが著しく遅くなってしまいます。
同時アクセスを防ぐ方法として、
一個のフラグのようなファイルを作ってみたのですが
どうも確実に同時書き込みを防いでくれません。
その辺を便利に防いでくれる関数はないでしょうか?
それか、便利な防ぎ方が載っているサイトがあれば教えて下さい。
0816nobodyさん04/08/04 19:53ID:???
テーブル構造が悪いんじゃなかろうか?
0817nobodyさん04/08/04 19:55ID:???
ぽまいら、>>791はXPでテトラプログラミングをしている先進的な学校の生徒でつよ

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

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

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

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

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

とか。

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

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

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

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

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

0831nobodyさん04/08/04 23:23ID:???
>>830
PostgreSQLを使うのにsybaseの関数を何故使うのか、ということだと思うのだが。
元質問の話に戻すと、まぁ、なんだ。おまいもマニュアル嫁。
PostgreSQL関係の関数って高々70個くらいだろ。
0832nobodyさん04/08/05 00:46ID:jHqBsTPN
>>829
とりあえずここ見て設定確かめろ
http://tsuttayo.sytes.net/php/char_trn/
0833nobodyさん04/08/05 01:20ID:???
会員制の掲示板を作ったとして、
その人がログインしているかどうか確かめることってできますか?
ID、PASSを入力してログインするとログインしている人の名前が出るとか・・・
またブラウザを閉じるとその人の名前が消えたり・・・
0834nobodyさん04/08/05 01:38ID:???
何もかもダメダメだな
0835nobodyさん04/08/05 02:45ID:???
マニュアルから逆引きの方法教えてください・・・
0836nobodyさん04/08/05 03:06ID:???
Parse error: parse error, unexpected $ in 94って何すか?
特にミスっている場所ないのですが・・・
0837nobodyさん04/08/05 03:14ID:???
>>833
cookieかsession
083883604/08/05 03:15ID:???
ちなみに文はこれです
<?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>";
}
}
?>
0839nobodyさん04/08/05 03:15ID:???
>>836
ミスってなきゃエラーでねぇよ
0840nobodyさん04/08/05 03:19ID:???
これで満足?

<?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>";
}
}
}
?>
084183604/08/05 03:23ID:???
まだまだ欲求不満ヽ(;´д`)ノ
(ちなみにexplodeてなんだろ)
0842nobodyさん04/08/05 03:31ID:???
正規表現いらないときはsplitよりexplodeのほうが高速

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


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

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

上の二つを呼び出す文
085083604/08/05 04:47ID:???
<?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に変数が格納されません・・・。
0851nobodyさん04/08/05 04:53ID:???
>>848
何したいのかわからん

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

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

P.S マニュアル読んでもわかんねーよヽ(`д´)ノウワァァァァン
0873nobodyさん04/08/05 08:43ID:???
>>872
これ嫁
http://www.sra.co.jp/people/t-ishii/php_new/php4_new.html
087453604/08/05 09:04ID:???
おはよー。今日もマニュアルひき頑張ろうぜ。

>>869
>>871
お前ら言い過ぎw
0875nobodyさん04/08/05 09:06ID:???
while ($A != 0 and $B != 0)
0876軟式PHP04/08/05 09:07ID:???
>>874
他スレでの名前になってた。・゚・(ノ∀`)・゚・。
0877nobodyさん04/08/05 09:10ID:???
クッキーにa'b"cという文字を保存してそれを出力するとa\\\\\\\'b\\\\ってなってしまうのですが
どうしたらいいでしょうか?
0878nobodyさん04/08/05 09:14ID:???
$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);
}

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

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

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

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

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

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

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

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

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

array_merge()は undef でもマージできるけど
+ だと 型違いでマージできず。
0928nobodyさん04/08/05 19:28ID:???
セッションってやたら便利だけど
キャッシュが効かないのが嫌。仕方ない?
0929nobodyさん04/08/05 20:01ID:???
>>928
そんなおまいのためにsession_cache_limiterですよ
0930nobodyさん04/08/05 20:09ID:???
>>928
>>929
0931nobodyさん04/08/05 20:34ID: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文の中が、文字列の比較になってしまって、
どうしても取り出せないんです。

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


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

<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";
}
0933nobodyさん04/08/05 20:58ID:???
あ、すまぬ可変って内容でしたね・・ちょっと寝ぼけてまつ
hiddenで別に渡せないかなぁ?
0934nobodyさん04/08/05 21:09ID:???
・・・hiddenでも出来ないかな、これでどうかな?

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

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

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

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

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

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

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

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

>>950
理解できないなら使わなければいいじゃない。
つーかクライアント側の元ファイル名なんて使いたいとも思わないな。
どんな文字入ってるか分からんし。
095394604/08/05 23:53ID:???
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
0954nobodyさん04/08/05 23:55ID:???
>>953
で、訳してみたらどういう意味だった?
0955nobodyさん04/08/06 01:31ID:ZX7YO8MK
おれもあぷろだ作ったけど、普通は何度も実験して覚えるもんだがなぁ
結果だけ急いでると勉強にならんよ
0956nobodyさん04/08/06 02:56ID:OcQEeCf3
上げての質問お許しを。

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


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

>596 でなくて >956 ですた。
0973nobodyさん04/08/06 13:11ID:???
>>956
0974nobodyさん04/08/06 13:41ID: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だと最後の「/」部分で前と後ろを分解する方法はないでしょうか?
よろしくお願いします。


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

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

)
0978軟式PHP04/08/06 14:38ID:???
http://php.s3.to/man/features.file-upload.errors.html
097997704/08/06 14:41ID:???
>>978
スマン、読んでも理解不能・・・
0980nobodyさん04/08/06 14:48ID:???
>>977ではエラーコードが2だと出ている。
その上で>>978を読めば分かると思うんだけど・・・

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

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
)

)

とりあえず吊ってきます ||
0983軟式PHP04/08/06 15:05ID:???
ああ、そこのサーバーじゃ無理かもな。セーフモードかかってるよ。
0984nobodyさん04/08/06 15:07ID:???
AAACAFEの糞やろーーーーーうわああああああああああああああん!!!
0985nobodyさん04/08/06 15:10ID:???
そろそろ次スレ建てまつか
098698204/08/06 15:26ID:???
って・・・画像うpのCGI使えるんだからうpできるでしょ?
0987nobodyさん04/08/06 15:30ID:???
(ノ∀`)アチャー ほんと、基本からやれや
0988軟式PHP04/08/06 15:31ID:???
PHP側の制限であってperlの制限ではない。
0989nobodyさん04/08/06 16:24ID:???
知ったかは分からないエラーを全てセーフモードのせいにするようだ
099097604/08/06 16:33ID:???
うんむ・・
$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にしないと
いけない状態。。
どうすればいいんだろうか。。
0991nobodyさん04/08/06 16:36ID:???
>>989
原因や解決策がわかるなら答えてみろよ。
できねーんだろ?
ならセーフモードのせいかどうかわからないってことだ。
つまりお前みたいなやつが一番の知ったか。
0992nobodyさん04/08/06 16:40ID:???
【次スレ】

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

. .996

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

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