1 :
nobodyさん :
04/07/16 07:12 ID:KvHeypq/
2 :
nobodyさん :04/07/16 07:13 ID:KvHeypq/
3 :
997 :04/07/16 08:08 ID:G5BXIcyS
http://ns1.php.gr.jp/pipermail/php-users/2003-December/019882.html preg_replace_callback関数の勉強のために上記のHPより以下のものを引用させて使ってみようと試してみたのですが
どうもうまく動作いたしません。
$html = preg_replace_callback( '/\[\[(.+):(.+)\]\]/', 'makeLink', '[[title:url]]' );
function makeLink($m){
return '<a href="'. rawurlencode($match[2]). '">'. htmlspecialchars($match[1]). '</a>';
}
error messageは
Warning: preg_replace_callback() requires argument 2, 'makeLink', to be a valid callback in
これは関数の定義がおかしいという解釈でよろしいのでしょうか?もしよろしければどこがおかしいのかご指摘お願いいたします。
「\0」などの文字を挿入し、例えば「script」タグを「\0script」と偽装することで、 危険なスクリプトがstrip_tags()を通過できてしまう。 ↑ってあるけどさぁ、PHP 4.3.7以前のバージョンでも通らないんだけど。 嘘のアナウンスながすなよなぁ
5 :
994 :04/07/16 09:56 ID:???
>3 $html = preg_replace_callback( '/\[\[([^:]+):([^]]+)\]\]/', 'makeLink', '[[title:url]]' ); function makeLink($match){ return '<a href="'. rawurlencode($match[2]). '">'. htmlspecialchars($match[1]). '</a>'; } $mで引数で受けているのに$matchになってるよ
>>4 strip_tags() に第2引数を指定したときの問題。
echo strip_tags("<\0script>alert()</script>", "<s>");
として確認。
XSS が可能かどうかはユーザが使用しているブラウザによるけど。
IE は XSS が可能だったかな。
7 :
994 :04/07/16 10:36 ID:???
どう頑張ってもダメだったからsudoで強引に実行するようにしたよ セキュリティうんこ過ぎヌルポ(゚д゚)<シメジ
8 :
nobodyさん :04/07/16 11:12 ID:VHr1659r
9 :
nobodyさん :04/07/16 12:09 ID:G5BXIcyS
$text=preg_replace_callback('/>([0-9]+)/','henkan',$text); function henkan($str) { $int = $str[1]; //--取得された数字で処理 return $int; } text配列内に文字列が格納されておりその中から ’>num(数字)’ にあてはまる部分を正規表現詮索し <P title="<?php print("説明文"); ?>"> >num(数字) </p> このように置換させたいのですが functionをどう定義すればよいのかよくわかりません。どなたか詳しく教えていただけないでしょうか?
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) / ネットワークワークステーション / 開発ツール / ドキュメント
12 :
11 :04/07/16 13:10 ID:???
PostgreSQLなどを絡めたプログラムでトランザクションのテストを したい時は皆さんどうされてます?複数のPCで同時に送信!とか しか思いつかないんですが○| ̄|_
私はやったことないですが、 $time = ceil(time() / 120) * 120 sleep($time - time()); などと行頭に入れてみて、20個ほど起動すればいかがでしょう。 ふと思いついたことなんで参考までに。
セミコロン抜けてましたと報告ついでに軽く説明。 $time = ceil(time() / 120) * 120; sleep($time - time()); 1行目でちょうどよい時間(次の偶数分00秒を決定する) 2行目でそのときまでsleepする。 運悪く偶数分00秒とかそういうのにあたらなければ大丈夫なはずです。 誤差は1秒ほどありますが、
16 :
nobodyさん :04/07/16 14:05 ID:xpSWVZ91
質問です。 touchなどでファイルを作成すると所有者がapacheになります。 chownは無効なので他に変更する方法はないでしょうか? 今のところ umask(0); で動作は問題ありませんが、 何か手がありましたらお願いします。 レンタル鯖 Linux Apache/1.3.29 (Unix) PHP/4.2.4-dev safe_mode:off
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\" )となります。
>>16 execやvirtual関数を使いcgiを通してファイルを作成する方法しかないようです。
# execでログインすることもできるかも・・・
19 :
10 :04/07/16 14:26 ID:???
20 :
17 :04/07/16 14:29 ID:???
enctype忘れてました;;すいません
>>14 なるほど、その手法でトランザクション処理のテスタークラスなんか
作ってみて実験してみたいと思います。ありがとです(*´ω`*)b
22 :
16 :04/07/16 15:24 ID:vSsgWICn
>>18 レスありがとうございます。
その方向で調べてみます。
質問です。 変数名を得る方法は無いでしょうか?
>>23 こういうこと?
print_r($GLOBALS);
正規表現スレから誘導されてきました。 全角・半角を無視して検索文字列をハイライトするいい方法ありませんかね? パフォーマンスが悪いのは承知で、 $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のオプションで全角半角を無視ってのできないかなあ。
28 :
nobodyさん :04/07/16 17:43 ID:23o0JgNK
WinXPのHomeでPHPを4.3.7から4.3.8に変えたんですが… phpinfo()で見ると SERVER_SOFTWAREにはApache/2.0.49 (Win32) PHP/4.3.8 と表示されてているものの 一番上のバージョン表記とHTTP Response HeadersのX-Powered-Byは 4..3.7のままです バージョンアップ方法は phpフォルダをそのまま全部上書き php.iniを上書き とやったのですが他に何かやらなければならないことってあるんでしょうか?
29 :
nobodyさん :04/07/16 17:46 ID:3Z+JZGJD
>>28 php4ts.dllをC:\Windows\system32にコピーしてみ
30 :
nobodyさん :04/07/16 18:01 ID:23o0JgNK
31 :
nobodyさん :04/07/16 18:08 ID:LgkOLcz8
質問です。 サーバ上にある●●.htmlというファイルを、 毎日0時にbackup_●●.htmlという風にコピーしてバックアップをとりたいのですが、 タイマーみたいに時間指定でプログラムを動かすにはどうしたらいいでしょうか?
>>33 cronを使えるサーバーは少ないのでこういうのはカウンタに連動させたりするのがベスト。
>>34 目的がバックアップと言ってるのにそれのどこがベストなんだよ。
>>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;}
37 :
nobodyさん :04/07/16 19:11 ID:ctj/r83y
>>33 >>34 Windows だって タスク・スケジューラー や
Cygwin 版の cron (+cygrunsrv) で できるんではないでしょうか
38 :
nobodyさん :04/07/16 19:14 ID:ctj/r83y
>>37 >>34 は cron が自由に設定出来るようなプロバイダ鯖は、
あまり無いといいたいと 見た
日本語はちょっと不自由ってことか。
41 :
nobodyさん :04/07/16 19:33 ID:ctj/r83y
>>27 while(($p=strpos($l,$key))!==false){
$l=substr_replace($l,'</span>', $p+strlen($key),0);
$l=substr_replace($l,'<span class="search-match">', $p,0);
}
>>31 cronが無理な環境なら、timeで、たとえば0時の1時間以内に誰かがアクセスした時に起動させて、
それ以降はフラグ立てて起動しないようにし0時を過ぎたらフラグを消すとか・・・
指定時間内に確実にアクセスする必要があるけどね。
>>43 0時でいいなら、最終のバックアップ日付を記録しとけばいいだけだと思うけど。
それ見りゃ処理すべきかどうか判断できて、指定時間がどうのとか莫迦な制限もない
そもそも一日しか有効でないバックアップに意味は無い 設計やり直せ
>>44 すみません。それはどうやってやるんですか?
>>46 (例えば)トップページ等にアクセスされた時に、
以前バックアップされた日時を確認
↓
その日時から(例えば)1日経過していなかったら終了
↓
バックアップ処理
↓
今の日時を「以前バックアップした日時」として記録
じゃないのか?
$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時ごろにバックアップできるぞ!
49 :
nobodyさん :04/07/16 22:06 ID:mEB25GsK
php-4.3.8にアップグレードしようとしたら gcc: sapi/cli/php_cli.o: No such file or directory gcc: sapi/cli/getopt.o: No such file or directory *** Error code 1 がでてmakeできない よくわからんから元の4.3.6に戻した
50 :
カポコン :04/07/17 02:48 ID:???
51 :
17 :04/07/17 12:04 ID:???
PHP5で $_REQUEST = array_map('htmlspecialchars',$_REQUEST); すると「〜」が、?になるのですが仕様の変更ですか? PHP4の時でもなったいたのだろうか・・記憶にないのですが。
52 :
51 :04/07/17 12:05 ID:???
すると「〜」が &#12316;に
53 :
カポコン :04/07/17 14:50 ID:???
>>48 header("Pragma:no-cache");かclearstatcache()
54 :
nobodyさん :04/07/17 16:18 ID:cAUyli63
$mail_data=Array(); $mail_data ←この中に、メールのヘッダから本文までごっそり入ってるんですが、 そのなかから、メールアドレスだけ抜き出すにはどうしたら良いでしょうか?
55 :
nobodyさん :04/07/17 16:36 ID:CrUOMyEi
正規表現
>>54 抜き出すための特徴は無いのか?
通常のメールヘッダなら、
To: 、Date: 、From: 、Subject: 、Content-Type: ..が\r\nで区切られているから
To や From の行を抜き出せばいいだけじゃないのか?
それ以外なら
>>55 の言っているように正規表現で抜き出すしかないぞ?
perlメモのページにメールの正規表現が載ってるがチビるよ?いやまじで。
>56 From:だけを抜き出そうと思っています。 正規表現でやってみます。 どうもでした。
58 :
54 :04/07/17 18:30 ID:cAUyli63
>56 $grep="/^From:(.*)$/"; print_r(PReg_Grep($grep, $mail_data)); こんなことを、試してみましたがうまく抜き出せません。 PReg_Grep関数じゃだめなんでしょうか?
>>58 やり方は合ってるよ。preg_grepで問題なし。
試しに手元のメールデータを突っ込んでみたが問題無く動く。
それで動かないなら、$mail_dataが想定と違うんじゃないかな?
$mail_dataを一行ずつ表示して確認してみたら?
60 :
58 :04/07/17 19:39 ID:cAUyli63
>59 ごっそり、連なってる、データ郡からとってきてくれるのかと思いました。 StrTokでばらばらにしてやってみます。
61 :
nobodyさん :04/07/18 11:12 ID:yQjoCnlA
63 :
nobodyさん :04/07/18 11:53 ID:FJ1yfCK5
>>63 マニュアルに書いてあるんだけれども、OSとPHPのバージョンの条件はクリアしてるの?
>>63 俺はできたよ(当方Apache/2.0.48 (Win32) PHP/4.3.4)
>>64 の言うとおり問題はOSとPHPのバージョンだと思う。
>>65 4.3.8にバージョンうpした方がいいんでない?
67 :
◆JirmzAivjs :04/07/18 14:32 ID:Br0Ka4RM
>>63 <?php
$var_no = "";
import_request_variables("GP", "var_");
$inc = "
http://192.168.0.1/test.php?no= " . $var_no;
include $inc;
?>
とかやってもだめ?
ASPに対してPHPでSOCKETを使用して接続したいのですが、
どうしてもSOCKETで接続が出来ません。
ASPのSESSIONがクッキーで発行されているのがネックなんですが、どうにかする方法はないのでしょうか?
>>67 ASPから発行されたクッキーをPHPから渡してあげればいいのでは?
別の言い方をすると、セッションが継続する間中 ずっとPHPで面倒を見るってことだけど。
マルチタスク
71 :
69 :04/07/18 17:47 ID:???
72 :
nobodyさん :04/07/18 18:16 ID:ajil2/nN
fedora core 1 に最初から入っていたPHPを4.3.6から4.3.8にしようと思って ソースをコンパイルしてインストールしたんですが $ php -v の結果は4.3.8なのにサーバ上でphpinfo()を表示させると4.3.6のままです どこがダメなんでしょうか
会員制画像アップローダで画像をファイルとしてアップロードした 場合、絶対パスでアクセスされてしまう可能性があると想うのですが、 みなさんはどうされていますか?。 拡張子の変更などをしても内容のデータがそのままであれば見るのは 容易だと想うのです。 画像データを暗号化し画像を表示する時にPHP経由で複合化して 表示するか、またはSQLなどに放り込んでしまうか、サーバーに拡張子 によるアクセス拒否が出来るならそれを使う等しか思い付かないのです が他に良い方法はあるのでしょうか?。
>>72 どういう風にインストールしたか秘密にしているあたりがダメダメだね
76 :
nobodyさん :04/07/18 18:51 ID:ajil2/nN
>>75 スマソ
apacheは2.0.49
$ ./configure \
--host=i386-redhat-linux --build=i386-redhat-linux --target=i386-redhat-linux-gnu \
--program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin \
--sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include \
--libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com \
--mandir=/usr/share/man --infodir=/usr/share/info --cache-file=../config.cache \
--with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d \
--enable-force-cgi-redirect --disable-debug --enable-pic --disable-rpath \
--enable-inline-optimization --with-bz2 --with-db4=/usr --with-curl \
--with-exec-dir=/usr/bin --with-freetype-dir=/usr --with-png-dir=/usr \
--with-gd --enable-gd-native-ttf --without-gdbm --with-gettext \
--with-ncurses --with-gmp --with-iconv --with-jpeg-dir=/usr \
--with-openssl --with-png --with-pspell --with-regex=system \
--with-xml --with-expat-dir=/usr --with-dom=shared,/usr
77 :
nobodyさん :04/07/18 18:52 ID:ajil2/nN
--with-dom-xslt=/usr --with-dom-exslt=/usr --with-xmlrpc=shared \ --with-pcre-regex=/usr --with-zlib --with-layout=GNU --enable-bcmath \ --enable-exif --enable-ftp --enable-magic-quotes --enable-safe-mode \ --enable-sockets --enable-sysvsem --enable-sysvshm \ --enable-discard-path --enable-track-vars --enable-trans-sid \ --enable-yp --enable-wddx --without-oci8 --with-pear=/usr/share/pear \ --with-imap=shared --with-imap-ssl --with-kerberos --with-ldap=shared \ --with-mysql=shared,/usr --with-pgsql=shared --enable-ucd-snmp-hack \ --with-unixODBC=shared --enable-memory-limit --enable-bcmath \ --enable-shmop --enable-calendar --enable-dbx --enable-dio \ --enable-mcal --enable-mbstring --enable-mbstr-enc-trans \ --enable-mbregex --with-apxs2=/usr/sbin/apxs \ $ make # make install でhttpd.confに LoadModule php4_module modules/libphp4.so を加えてapacheを再起動したら [Sun Jul 18 18:44:53 2004] [warn] module php4_module is already loaded, skipping と怒られた。それ以前にLoadModule php4_module modules/libphp4.soやAddType application/x-httpd-php .php がhttpd.confに書いてないんだけどなんでかな
78 :
73 :04/07/18 19:00 ID:???
>>74 今は自前鯖なんで、httpd.confに書いてたり^^;。
ゴメンヨ・・・。
配布とか考えた時に.htaccessが使えないレンタル鯖とかも
あると想われるので何か良い手だてはないものかと・・・。
79 :
nobodyさん :04/07/18 19:44 ID:Sl8hc8ID
php.iniの更新して、Apacheの再起動したら幸せになれるかも。 その際、register_globalをOnにしときなされ。
>>78 データベースにバイナリを書く方法あるが、普通はそんなことせんからなぁ。
htaccess使えないところはサポート外にしとけ
>>72 WinXPの場合はphp4ts.dllをsystem32に放り込めばいいと教えてもらったけども…
リナックスはわからんね
>>80 処理を重くするのもどうかと思いますしね・・・
ファイル名をややこしくするだけにしておきたいとおもいます
>>81 4.3.6をちゃんと削除してからインストールした?
httpd or apacheは再起動させた?
質問です。 <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になるということです。 どうしてこうなるんですか?
86 :
72 :04/07/18 22:22 ID:???
>>83 前のバージョンをアンインストールしていなかったので
# rpm -e php
で関連パッケージを削除してmake install し直してphp.iniをphp.ini_dist
をコピーしてhttpdを再起動しようとしたら今度は
Syntax error on line 199 of /etc/httpd/conf/httpd.conf:
Cannot load /etc/httpd/modules/libphp4.so into server: /etc/httpd/modules/libphp4.so: cannot open shared object file: No such file or directory
と怒られてしまいました
libphp4.soはどこ行っちゃったんでしょうか
>>87 ハァハァ(*´д`*)━( *´д )━( *´)━( )━(゚ )━(Д゚ )━( ゚Д゚ )ハァ?
90 :
nobodyさん :04/07/19 00:27 ID:eJnEJcBx
PHPUnit2の使い方がわからん・・・ だれかおしえてください
91 :
nobodyさん :04/07/19 00:52 ID:qsqOem7W
phpでmds的なファイル分割形式を用いたUPローダー作成を考えているのですが 実現可能でしょうか?どこか参考になるサイト等ありましたらお教えください。
初歩的な質問で申し訳ないが 掲示板をつくり、1つの記事を削除する場合は その記事意外を再度上書きすればいいんだよな?
94 :
nobodyさん :04/07/19 10:26 ID:zI9w6JFi
質問です。バージョンはphp-4.3.3です。 $a = array('田中太郎<>12<>りんご<>','山田太郎<>16<>なし<>','吉田太郎<>12<>すいか<>'); のような配列を<>で分割した2番目の要素(12,16,12)でソートするにはどうすればいいんですか? ソート後は 山田太郎:16才:好物なし 田中太郎:12才:好物りんご 吉田太郎:12才:好物すいか のように2番目の要素(12,16,12)以外も表示したいんです。
PHPをちょっと勉強してみようかなと思い
ttp://www.yumenara.com/pwp/ のサイトを読んで
現在の時刻を表示させる<?php echo date("n月j日") ?>を入れてみたんですが
何故か文字化けして「79」としか表示されません
どうすればいいんでしょう?
PHPバージョンは4.3.8でサーバーはApache2.0.49
OSはWinXPです
ちなみにp2というPHPで作られた2chビュアーは文字化けせずに正常に表示されます
96 :
95 :04/07/19 11:04 ID:JjQNbyQZ
上げ忘れました すいません
普通は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);
>>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);
100 :
95 :04/07/19 11:35 ID:JjQNbyQZ
>>98 mbstringは導入してました
php.iniの設定も色々変えてみましたが直りませんでした
全角の文字が表示されていないようなんですが…(全て全角で入力すると何も表示しませんでした)
103 :
95 :04/07/19 11:51 ID:???
>>100 だからどういう設定になってるのか訊いてるんだよ
日本語解らないの?
>>103 文字エンコーディングの設定はどうなってるの?
ソースのそれはどうなの?
やらなきゃいけないのは正しい設定にすることで、
闇雲に変更することじゃない。
どうしたらいいのか分からない場合は
>>98 のEUC-JPの設定にして
ソースもEUC_JPで書くのがお勧め。
106 :
95 :04/07/19 12:19 ID:???
>>104-105 文字エンコーディングはSJISでやってます
EUC-JPはp2で設定ファイルを編集する時文字化けしたので止めました
ソースは
<HTML LANG="JA">
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=Shift_JIS">
<TITLE></TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" ALINK="#FF0000" VLINK="#800080">
<P>今日は<?php echo date("n月j日") ?>です。</P>
</BODY>
</HTML>
>>106 php.iniの設定はどうなってるの?って訊いてるんだけど
釣りか?
108 :
95 :04/07/19 12:38 ID:???
>>108 ・・・。
アンタさっきphp.iniの設定をいじったって言ってたけど
今はそのページの内容に戻ってるって事かい?
自分の環境のphp.iniのmb_string関連の部分をコピペしろよ
110 :
90 :04/07/19 12:48 ID:???
もう放っといた方が良いよ。自分で理解する気もないみたいだし。
釣りとしか思えねー
113 :
94 :04/07/19 13:51 ID:???
できました。答えてくれた方ありがとうございました。
<A href="./index.php">あああ</A> リンク「あああ」をクリックした時に、 同時に変数を代入(例えば$name="yamada"など)できないでしょうか?
>>114 href=index.php?name=yamada
ってことかい?
116 :
114 :04/07/19 14:13 ID:???
>>115 なるほど、皆そうしているのですか!
有難うございます><
117 :
114 :04/07/19 14:23 ID:???
<?php if ($main == "kikaku") $page = "./page/kikaku/index.html" ?> クリックしてmainがkikakuになった状態で上の文を記述していれば <?php echo $page ?>の部分に上のファイルが開かれるんですよね?
118 :
114 :04/07/19 14:25 ID:???
ページが 「./page/kikaku/index.html」とそのまま表示されますた;;
119 :
114 :04/07/19 14:30 ID:???
<?php if ($main == "kikaku") $index = "./page/kikaku/index.html"; $page = file($index); ?> にしたら「Array」になりました・・・ どなたか助けてください;;
なんか参考書でも読んでこい。 なにがしたいか知らんが、おそらくincludeでできる
121 :
114 :04/07/19 14:46 ID:???
includeトカ全然シラナイヤ
122 :
114 :04/07/19 14:48 ID:???
>なにがしたいか知らんが PHPのページの一部に他のページを貼り付けるということです
123 :
114 :04/07/19 14:58 ID:???
デキター! 回答してくれた方ありです!
夏ですなぁ
あと1ヶ月ちょいは耐えるしかない
すみませんが教えてくだちぃ。 ファイルアップロードで、下記の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>
>>126 upfile.phpの最初にphpinfo()書いてよく眺めればわかるよ
128 :
PHP :04/07/19 21:51 ID:4+OKTR+f
PHPで配列自体をソートするときってどうしたらいいの? Array[0](A0,B0,C0) Array[1](A1,B1,C1) Array[2](A2,B2,C2) でBの項目でソートしたいときってどうしたらいいの?
129 :
126 :04/07/19 21:59 ID:???
>>128 http://www.teu.ac.jp/chiit/~dsuzuki/phpdoc/function.array-multisort.html <?php
$list[0] = array('A2','A1','A0');
$list[1] = array('B1','B2','B0');
$list[2] = array('C0','C1','C2');
//ソート前
print("ソート前<br>\n");
for ($i=0;$i<sizeof($list);$i++) {
for ($j=0;$j<sizeof($list[$i]);$j++) {
$str = $list[$i][$j];
print("$str\n");
}
print("<br>\n");
}
array_multisort ($list[1],SORT_DESC,SORT_STRING,$list[0],$list[2]);
//ソート後
print("ソート後<br>\n");
for ($i=0;$i<sizeof($list);$i++) {
for ($j=0;$j<sizeof($list[$i]);$j++) {
$str = $list[$i][$j];
print("$str\n");
}
print("<br>\n");
}
?>
これを自分なりに変えてみ。
http://pc5.2ch.net/test/read.cgi/jisaku/1089171507/ でがんばってまつ。
132 :
xxx :04/07/20 01:57 ID:zj8DyYfz
ごめんなさい!本当に分からないです。 Array ( [0] => 2004072000<>0<>xxx<>2<>0 [1] => 2004072000<>0<>index<>0<>0 ) の配列を中の[3]の配列の値でソートして、[2]の値のついたdatファイルを読み込んで表示させたいんです。 どうしたらいいか分かりません…。 どうしたらいいんでしょう?
133 :
nobodyさん :04/07/20 02:34 ID:TlHHsRNJ
すいませんが解決法あったら教えてください。 HTML中の一部を繰り返したいのですが、 <html> <body> <?php for(i=0;i<10;i++){ ?> test<br> <?php } ?> みたいに書くことってできないんですか?JSPのように。 なんかエラーになってしまったんですが。
134 :
133 :04/07/20 02:37 ID:???
ごめん。 <? for($i=0;$i<10;i++){ ?> だった。<?だけでいいんだね。↑は$もついてないし。 ごめん。 マジごめん。
135 :
xxx :04/07/20 02:58 ID:zj8DyYfz
<html> <body> <?php for($i=0;$i<10;$i++){ print("test<br>\n"); } ?> じゃだめなの?
137 :
xxx :04/07/20 04:10 ID:zj8DyYfz
>136 いざむ(136)さん、出来ました。 ありがとうございました!!
>>133 ちゃんとしたスクリプトを書けばできるよ。
(134でもまちがってるだろw)
たしかPHPの処理としては、<?php ?>の間以外は
そのままechoしてるのと同じ処理だからwhileとか
分割されてもできる。
上で同じ事で迷っているようだから代わりに返事しよう 使用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は試してみたが全部だめだった
>>139 default_charset = "Shift_JIS"を宣言していますか?
mbstringを有効にするのならば
phpインストールフォルダ以下のextensionディレクトリに
php_mbstring.dllは入ってますか?
extension=php_mbstring.dllのコメントはずしてますか?
141 :
nobodyさん :04/07/20 10:50 ID:fJEHV2g/
>>141 print_r(preg_grep($grep, $mail));
143 :
nobodyさん :04/07/20 11:33 ID:fJEHV2g/
>142
ありがとうございます。
しかし、print_r だと、配列の中身全部出てしまいます。
[0] =>
[email protected] ← このメールアドレスだけを、とって、処理に使いたいんです。
145 :
141 :04/07/20 12:50 ID:fJEHV2g/
はまった・・ ob_implicit_flush(1); while (@ob_end_flush()); これ先頭に書いたら表示されました
146 :
nobodyさん :04/07/20 12:57 ID:yRgYyr5n
データベースとの連携で質問です。 フォームから得た値で $query ="insert into table values(0,'$name','$type',$price,'$old','$grade',)"; とレコード追加をしようとしていますが 項目によってはフォーム未入力時も追加可としたいのですが このままではエラーがでます。 上のコードの前に if ($***=="") $***=0; とすれば解決するのですが もっと簡単な方法はないのでしょうか? みなさんはどのようにしていますか?
>>146 フォームから得るキーとそのデフォルトを配列にしておいて、
ループしながらやってる。
どのみち最低でもSQLインジェクション対処せんきゃならんし。
フォーム入力のデータは一通り入力チェックかける様にしてる SQL発行する際はPREPARE使ってる
DBに書き込む際 型がおかしいとき、DBが判断してくれるのでDBが弾くのを任せるか 前もってPHP側で見てやるか、どっちがいいでしょう
親切にエラーが出たフォームとか教えてやるにはPHP側でやるしか無かんべ
PHP側でチェック
152 :
nobodyさん :04/07/20 16:21 ID:yRgYyr5n
フォームから得た値は管理者が入力するフォームで無い限りちゃんとサニタイズしろよ。
WebProg作るならクロスサイトスクリプティングの脆弱性ぐらい気をつけんとね。
DBに突っ込むだけの場合はサニタイズしてません
ログイン時に照会されるのみの情報だからです
>>157 全然意味がわからんのだが
フォームデータにSQL仕込まれたらどうすんの?
SQLから出したデータにもhtmlspecialcharsしておくべきですかね?
入れるときにしてるんなら必要ないよ。
意味が分からんねぇ・・・ "select * from auth where ID = ".$_POST['ID'] としてあとのパスワードやらをmysql_fetch_assocでDBから情報とって調べる
え、俺、自分の欲しい物リストスクリプト作って使ってるんだが 全然サニタイズしてないや したほうがいいのかなぁ・・・
perlと違ってhtmlspecialchars()関数一個ですむのになぜめんどくさがるかねぇ
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からパクッた。マジお勧め
>>161 $POST['ID']='aaa; delete from auth'みたいなのが入ってきたらどうすんの?
166 :
139 :04/07/20 19:56 ID:???
>140 サンクス! default_charset = "Shift_JIS" が抜けてたらしい php.ini default_charset = "Shift_JIS" extension_dir = "extensionsのある場所" extension=php_mbstring.dll [mbstring] mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; ;mbstring.func_overload = 0 これでSJISもEUCも、使えるようになったが ↑以外の設定だとSJISで書いたプログラム側が文字化けしたことを報告する つまり >108 のいう「例 3. SJISユーザ用のphp.iniの設定」では文字化け発生 追加として鯖システムはUNHTTPD。Apacheは他の奴報告してくれ
<form accept-encoding="xxx">これ最強。 PEARのHTML_QuickFormを使えば再帰的にstripslashesしてくれて便利。 サニタイズはPEAR DBのquoteSmart使えばOK. (数値型のデータなら事前にintval/floatvalしとく HTML_QuickFormのaddRuleと組み合わせるとなおよし)
>>165 それでやられちゃうのか
全然知らん買ったよ
sql文を防ぐってdelete select insert updateぐらいをフォームデータに入ってるかチェックでいい?
サニタイズってhtmlspecialcharsだけじゃだめ?
SQLインジェクションはヤバイ。まじでヤバイよ。 まずdeleteできちゃう。もう1レコードなんてもんじゃない。テーブルごと。 何しろ無制限。スゲェ!なんか制限とかないの。 しかも他のテーブルも消せちゃう。ヤバイよ、真っ白だよ。 だって普通は削除できないじゃん。だって削除されたら困るじゃん。 データ消えたら困るっしょ。 だからそのCGIはロールバックできる。話のわかるヤツだ。 けど普通のCGIはヤバイ。そんなの気にしない。消えるだけ。 とにかく貴様ら、SQLインジェクションのヤバさをもっと知るべきだと思います。 そんなヤバい仕事をしてる貴様らとか超偉い。もっとがんばれ、超がんばれ。
>>168 問題なのはこれ→「;」
一度セキュリティ関連のサイトを読むことをお奨めする
>>171 なるほど。
でも、上の場合だと複問い合わせされることもあるよね?
その場合はselectとか見る必要あるよね?
>>168 ポイントがずれてる
>>169 ぜんぜんだめ
MySQLならmysql_real_escape_stringした文字列をさらに'(シングルクォート)で囲む。
(PHP4.3.0未満はmysql_escape_string, PostgreSQLはpg_escape_string)
DB_common::quoteSmartは型を考慮してそこらへんを自動でやってくれる。
>>173 へぇ
じゃあDB_common::quoteSmartだけ使えばいいんですね
>>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するのが望ましいけど長くなるので省略。
>>175 どうもありがとう。
今までPEARは全然使ったことなかったよ。
使った方が簡単そうでいいね。
mysql_real_escape_stringは「;」が素通りしてしまうのですね
>>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」な指定はしないから、
ちゃんと確認して使用すること。
フォームデータでどれをソートするかという情報を送るのですが その場合、許可する文字列を列挙して $regex=hoge|moge; if ( isset($_GET['sort']) && ereg($regex,$_GET['sort']) $sort=$_GET['sort']; としてるんですが、これで十分ですよね?
>>176 DB_DataObject(を継承したクラス)を使えばもっと楽で、
型のキャストとか文字列のエスケープとかを気にしなくてよくなります。
マジおすすめ。
ひとつのクエリにひとつDB_DataObject(を継承したクラス)のインスタンスをつくって使います。
厳密にはそこまでしなくていいかもしれないけど、そうした方がハマらないと思う。
DB接続はグローバル変数に登録して使い回すので大丈夫。
>>177 文字列は''で囲むもんだから。
>>180 自己レス。微妙に嘘ついてた。
WHERE句やORDER BY句とかは自分でサニタイズする必要ありです。
>>180 DBにおいてはWHERE dat='$dat'としておけば$datに「;」が含まれていても
問題が起きにくいという事ですね
PHP5で遊んでいる環境なのでPEARも使えないですし、脆弱性についても
知識不足で穴だらけだったので大変勉強になりますm(_)m
183 :
166 :04/07/20 21:49 ID:???
>178 無論それを読んで、きちんと仕様通り試して文字化け発生して泡食って 最新からある程度古いのまでのWin用package及びinstallerを入れて、試した上で 日本語メーリングを検索かけて対応策が出てこなくて こっちに辿り着いているのだが それでも一つ見落としている辺り節穴だけどさ ソースをビルドする技術が無いんじゃ使うのは無理ってことだよな?
>>182 ダメだよ。
$datが data';delete from table;...
というように、'が入っていると...
' をエスケープしないと意味無い。
>>184 あ、言葉足らずですいません^^;
私はINSERT INTO table SET でしか使わないので、こんな感じで
処理しようと考えているのですが大丈夫でしょうか?
function sql_esc_set($name,$var){
return $name."='".mysql_real_escape_string($var)."'";
}
>>182 もし$datに'や\等の特種文字が入っていたら、問題が起こるので
必ず $dat = mysql_real_escape($dat); しておかないとだめ。
...と書いてたら
>>184 ,185の流れが...
$name に MySQLの予約語(tableとかcreateとか色々)を使うことがあるなら
return "`" . $name . "`='" . mysql_real_escape_string($var) . "'";
だけど、その予定がないならそれでOK.
#PHP5でもPEARのメジャーなクラスは対応しているし、数は少ないけどPHP5専用のクラスもあります。
187 :
185 :04/07/20 22:18 ID:???
ん、難しく考える必要なかったのかも知れない・・・・ Formからのからのデータを全てhtmlspecialcharsとaddslashesとし、 SQLへはdat='$dat'とすれば良いのですよね?
最初から出せカス
インプット/アウトプット先 (DB, シェル, HTML ..) に合わせてエスケープ/除去する それに必要な関数は全部 PHP に揃ってる。 QF とか便利だが、何故・どうしてを理解しないまま道具に頼って終わりってのは違うと思う。 で質問なんですが、 $db->query(,"SELECT * FROM hore WHERE id = {$_GET['id']}"); とかやってたとして、具体的に被害出せます? 例えば '";DELETE FROM hoge; とか突っ込んでも大抵の DB だと無効なクエリになるのでは、、
俺もオモタ
>>165 は失敗するんじゃないか?
1文として送信するんじゃないの?
>>190-191 実行するよ。実際やってみれ。
要は$db->query("SELECT * FROM table;DELETE FROM table");
で後ろのDELETE文を実行してしまうかどうかだが、実行する。
>>190-191 すべて有効になりますね。drop databaseなんて打たれたらどうします?
全部アボーンっすよ((;゚Д゚)ガクガクブルブル
まあdrop権限など無いわけだが
prepare使えるならprepare使っておけば問題ないよね?
196 :
190 :04/07/20 23:53 ID:???
>>192 やってみた。
index.php?gid=50001;DELETE%20FROM%20groups;
で、生成されたクエリが
SELECT * FROM groups WHERE gid = 50001;DELETE FROM groups;
実行結果は
DB Error: syntax error
index.php
--
$db = DB::connect($dsn);
$query = "SELECT * FROM groups WHERE gid = {$_GET['gid']}";
$rs =& $db->query($query);
while ($result = $rs->fetchRow())
{
print "<pre>"; print_r($result); print "</pre><hr>";
}
print "done";
('A`
197 :
190 :04/07/21 00:05 ID:???
>>196 おや、DBによって挙動が異なるのかな?
以前検証したときは、pgsqlでPearDBじゃなくてpg_queryだったんだけど、
確かに後ろ側も実行してましたよ。
ファイルの最終行を取得する効率的な方法ない? めっちゃファイルサイズ大きくて、全部読み込むの大変。
>>198 $l = exec("tail -n 1 $filename");
ていうか delete from groupsでは構文がおかしくないか?
201 :
198 :04/07/21 02:11 ID:???
あ、tailを使えば良いのか。PHPでやろうとしてたらかなぁ、頭になかった。 ありがとん。
202 :
190 :04/07/21 02:28 ID:???
>>197 mysql だす。
MSSQL とか、初期設定で複数のクエリを通すので危険とか昔聞いたような聞いてないような。
>>200 普通に DELETE FROM groups で SQL 発行したら groups デーブルがきれいに空になりますた。
昔、ボルチモアテクノロジーのサイトが脆弱性吐いてた時に発見者の某 ML の中の人が
具体的な exploit コードを晒していたから何かあると思ったんだけど、、
結局、複数のクエリの実行を許していない時は、具体的な攻撃方法は今は無いって事で FA ?
データベース方面は必要最低限しかしらないもので、、頼り切りですまそ。
readfileを使って、重めのファイル(5Mbくらい)を呼び出してダウンロードさせたいのだけど、 あんまりファイルのサイズが大きいとサーバー側に(「RLimitCPU」(CPU占有時間制限)で) CGIプログラムの暴走と見なされることがあるのではないかと心配してるんですが、 実際の所どうなのか、分かる方おりますか?
204 :
nobodyさん :04/07/21 03:40 ID:/GR6B3Fp
preg_replace_callback('/>([0-9]+)/','trans',$str); function trans($str) { //for($i=0;$i<count($str);$i++) //{ $str[0]=$str[0]; //$str[$i]="<a href="'right.php'" name=$text[$i]>".$str[$i]."</a>"; //} return $str; } 実際にはfunction内のコメントアウト部とそうでない部分を入れ替えて使いたいのですがこの状態ですら機能しません。 エラーメッセージは preg_replace_callback("/>([0-9]+)/","trans",$str); function trans($str[$i]) { //for($i=0;$i".$str[$i].""; //} return $str; } Fatal error: Call to undefined function: trans() in right.php on line 184 right.phpの184は $text[$i]=trans($text[$i]); 以上のとおりです。preg_replace_callbackの設定に問題がるのでしょうか?
205 :
nobodyさん :04/07/21 04:05 ID:/GR6B3Fp
ちなみにこれだと
<?php
preg_replace_callback('/>([0-9]+)/','henkan',$str);
function henkan($str)
{
for($i=0;$i<count($str);$i++){
$str[$i]="<a href='
http:// '>'.$str[$i].'</a>";
}
return $str;
}
?>
$text[$i]=henkan(text[$i]);
$twext[$i] に >1 と入れた場合のhenkan(text[$i]) は <1 と不等号の向きが変わってしまいアンカーもつきませんでした。
207 :
nobodyさん :04/07/21 05:10 ID:/GR6B3Fp
>206 ありがとうございました。 解決いたしました。 何でああいう思い込みをしていたのか自分でも想像がつきません。 おそらくどこかのサンプルページを真似て書いたつもりだったのでしょうが、お恥ずかしい限りです。 済みませんでした。
っていうかさ、サニタイズするのも当然だけどお前らバインド使えよw
昨日からの書き込みを見てセキュリティを何も考えずプログラミングしている奴がいっぱいいて吃驚
>>209 PHPは仕事ですか、それとも遊びですか?
class a{ function b($val){ echo $val; } } $obj = new a; $obj->b('test'); ではなく、もっと短くfunction bを呼び出す方法はないでしょうか?
a::b('test');
>>214 てか、半角「英数字」を判定したいのか半角「数字」のみを判定したいのか
よく分からんのだが。とりあえず「^」と「$」をつけなされ。
質問です phpかperlで、mallocを実現することは出来ないでしょうか
219 :
214 :04/07/21 10:15 ID:???
半角英数字ではないですね。すいません。 半角数字だけであれば、'^[0-9]+$'で良いのですね。
ereg 系は遅いのとバイナリセーフでないから使うのが少し恐いかも。 こんなのでも ereg は TRUE だったりするし。 ereg("^[0-9]+$", "1\0test");
>>220 そうなのか。勉強になった。preg系で今後はやっていこう。
>>203 readfile()を使いたいって事は、ダウンロード先を教えたくなかったり、ロックしたりとかしたいということ?
ダウンロードする回数にもよるけど、かなりのCPU使用率になるよ。(一瞬だけど)
連続してダウンロードされると、サーバによっては止められる可能性も高い。
一回、自分のPCで試してみな。
SQLiteって先行きって実際どうなのでしょうか? 今、SQLiteを使ったスクリプトを書いていてふと思った・・・
SQLiteってなんだっけ^^;
うーセキュリティ見直さなきゃ。。 俺の使ってるphp+mysqlな参考書は htmlspecialchars()しか触れてないぞう。 ・・勉強してきます。。
>>225 とりあえず
>>188 のサイトをよく読んで
「サニタイズ」「SQLインジェクション」「クロスサイトスクリプティング」辺りでぐぐってみ
sql発行時にaddslashes、html出力時にhtmlspecialcharsするだけじゃ不十分? あっ入力チェックはきちんと行うとして、、
HTML出力時のhtmlspecialchars SQL発行時はバインド この2つしかやってません
PHPでhtpasswd用の暗号パスワード生成ツールってどうやって作ったらいいですか? crypt使ってですよね?
俺は自作のパスワードジェネレータ使ってます cryptとか使ってないです
現場と遊びは違うんで by カポコン
PEARってなんすか 教えてください
234 :
nobodyさん :04/07/21 15:18 ID:/GR6B3Fp
right.php for($i=100;$i>=0;$i--) { require_once("res.inc"); $text[$i]=preg_replace_callback( "|>([0-9]+)|", "henkan", $text[$i]); print($text[$i]); } rec.inc の中身 <?php function henkan($matches) { return "<a href=#$matches[1]><P title=$text[$i]>>".$matches[1]."</P></a>".($matches[2]); } ?> イメージ的にはこのように レス番号文字列にカーソルを合わせるとそのレス内容が表示され、 かつクリックするとそのリンクへ飛ぶという形にしたいのですが res.incないで$text[$i]が取得できません 文頭にrequire_once("right.php");としても結果は変わりませんでした。どのようにすればright.php内の $text[$i]が取得できますか?ご教授くださいお願いします。
>>234 aタグの中にpタグを包含していいのか?
どうせなら aタグにtitleを書きゃいいじゃないか。
そんで、その程度ならpreg_replaceで十分だろ。
旬は9月から年内いっぱいくらいかな。
cryptって先頭8文字だろ?少なすぎ md5が手軽でいいかと
すみませんが教えてください。 HTTPヘッダのステータスをPHPのスクリプト内部から設定したいんだけど どうしたらよろしいのでしょうか?具体的には、STATUSを500に設定したいのですけど。 header()関数あたりになにか入れればいいのでしょうか?
>>241 そこまで見当がついているなら、先ずはマニュアル嫁。
PHP5を使っているのですが、$_REQUESTにはCOOKIEの情報も 含まれるみたいなのですが、これはPHP4の時からそうなっていた のでしょうか? 今まで気づかなかっただけか・・・^^;。
なつかしい
246 :
243 :04/07/21 18:49 ID:???
>>244 ごめんようぅ print_r($_REQUEST);
ってprint_r使う事がほとんどなかったのよん;
今年のLLWeekendにはどうしてPHP出てないんですか? つか去年はどうして出れたんですか?
>>250 GJ!でもpart12-14はみれないぽ
mb_eregで^を無視するのは仕様か?
夏厨の釣りってこんな程度?
>>253 はぁ?答えられないなら書き込まないでね^^
夏ですなあ
<?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 : ^マルチバイト
*/
257 :
203 :04/07/22 02:29 ID:???
>222 遅れましたがとんくすです。 試しにレンタルしてる鯖でこっそり試してみたら小さいファイルだったら大丈夫そうですが、 RLimitCPUなんかよりもreadfileしたファイルがサイズ制限みたいなのを受けて落ちてきませんでした。 いろんな設定があるもんだなと思いました(自分apacheの設定深くはしらんので…)。 汎用性のあるものを作りたいので諦めました。また他の方法考えてみます。ありがとでした。
変数の入った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"); } ?> とやったら
>>259 途中で送ってしまった・・・
それでこれでは間違ってるようなのですがどうすれば
var.txtに書いたファイル名を1行目から表示していけるか誰か教えてください。
あ、データベースは使えません。
3回includeしてるからじゃ?
include_once()に変えとけ
263 :
234 :04/07/22 05:19 ID:O8WfHKX6
ご指摘いただいたとおりpreg_replaceでやってみることにしました。 $string = $text[$i]; $pattern = "|>([0-9]+)|"; $replacement = "<a href=#\${1} title=$text[\${1}]>>\${1}</a>"; print preg_replace($pattern, $replacement, $string); 前と同じような段階までは進むのですが title=$text[\${1}] やはり同じくこの部分で引っかかってしまいます。 エラーメッセージは Parse error: parse error, unexpected T_CHARACTER, expecting T_STRING or T_VARIABLE or T_NUM_STRING $textないをクオーテーション等でくくってみてもうまくいかず、アドバイスいただけたらと思います。
264 :
ちなみに :04/07/22 05:27 ID:O8WfHKX6
title=title とかけばコメント部にtitleとは出るのですが title=$text[10] 等書いてもその部分はコメントが出されません。 $text[10]には当然値は入っているのですが・・・
>>264 preg_replace_callbackを使って、コールバック関数内でglobal $text, $i;を宣言すればいい。
(元のfor文がグローバルスコープにあるのが前提だけど)
クラスを使えば変数のスコープに悩まされずに済む。
・・・それ以前にa要素のtitle属性に全文をぶち込もうという蛮勇のほうが問題と思うが。
しかもstrip_tagsもhtmlspecialcharsもかけずに。
ポップアップさせたいのならCSSとJavaScriptで対応した方がいいよ。
p2のソースとか参考にしる。
>>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);
268 :
258 :04/07/22 12:01 ID:???
>>267 そこも見つけてはいたんですが、JANコードに対応してないんですよ。
って、
>>258 で書きたいバーコード書いてませんでしたね。
JAN13 を書きたいんです。
そこだけ GD::Barcode で逃げるしかないかなぁ。ちょっと悔しいですが。
269 :
nobodyさん :04/07/22 12:22 ID:IcVwk4jf
>>252 について教えてくださいYO
$str = "<br />\n<br />\n<br />\n<br />\n<br />\n";
$str = mb_ereg_replace("^<br />", " <br />", $str);
print($str);
で、なんで下のようになるのよ。
<br />
<br />
<br />
<br />
<br />
本当に困ってます。お願いします。
>>269 <br />
<br />
<br />
<br />
<br />
こうなるが、どうなるようにしたいんだ?
>>269 こうしたいのかな。
$str = mb_ereg_replace("^<br />", " <br />", $str, "m");
それにしても、PHP マニュアルにマルチバイト正規表現のオプション説明は目立たない・・・。
>>269 ちゃんと動いてるじゃん
100歩譲って全角と半角の空白の差し替えくらいしか見えないが
判別不能
それがどうっしたっ!269はあっほだよっ♪
なつかしい
教えてください。 緊急で困っています。 PHP4.0.6+IE6を使って開発しています。 何故か急にセッションが効かなくなりました。本当にいきなりです。 配列変数をセッションで保存しているのですが、例えば $nm[0]〜$nm[10]まであるとして、配列に値を代入します。 $nmをセッション宣言して次のページに移動したときに $nm[4]〜$nm[6]まで保存されてなく、他のは保存されているといった不可解な状態になっています。 $nmをモニタリングしたところ、移動元のページの最後では値は残っているけど、移動先のページの最初では すでに値は消えているといった状態です。セッション宣言した配列変数の一部分だけ消えてしまうといった現象です。 ちなみに会社内の他のPCでは正常動作しています。自分のPCでは開発していて突然このような状態になりました。 また以前開発したモノも、その当時は正常動作していたのですが、試しにテストしてみたらそちらでもセッションが効かなく なってしまっていました。 何か原因とかわかるでしょうか?
どうしてOSのことは書かないんだろう……
>>268 つくったほうが早くない?
バーコードの仕様わかってるんでしょ?
実は動作しているところを上書きしたんじゃない? でついでにPHPAとか入ってるんじゃない? そのときにはいったんPHPAのキャッシュを消すべし。 違ったらスルー
280 :
276 :04/07/22 13:56 ID:???
失礼しました。OSはWindowsXP SP1です。 試しにOPERA7でやってみたら正常に動作しました。 PHPAは入れていません。
>>280 すごーく気になるんだが、クライアントのOS訊いてるんじゃないからな?
>>276 ていうか$_SESSION使えよsession_resgister()やめれ
283 :
276 :04/07/22 14:18 ID:???
>>281 またまた失礼しました。
レン鯖なんで詳しいことはわからないのですが、Cobalt550です。
>>282 4.0.6に$_SESSIONなんてあったケ?
定数 : 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では定数を利用する事が出来ない のでしょうか?
286 :
269 :04/07/22 14:50 ID:???
>>271 動きました。ああ、あなたは神です。アリガトン
>>271 >>273 行頭改行に を入れたいんだよ。
でも、うちが使ってるサーバーではならなかったんだよ(;´д`)
>>286 お前の日本語が不自由な事を威張られても
お兄さん困っちゃうんだけどな
解決したとたん命令口調とは。夏ですな。
289 :
nobodyさん :04/07/22 15:23 ID:ZtAuJUSe
while ( $filename = $save_dir->read() ) { $filepath = $save_dir2 . $filename; $filebyte = FileSize($filepath); $filekb = $filebyte/1024; $filett = $filett+$filekb; } これでディレクトリの中のファイル容量を計算していて、これはこれで動くのですが その後に while ( $filename = $up_dir->read() ) { $filepath = $up_dir2 . $filename; $filebyte = FileSize($filepath); $filekb = $filebyte/1024; echo "<img src=\"$filepath\">".$filekb; } と、画像一覧を表示させようとするとエラーがでます。 最初の構文の最後に、$save_dir->close();を入れるとエラーはでませんが 画像もでてきません。 $filenameを2度読み込んでるからでしょうか?クマった・・
290 :
nobodyさん :04/07/22 15:24 ID:ZtAuJUSe
>>289 あぁ・・間違った。。訂正です・・
while ( $filename = $save_dir->read() ) {
$filepath = $save_dir2 . $filename;
↓
while ( $filename = $up_dir->read() ) {
$filepath = $up_dir2 . $filename;
すいません。
291 :
258 :04/07/22 15:40 ID:???
>>278 確かに作った方が早いかもしれないですね。
でもこれぐらいなら作った人すでにいそうなもんだけどなぁ。
あんまり需要ないのかな?
ぜひ作って公開してメンテナンスしてサポートもしてください
>>291 JpGraphが対応してるのは知らんかった。
2次元も作ったことあるけど仕様がカチッと決まってるし、
ゼロ作っちゃっても大したことないです。
決まった画像を並べて結合するだけですから。
読み取りは一般的なスキャナで図形として読み取って、
そこから補正かけて解析するのは、この手の扱いに慣れてないと
面倒かもしれん(そしてQRコードが良く出来ていることに気づく)
>>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]\">>$1</a>"';
print preg_replace($pattern, $replacement, $string);
こうかな?つーかこれ、結構危険な気が・・・
質問させてください $hoge = "a:\yamada"; $hogeを"a:\suzuki"に置換したい場合どうしたらいいでしょうか? \が入っているとereg_replaceでうまく置換できませんでした よろしくお願いします
297 :
296 :04/07/22 16:19 ID:???
解決しました
掲示板作ってて$regtime = time();ってやってるんだけど $regtimeが他の書き込みと重複する事ってない?
>>298 2ちゃんみたいにアクセス数が多けりゃカブりまくりだけど
お前の所みたいに月に1件くらいの書き込みなら心配ないんじゃないの?
つーか、time()の説明のどこに一意性を期待できると思ったのやら。
ごめん
>>298 の質問の意味がよくわからんのだが
$regtimeって何に使ってるんだ?
303 :
nobodyさん :04/07/22 17:33 ID:ZtAuJUSe
>>289 の質問は素通りされてるところをみると、厨な質問だったのでしょうか・・?
_| ̄|円
>>303 PHP 側から見たファイルパスと Web 側から見たファイルパスは違うので画像が表示されないのは当然。
HTML で出力されたソースを見て画像の正しい位置を出力するようにしてみたら?
305 :
nobodyさん :04/07/22 17:58 ID:ZtAuJUSe
>>304 えーと、下の画像一覧表示の構文だけなら問題無く表示できます。
エラーの内容からすると、2回目のwhile ( $filename = $save_dir->read() ) {
が呼び出された時に呼び出しエラーがでてるみたいです・・
306 :
289 :04/07/22 18:03 ID:ZtAuJUSe
文の書き方が変でしたね。。。
>>304 すいません
while ( $filename = $up_dir->read() ) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
$filett = $filett+$filekb; //ファイル容量計算
}
〜この間にhtmlが入って〜
while ( $filename = $up_dir->read() ) {
$filepath = $up_dir2 . $filename;
$filebyte = FileSize($filepath);
$filekb = $filebyte/1024;
echo "<img src=\"$filepath\">".$filekb; //画像一覧
}
と。readを2回行っています。
どちらか一つならエラーはでず、思惑通り表示されます。
307 :
298 :04/07/22 18:03 ID:???
2ch風BBS作ってるんですよ ここのURLにもあるでしょ time関数が!
UNIXタイムスタンプと言ってくれ time関数とか臭い
>>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; //画像一覧
}
>>306 それなら $up_dir->close() をファイル容量計算の後に閉じないと $up_dir のポインタが最初に戻らないのでは?
filesize() あたりでエラーになっているとか。エラー内容を書けば分かると思うけど。
ディレクトリのファイル容量を知りたいだけだったら disk_free_space() という関数もあるけどね。
311 :
310 :04/07/22 18:31 ID:???
>>310 disk_free_space() ではなくて disk_total_space() だった・・・。
312 :
289 :04/07/22 18:53 ID:ZtAuJUSe
>>310 すいません。。2回目リードの前に$up_dir=dir("img/")と再宣言してやったら、うまく行きました。
なぜ直ったかよくわかりませんが。。もっかいじっくり見てみます。
>>304 >>309 >>310 皆さん有難う御座いました。
disk_free_space() 楽そうな関数あるじゃん!って思って使ってみたら
わけわからん数字がでてきたので、詳しく調べてまた使ってみます^^;
>>307 phpの前に日本語のコミュニケーション技法を勉強する必要があるんじゃないの?w
msec単位ならまだしもsec単位で書き込みが重複するかどうかなんて、
ちょっと考えれば解りそうなもんだが
一意性を求めたいなら他に方法があるからマニュアル引いて自分で調べろや
GDでGIFが復活したっぽいね。PHPも対応するのかな。
315 :
nobodyさん :04/07/22 23:42 ID:7BmR+CsI
一時的にアップロードしたファイルを読み込むのってどうしたらいいの? input.php <?php echo <<<UPF <form action="output.php" method="post"> <input type="file" name="upfile"><br> <input type="submit" value="POST"> </form> UPF; ?> output.php <?php $outfile = $_POST['upfile']; $file = @file($output); print_r($file); ?> じゃ、だめなの?
317 :
nobodyさん :04/07/23 00:00 ID:NhG7RjUM
ありがとぅございまっ
318 :
259 :04/07/23 03:59 ID:???
>>266 ありがとうです、その書き方でうまくいきました。
Wavファイルを読み込んで速度を変更したりする方法をご存知の方が いらっしゃいましたら、教えて頂けると助かりますm(_ _)m
常識で考えるとPHPの仕事とは思えないんですが
>>319 pack(), unpack() を調べてごらん。mp3 はそれで編集した。
WAV のフォーマットを聞きたいのであれば Google で。
>>321 どもありがとですm(_ _)mフォーマット見て弄ったら速度変えれました。
323 :
nobodyさん :04/07/23 15:23 ID:kRHOf0Jq
php5 と php4 を共存させることはできますか?
>>323 私も前に同じ事をやろうとしたが・・・無理だった
共存ではなくサーバーを2つ立てて各PHPを入れて転送するのがよさげ
>>324 1つの Apache に PHP4 と PHP5 をインストールして共存に成功したこと
はないけど、Apache を PHP4 用と PHP5 用に 2つ別ディレクトリに
インストールして別の Port 番号で PHP4 用と PHP5 用の Apache を同時に
起動させることは可能。
>>323 PHP5を使ってるが特に問題なさげ
ただ、PHP5で組んでいてPHP4に戻した時に何かあるかもね
327 :
nobodyさん :04/07/24 06:05 ID:4AWYwTYs
すごく初心者で申し訳ないですが、質問させて下さい。 index.phpに readfile("./$QUERY_STRING.txt"); って書いて、index.php?aを開いたらa.txtの内容が出てくる。 index.php?bを開いたらb.txtの内容が出てくる。 ここまでは分かったんですが、例えば、index.phpを開いた時に txtファイルの一覧&リンクを出てくるようにして、クリックしたら、 一覧があった場所にa.txtの内容を表示するようにするにはどうしたらいいんでしょうか? リンク一覧を作ってその後にreadfile("./$QUERY_STRING.txt");を書いてみたんですが 下にずらずら繋がっちゃって見た目がよくないんです。 親切な方教えてください。お願いします。
親切な方はいません
どうしたいのかよくわかんないんだけど if (empty($QUERY_STRING)) echo リンク一覧; とかそういうこと?
330 :
17 :04/07/24 09:53 ID:???
ereg_replace("((https?://|
ftp:// )([0-9a-z:_?./~%;()=+#-]|&)+)","<a href='\\1' target='_blank'>\\1</a>",$sql['body']);
を
perg_replace("/((https?://|
ftp:// )([0-9a-z:_?./~%;()=+#-]|&)+)/","<a href='\\1' target='_blank'>\\1</a>",$sql['body']);
に置き換え(eregをpreg)たらUnknown modifierが発生するケースが出て来てしまいました
どんな文字が影響していると考えられるのでしょうか?
>>330 ext/pcre/php_pcre.c
マニュアルの言葉だと 内部オプション設定ってやつを処理する部分で、
内部オプションにないものを指定した時にエラーとして表示される。
どこかの「/」が邪魔してるんじゃないの?
つーか、オイラなら正規表現でエラーが出たら一文字ずつ削って動作確認するけどな
//送信が押された場合 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が反映されるようにしたいのですが,どうすればいいのでしょうか。
>>332 $rowsが変数として展開されずに そのままの文字列になってるってことかい?
文字列の中に変数を置いた時に ' と " では扱いが異なってくる。
〜 value="'.$rows.'">'; にでもすりゃェェんでないの?
おおお!!!! なりました。ありがとうございます。
>>332 $radio = "<input type=\"radio\" name=\"radio\" value=\"$rows\">";
でいいじゃん。
つーかこれだと管理番号かぶるからちょっと見直した方がよくない?
日記一覧をラジオボタンで選択し,”削除”っていうボタンを押したら if($_POST['del']){ $keydel = $_POST['radio']; pg_query("delete from kadaidb where num=$keydel;"); } を実行するようにすればいいかなっと思ったのですが,うまく動作しないみたいです…
>>336 Perlコーディングスレからのパクリだけど、
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
332からの続きでそのまま書いてました… 335さんに対して答えてるはずだったのですが,読み直してみたら,答えになっていませんね。 んもう,試行錯誤してたら昼・・・少し寝てからまた頑張ってみます。
>>340 スクリプト書いてたらテンパル事も
よくあるから気にしない。
336の部分はパッと見特に問題はないかと
>>340 元質問のレス番を名乗るかトリップぐらいつけれ
>>339 それは$_REQUESTを使うべきではといいたいのですか?
COOKIEと重なるから私は嫌うのですがねぇ
import_request_variablesで展開すべきだといいたいのですか?
グローバル変数が勝手に埋められるのはあまり・・・
それとも$HTTP_GET_VARSを使うべきではといいたいのですか?
変数名が長いからあまり・・・
はたまた$_SERVERから必死に分解すべきだといいたいのですか?
perlと同じことしないとだめなんて・・・
これらと違うのなら何ですか?
>>343 フムフム、つまり
$_POST,$GET,$_COOKIE ローカルで個別に参照
$_REQUEST ローカルで全部参照したい時
$HTTP_GET_VARS 使わない
$_SERVER PHPの意味が無い
import_request_variables 引き回したい時
でおk?
厨質問者に厨解答者、これぞ夏の風物詩。
>>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
何もかもだめぽ。
>>345 細かいご指摘ありがとうございました。
削除コードの部分はなんとなく理解できました。
今までphpPgAdminでいちいちSQL文打って確認していましたが,var_dump()の方が数倍楽ですね。
結局寝損ねましたので,またがんばってみますm(_ _)m
よろしけば教えてください。 "00012"の"0"の部分を削除して "12"だけを取り出したいのですが、どうしてもわかりません。 substrで取り出すにも"12"の部分の桁は変化するので・・・。 よろしくお願いします。
というか、register_globalsはoffが推奨されてるんじゃなかったっけ?
2年以上前にリリースされたPHP4.2.0からデフォルトでOffだしね。 未だにregister_globals=On前提のスクリプト書いてる香具師はマジヤバイ。
>>353 ありがとうございます。
うまくいきました。
すごい・・・。
register_globals=Onって具体的にどうやばいんでしょうか?
359 :
nobodyさん :04/07/24 23:38 ID:rcqw39Y8
現在のコネクション数(netstatでestablishedなTCPの数)を取得する方法ってありますか? たまにそういう表示してるサイトを見かけるんで、できるようなんですが。
質問するのに自演したら自分が損するだけなんだがな
361 :
263 :04/07/25 03:17 ID:ZfezmSNL
>295 教えていただいた方法で実現できました。だたこういった2chなどの匿名の掲示板と違い無記名ではない掲示板ですので $name[$i]($text[$i]の$iと同じ要素に格納されている部分)もいっしょにポップアップ表示させたいと思っております。 可能でしょうか?
アホ初心者は適当なレスを絶対スルーする謎の能力を持ってるよな。
>>361 どうしたいのか判らんけど、
$replacement = '"<a href=\"#$1\" title=\"名前:$name[$1] 本文:$text[$1]\">>$1</a>"';
じゃだめなのか?
もっと複雑なポップアップをしたいのなら、以前に言われてたけど
ブラウザに任せずJavaScriptを使うべき。
そういや
>>295 でサニタイズ済みなことを前程にしているのだから、$patternは
$pattern = "|>([0-9]+)|e";
だったな(&の置換忘れ)
366 :
nobodyさん :04/07/25 05:56 ID:FYTamtub
PEAR使ったサイトをローカル(windows&IIS)で動かしたいんだけど、 require_once 'PEAR.php'; とかすると、バイナリ版使ってるためかソースが見つからず動作しない。 とりあえずソースだけ持ってこようと思ったんだけど、 どのソースを移せばいいのかよくわからない。 誰かたちけて。 PHP5です。
go_pearを実行
>>366 Windows版のほうはあんまり使ってなくてうろ覚えなんだけど、
php.iniでinclude_pathをC:\PHP\PEARとか、ちゃんと設定しる。
もしくはスクリプト冒頭でini_set('include_path', '.;D:\path\to\pear');とかそんな感じ。
関数内では関数外でグローバル変数化した変数の値は使えないのでしょうか? global $hoge; foo(); exit; function foo(){ print ($hoge); } これは動きませんかね?
370 :
369 :04/07/25 14:43 ID:???
あのう、早くレスしてくれません? これなら自分で確かめた方が早いです
371 :
369 :04/07/25 15:01 ID:???
分からないんですか? 普段は偉ぶってるくせに無能揃いですね。
ショボイ煽りをPHPであぼーんする方法はありますか?
___ クルッ… / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ || ̄ ̄|| <⌒ヽ )) <
>>371 はてさて、
| ||__|| < 丿 | どこを縦に読みゃいいんだ?
| ̄ ̄\三⊂/ ̄ ̄ ̄/ \___________
| | ( ./ /
脳内あぼーんで対処するしかないかと。
375 :
369 :04/07/25 19:37 ID:???
お兄ちゃんに聞いて解決しました。 うちのお兄ちゃんは大学院に行ってるからはっきり言ってお前らより上。 もう偉ぶるのやめてね
>>375 私のお兄ちゃんは修士過程終わった後、某研究所で働いてるんだぞ!
ハッキリ言ってお前のお兄ちゃんより上
>>375 妹がお兄ちゃんにおねだりするように質問してたら喜んで答えたぞ。
すみませんちとうまくいかないので質問させてください。 今入退室を付けたチャットを作ってるんです。それで、入室時に名前、時刻、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>"); }
380 :
379 :04/07/25 22:35 ID:???
訂正です $v = split('<>', $data[i]); ↓ $v = split('<>', $data[$i]);
>>379 > for($i = 0;$i > 10;$i++){
このへん。
echoの中身も表示されないし、forループに問題があることにすぐ気づかないと。
382 :
379 :04/07/25 22:49 ID:???
あぁぁぁぁ・・・やっちまった。 $i>10じゃ動くはずが無いと・・・。 どんなパズルもわかっちゃうと簡単すぎて笑っちゃうもんですね。 わざわざありがとうございました。
>>379 ・var_dump($data)してみること。
・for構文を良く理解すること。
質問なのですが、 requireとrequire_onceはどう違うのでしょうか? ヘルプを呼んだ限りでは、毎回読み込むか一回読み込むかの違いみたいに 書いてあったのですが、PHPはリクエストのたびにスクリプトを毎回読み込むのではないのですか? 一回しか読み込まないとはどういう動きをするのでしょうか?
メモリに同じデータが入ってる時は読み込まなかったりして
>>384 何か関数定義したファイルを2回以上require/require_onceで読み込んでみれ。
>>384 すでにincludeしたファイルを再び読む込むように指定した場合の挙動の違い。
例えば、読むファイルをテンプレート代わりに使う場合はinclude、
共通ユーザー関数群の定義に使う場合はinclude_onceを使うといい
下手な釣りを見て思い出したが、PHPにはユーザーによる変数の
スーパーグローバル化やラベルジャンプがないのでちょっと困ることがあるな。
あれば楽できるのに・・・と思う局面がたまにある
388 :
nobodyさん :04/07/26 02:54 ID:sMxRgzIj
教えてください。 ファイルをアップロードするスクリプトを組んでいるのですが、ファイルのサイズがある程度大きくなるとうまくいきません。 1) 651バイトの画像ファイルは正常にアップロードできました。 2) テスト用に文字列"1234567890"で埋めた 161,876バイトのテキストファイルは以下の様になります。 type : text/plain size : 321880 error: 0 実際にUPされたファイルを見てみると 先頭に1,260バイト分 "1234567890"が入っていて次に -----------------------------7d420b560c66 Content-Disposition: form-data; name="upfile"; filename="クライアント側のファイル名" Content-Type: text/plain\r\n\r\n その後最後まで"1234567890"が入っているようです。 (その後の部分は多いのでざっと目視しただけですが、少なくともodでダンプ取った範囲では 1164520=321,872まではデータが埋まってました) 環境は RedhatLinux9.0 PHP-4.2.2 Apache2.0.40 で file_uploadsはOn upload_max_filesizeは1M に設定してあります。 同じスクリプトを別サーバにて動作させると正常に作動するのでどうにも原因がわからないです。 怪しそうな所をお教えください。 ちなみに動作するサーバでも似たような構成で動かしています。 RedhatLinux9.0 PHP-4.2.2-17(SRPMからMB_STRINGをONにして自分でコンパイルした)+ Apache2.0.40 です。
389 :
388 :04/07/26 04:29 ID:sMxRgzIj
追記です。 試にうまく動作している方のサーバから自分でビルドしたPHPのパッケージを動作していないサーバにFTPしてインストールしてみました。 php.iniもコピーしました。 結果は以前と同じでサイズが倍ほどに膨れます。 PHPの問題ではないみたいですね。 訳がわからなくなってきました。。
390 :
nobodyさん :04/07/26 05:49 ID:IOiIX+Fr
自分や他の人が持っているdocomo携帯からでは問題なく見られる掲示板が vodafoneからだと見られないという報告を受けました。文字コードとうで 何か気をつけるべきことがあるのでしょうか?詳しい方教えてください。
お約束のApache(PHPのではない)のPOSTデータの限度設定の確認はした? POSTメソッドを使ったアップロードでFAQ的なところだけど。
>>387 変数のスーパーグローバル化というのは global で宣言したり $GLOBALS を
使えばできると思うのだが・・・。
393 :
nobodyさん :04/07/26 09:23 ID:zfZRDkJ9
phpのなかで、fopen/fwriteでファイル書き出しをしたいのですが、通常だったら、 ファイルのオーナーがapacheの実行オーナー(nobodyさん)になってしまいます。 これを、自分のアカウントがオーナーにしたいです。 また、ファイルの内容は変更することがあるので、その時には、ファイルのオーナーを nobody さんに戻せないといけません。 よろしくおながいします。
>>390 auから見てる人はあっち。vodafoneから見てる人はこっち。
とか携帯の仕様を元に振り分けるとか
395 :
nobodyさん :04/07/26 11:18 ID:BnaAbQE9
""の中で、 変数$foo['hoge'][$bar['huga']]を表記するにはどうすればいいですか? 単に、${foo['hoge'][$bar['huga']]}では Parse error: parse error, expecting `'}'' となります。
>>395 {$foo['hoge'][$bar['huga']]}
${hoge}じゃなくて{$hoge}を使えばいい。
397 :
nobodyさん :04/07/26 11:23 ID:BnaAbQE9
>>396 ありがとうございます。解決しました。
{$hoge[]}と${hoge[]}の文法的な違いってなんですか?
398 :
nobodyさん :04/07/26 11:32 ID:zfZRDkJ9
>>394 vodafoneのキャッシュ制限にひっかかってない?
非パケ端末は1ページ6kbyte以下ですよ。
>>392 まあ、一々宣言すればいいんだけど、$PHP_SELF位は
スーパーグローバルに登録された方が楽かな・・・とは思うもんで。
それともこういう書き方は(・A ・)イクナイ?
401 :
nobodyさん :04/07/26 13:06 ID:U4MCK2zg
質問させてください! 1:タイムスタンプ名のディレクトリをumask設定してから作成 (他のサイトでumaskしたらいいと書かれていました) $oldmask = umask(0); $dir = mkdir($timestamp,0777); umask($oldmask); 2:そのディレクトリに画像をアップ 3:$name = $dir."/1.jpg"; これでechoで$nameを出力させるときちんとjpg名が出力されるのですが、 is_file($name)等でファイルの存在を調べると、falseが返ってきます。 これはなぜなのでしょうか?知ってる方お願いします。
ディレクトリは出来たけど、画像はアップロードできてないだけじゃねーの( ´-`) アップロード処理の例外処理とかちゃんとしてる?
[PHP-users 22798] Windowsではできてると言っているのに、、、 「Macでは試験したことが無いですが、Windows限定でよければ。」ってアフォか
誤爆スマソ
407 :
401 :04/07/26 14:42 ID:U4MCK2zg
>>402-403 $nameを出力すると「123456789/1.jpg」みたいになります。
<img src=$name>
はきちんと画像が表示されます。画像はアップされています。FTPでも画像の存在を確認できます。
でもis_file($name)はfalseが返ってくるんです。
is_file("123456789/1.jpg") で確認するとTRUEなのですが、is_file($name)はFALSEなんです。
フルパスで
409 :
401 :04/07/26 15:26 ID:???
>>408 フルパスでも無理でした。
mkdirで作成したディレクトリにあるファイルをis_fileで調べた場合FALSEを返すのでしょうか?
is_dir($dir)もFALSEでした。
※$dirにはmkdirで作成したディレクトリ名(フルパス)
file_existsでも同じ?
411 :
nobodyさん :04/07/26 15:34 ID:4tJVtMce
質問です。 htmlspecialcharsを使うと♥等の文字実体参照ができなくなってしまうのですが、 対処方法はあるのでしょうか。 &amp;を全て&に変換してから表示させれば実現できることを確認しましたが それだとhtmlspecialcharsの意味が無くなるし・・ よろしくおながいします。
412 :
401 :04/07/26 15:42 ID:???
>>410 はい・・・file_existsもfilesizeも、mkdirで作成したディレクトリを含めその中にあるファイルの情報を
得ようとするとFALSEなんです。
if ( file_exists ( $name ) ) //FALSE
print "<img src='".$name."'>";//アップした画像が表示される
413 :
388 :04/07/26 15:42 ID:sMxRgzIj
>391 アドバイス有難うございます。 ApacheのPOSTデータの限度設定とはPHPのマニュアルサイトのUser Contributedにのっかっている LimitRequestBodyのことでしょうか? そちらを2Mで試してみていますがうまくいかないです。
独自のモジュール作ればヨシ!
>>401 ディレクトリと画像ファイルのパーミッションどうなってる?
416 :
401 :04/07/26 16:14 ID:???
>>415 ディレクトリは777、その中の画像は644です
>>413 そうそれ(うろ覚えでスマンね)。
現象が違う(倍に膨れる/該当するエラーが出てない)ので
違うとは思ったが、やっぱり関係ないね。
入ってるデータ見てるとWebクライアント自体がデータをマルチパート化して
その両方の形式とも送ってるみたい。使ってるのはIE?
別のWebクラインアントで試すか、送信データをキャプチャして見てみるのが良いかも。
>>401 やはりポカミスな気がする
is_file($name)の$name当たりを見直してみると良いかも
俺もポカミスのような気がするなぁ…。
>>418-419 自分もそんな気がしてるのですが、藁にもすがる思いで質問しました。
もう一度じっくり見直してみます。有難うございました。
成功した場合に TRUE 、失敗した場合に FALSE を返します。
しかし、
>>412 の、これがわからんな
if ( file_exists ( $name ) ) //FALSE
print "<img src='".$name."'>";//アップした画像が表示される
>if ( file_exists ( $name ) ) //FALSE と >print "<img src='".$name."'>";//アップした画像が表示される の参照ディレクトリが違うだけの話じゃないの?
データ(data.cgi)の一番上の行だけ 読み取るにはどうすればよいでしょうか?
$msg = file(data.cgi); これで呼び出すと全部が変数に入るから 一番上のだけ読み込みたいと・・・
変数じゃなくて配列な $msg[0]
data.cgiの中身が 「田中さん 山下さん 吉田さん」 だとすると $msg = file(data.cgi);で $msg[0] が田中さん $msg[1] が山下さん $msg[2] が吉田さん となるのですか?
>>407 >is_file("123456789/1.jpg") で確認するとTRUEなのですが、is_file($name)はFALSEなんです。
↓は試した?
if ( "123456789/1.jpg" != $name ) echo '当然falseだ(゚Д゚ )ゴルァ!!';
>>411 適当に書いたので合ってるか分からんが、
$contents=preg_replace('/&([0-9a-z]+;)/i' ,'&$1', $contents);
等で、実体参照と思われる部分のみさらに置換し直す。
質問ナンデツガ 送信ボタンをクリックしたらAに1が 代入されるとかできますか?
>>432 お前は一回、、、何から読ませればいいですか?
国語の教科書とか
$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
437 :
436 :04/07/26 19:46 ID:???
何が悪いんだよぬるぽーーーーーー!!!
438 :
436 :04/07/26 19:48 ID:???
ちなみに$dataのパーミッションは666でつ ヘルプキボンヌ
var_dump($msg)で中身みれよ
ちゃんと中身ありますた;; string(77) "やまもと,おはようございます,2004/07/26 19:52:51,YahooBB************.bbtec.net"
$data とか $fp をvar_dump した方がいいと思う。
442 :
436 :04/07/26 20:12 ID:???
bool(false) ナンダコリャ
>>442 $fpか? まあ要はファイル開けないぞゴルァ!ってことだな。
if(!$fp=fopen($data,"w")){
echo "cannot open!";
}else{
fputs($fp, "$msg\n");
}
に変えて実行してみれ。
444 :
436 :04/07/26 20:43 ID:???
開けませんですた_| ̄|○
いや。必要なのは if(!file_exists($data)){ echo "file not found." } だと思う。 typoしてないかどうかよーくソース眺めてみ。
446 :
436 :04/07/26 20:46 ID:???
まじで皆さんごめんなさい_| ̄|○ $dataではなく$logですた;;
>>446 おう、それと$fp=fopen($data,"w")だと$logの中身は常に最新の$msg一行だけになるから
$fp=fopen($data,"a");でオープンしとけ。
>>447 あり><
どうりで上書きされるわけだ・・・
449 :
388 :04/07/26 21:32 ID:sMxRgzIj
>417 クライアントはIE6とネスケ7.1で試してます。 動いている方のサーバは Redhat9.0を米国のスタッフが英語環境で(おそらくインターネットサーバとして)インストールして その後、私がPHPをMB_STRING付&不要なオプションを削除してリビルド、 httpd.conf内の不要モジュール等の削除+バーチャルホストの設定を行っています。¥ ついでに手持ちのもう2台のサーバ(自分でRedhat9.0を日本語ベースでサーバインストール&PHPをMB_STRINGコンパイル &apacheを上記サーバとほぼ同じ設定をしたもので試しましたがそちらでも動作しています。 対し動いて居ないサーバは SAKURAインターネットのサーバでApache、PHPともインストールされたままのものを使用(1台はPHPのパッケージを昨日入れ替えました) 10Mプレミアムと10Mスタンダードの2台です。 普通に自力でやった物が動いていて、SAKURAのほうのみ動かない状況です。 これからTCPDUMPで内容解析してみます。
つーか、煽りでもなんでもなくて純粋に不思議なんだが、 マニュアルちゃんと読んでない関数をよく使おうと思うな… 特に戻り値把握して無いって普通におかしいだろ? その関数をそこで使おうと思った理由がスゲー気になる
451 :
388 :04/07/26 21:57 ID:sMxRgzIj
サイズが倍になるサーバでtcpdumpしてみました。 概算ですが送信サイズは元のファイルのサイズです。 またhttpヘッダー部のダンプを見てみたところ Content-Length:.162212 (PHP側では size : 321880と表示される) の文字があったので送信されるHTTPヘッダーは正しいみたいです。 (まぁ同じクライアントで別サーバで動作するのでクライアント側から送信されるデータは正しいっぽいですね) もう訳がわからなくなったので一度ApacheをSRPMからビルドしてみます。
452 :
388 :04/07/26 22:19 ID:sMxRgzIj
httpd.confだけをApacheインストール標準にもどしてヴァーチャルホストの設定だけを元のものに戻してみた所正しくアップされました。 httpd.confのどこかに問題がありそうです。 これから箇所を特定してみます。 スレ違いになってしまいましたが箇所がわかったら書き込みますね。
>>450 入門書かなんかで見たサンプルを丸飲みして覚えてるからこういう事態になるんじゃない?
454 :
388 :04/07/26 22:45 ID:sMxRgzIj
場所の特定できました。 AddType application/x-httpd-php .php これを入れるとサイズが倍になります。。 う〜ん たしかに自分で設定したほうには入れていなかったです。 これ設定しなくて良かったんでしたっけ? ともあれ原因がこんな所にあるとは。。 奥が深いです。 アドバイスどうもありがとうございました。
>>388 では生データの概要全部が読めないんだけど、
アップロード元のhtmlで「enctype="multipart/form-data" 」
は指定されてるよね?
>>454 記述はいる筈だけど、それはRHL9(のRPMで入れた)なら
/etc/httpd/conf.d/php.confに書かれてるんじゃないかな。
.htaccessにも書けるし、設定は「上書き」であって
コンフリクトはしないと思うけど。
457 :
nobodyさん :04/07/26 23:10 ID:ehBSQM9L
393への回答キボンヌ おながいします
chmodで606にすれば解決。 所有者を自分にしたければCGI/perlから作ればよし。
459 :
388 :04/07/26 23:19 ID:sMxRgzIj
>455 もちろんマルチパートで送信しています。 手持ちのサーバの大部分はうまく動作しているのです。 最近引き継いだSAKURAインターネットのサーバのみダメな状態だったのです。 送信パケットでは正常なパケットを送信しつつ、ApacheからPHPにデータが渡る時点で倍に増えているような状況でした。 >454 php.conf にはAddTypeは書かれて居ないです。 入っていたのはLoadMduleとLimit関連、DirectoryIndexの3点だけでした。 grepしてみたのですが他にphpのAddTypeをしている箇所は無いようです。 何度か試しましたが[AddType application/x-httpd-php .php]を入れてhttpd再起動でサイズが倍に、 コメントアウトして再起動で正常なサイズでアップされます。 Apache,phpのバージョンの組み合わせの問題でしょうかね?
<俺メモ> 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ソフトウェア開発」を入れれば解決。 </俺メモ>
すみません、どなたかPHP5でnamespaceがサポートされなかった理由をご存知ないでしょうか。 RC1まではあってRC2で削除されたようですが。 よろしくお願いします。 #interfaceよりnamespaceの方が欲しかった・・・
速度とトレードしたのかもしれないね
Zeevタンの鶴の一声で決まったらしいけど、なんでやろね?
プログラム超初心者なので教えて下さい。 あ,データ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]; } ?>
>>465 全然ダメ
そのものズバリ書くのも何なのでヒントを
preg_match の部分が変だし、preg_match は if 文じゃない。
foreach のループの中身もおかしい。
超初心者なら、まずプログラムの書き方を覚えないと
どっかで配布されているスクリプトを拾ってきて、それを読むのがいいかも
>>466 丁寧な解説ありがとうございます。
やはり基礎からやった方がいいのですね(ノД`)シクシク
頑張ってPHP覚えます。
あと、超初心者向けのPHP入門みたいなホームページをご存知でしたら教えて下さい。
検 索 し ろ や
>やはり基礎からやった方がいいのですね(ノД`)シクシク コイツ最悪だ
いちいち初歩的な質問に答えているから問題なのでは? スルーしとけば伸びてこないし何れ滅びる
>>467 何考えてる〜お前何言ってる〜♪あほの塊〜何考えてる♪
あっほだな〜♪
おはようございます。 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は呼び出せないのかと‥
ネタはやめてください
ワラタ
まず、おはようございます。 がおもしろかったです。
<?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勉強中!
<?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; ?>
PHP4.3.7を使ってます。セキュリティ問題についてはとりあえず置いておいて、 form から submit したときに文字化けします。 form のあるファイルは SJIS ですが、恐らく文字コードの問題ではないです。 文字化けというより、\記号(0x5C)もしくはそれを含む漢字の0x5C部分 がだぶって取得される、という現象です。 たとえばフォームに "\100" と入力すると、$HTTP_POST_VARS['xxx'] は "\\100" となりますし、 "ソノタ" を入力すると "ソ\ノタ" と取得されます("ソ" は SJIS で 0x83,0x5C)。 どこに問題があるかわかりますか?
481 :
480 :04/07/27 14:20 ID:uLhfG1jO
sageちゃった。 ageさせて。
>>480 magic_quotes_gpcでしょう。
483 :
480 :04/07/27 14:27 ID:???
>>474 URLを指定した、Webサーバ経由のincludeなら可能。
つまりcgiの出力結果のinclude。リモートファイルの
直接的なincludeになるので、セキュリティには気をつけること。
#リモートの出力が常に信頼できるものなら良いが。
485 :
484 :04/07/27 14:34 ID:???
>>474 ああ、そこのサーバだと駄目かもしれんね。
<httpストリームのinclude
>>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);
セーフモードのヤカン。・゚・(ノ∀`)・゚・。
489 :
nobodyさん :04/07/27 14:52 ID:VW36b+BW
.htaccessで、php.iniの設定を変えようとしたのですが、上手くいきません。 <IfModule mod_php4.c> php_flag output_buffering Off php_flag magic_quotes_gpc Off php_value default_charset Shift_JIS php_value mbstring.language Japanese php_value mbstring.internal_encoding SJIS php_value mbstring.http_input auto php_value mbstring.http_output SJIS php_flag mbstring.encoding_translation On php_value mbstring.detect_order auto php_value mbstring.substitute_character none </IfModule> 文字コードをSJISで保存・出力したいのですが、これをディレクトリに置くと500エラーになってしまいます。 どうすれば良いでしょうか?
IfModuleが使えない鯖なんだろ
>>489 そのままで使えないものなのかい?Shift-JIS
すみません PHP+MySQLで日本語検索やりたいんですが、 レコード数が数十万件から100万件程度になると、 WHERE カラム名 LIKE '%検索したい文字%' ってだけで救いようのないぐらい遅くなります。 なんかアイデア・対処方法は無いでしょうか? MySQL頼みのFULLTEXTサーチは 日本語NGでしたし・・・。
493 :
492 :04/07/27 16:11 ID:???
あ、検索文字列の正規化?はやってます。 全角英数を半角にとか、 カタカナをひらがなにとか。
普通正規化とはマスタとデータを分けたりする事を指すのだが、 100万件でそんなに遅くなったっけか。Psqlなら遅くなりそうだが…。 インデックス効いてる?
495 :
492 :04/07/27 16:27 ID:???
>>494 お返事ありがとうございます。
LIKE の 頭に ワイルドカードが入ると、
インデックスが効かないのです。
これはMySQLの仕様のようです。
100万件でインデックス効かないから遅いのは当たり前なんですが。
それってMySQLの仕様か? 頭にワイルドカード入ってりゃ全件総ナメに決まってんべ
>>495 アイディアだけ。遅くなる率は高いけどもしかしたらというわけで。
・phpでbin2hexしたデータを追加し、それにFulltextIndexをかける。
データが2倍になるという欠点がある。
・2バイト文字列を2バイト英数字に変換し(不可逆)、それにFulltextIndexをかける。
意味不明なデーターがひっかかる可能性がある。
・独自で頻度表を作ってみる。
頻度表でどこまで処理できるかが問題。
・namazuを見習って単語リストを作ってみる。
とりあえず面倒。
498 :
492 :04/07/27 16:54 ID:???
>>497 FulltextIndexですかね。やっぱり。
普通は LIKE '%キーワード%' よりは速くなるらしいですね。
ただ、スペースなどで単語を区切らないといけないので、
chasenとか外部プログラムが必要になるのですが、
ここら辺のサンプルなんか紹介しているようなWebページないでしょうか?
perlだと Text::ChaSenなんてモジュールがあるらしいですが・・・
499 :
nobodyさん :04/07/27 17:15 ID:A3g22VFK
500 :
nobodyさん :04/07/27 17:15 ID:A3g22VFK
sample.php -------------------- <?php define(HTML_FILE, "sample.html");//出力するファイル名 define(DAT_FILE, "sample.dat");//ログファイル $urllist = file(DAT_FILE); while(list(, $val)=each($urllist)) { $list = explode("|", $val); if ($fp = @fopen($list[1], "r")) { while (!feof($fp)) $data .= fgets($fp, 1024); fclose($fp); } $match_count = preg_match_all($list[0], $data, $items); for ($i=0; $i< $match_count; $i++) { $item_url = $items[1][$i]; $title = $items[2][$i]; $title = strip_tags($title); $output .= "<a href=\"" .$item_url ."\" title=\"" .htmlspecialchars($title) ."\">" .htmlspecialchars($title) ."</a><br>"; } } $fp = fopen(HTML_FILE,"w"); fputs($fp, $output); fclose($fp); ?>
(;´Д`)なんか解析するのもだるいな…
見た目で。 とりあえず、$dataの初期化が欲しいと違うことを言ってみる。 で、正解はファイル名に\nが入っているから。
読むのマンドクセ(;´Д`) printデバッグ汁
>>500 file() で読み込むと行の最後にある改行まで変数に入る。
rtrim() で不要な改行を取り除けば大丈夫。
$list = explode("|", rtrim($val));
>>474 Apache DSO 版を使っているのなら virtual() はどう?
506 :
500 :04/07/27 20:04 ID:???
>>502 >>504 unset()、rtrim()でうまくいきました。
本当にありがとうございます。
507 :
474 :04/07/28 09:04 ID:???
508 :
nobodyさん :04/07/28 12:37 ID:1Y3BKvIO
>>474 職場で爆笑した責任を取ってもらおうか...
教える気がないならスルーしとけ。
某スレでapacheのconfのユーザーディレクトリに AddType text/html .php を記述すればphpがテキストとして 扱われると聞いたのですが、逆にテキストとして扱わない場合(PHPとして扱う) はどういう書き方があるのでしょうか?
511 :
nobodyさん :04/07/28 20:46 ID:EvRrHsAN
abc001_1.jpg abc002_1.jpg といった連番の画像が500以上あるんですが、 これを 60 x 60 の画像に縮小→切り抜きし、abc001_a.jpg・abc002_a.jpgといった風に リネームする必要ができました。 どうするのが一番効率が良いでしょうか? 縮小・リネームだけなら、ソフトとPerl・PHPスクリプトを連携して出来るのですが、 切り抜きが入ると、全く方法が思いつきません。どなたかご教授ください。 画像サイズは 160 x 120 とか、縦横比率がバラバラなので、切り抜きが必須なのです orz
512 :
511 :04/07/28 20:47 ID:???
すいません、板違いでした orz
んが。今マニュアルみて関数の確認してたのに.... imagecopyあたりが適当じゃなかろうか?
MMCacheもAPCと同じでincludeファイルも変換してキャッシュ してくれるのでしょうか? それとも呼び出されたファイルだけでしょうか?
>>510 PHPをモジュールとして組み込んでいる場合は、application/x-httpd-php
CGIの場合は、application/x-httpd-cgiとすることもある。
(application/x-httpd-phpで処理させるように設定することも可)
そもそもプログラム側でヘッダーを変更できるのに、 タイプを固定する意味がないという。
PHPのマニュアルにも載ってることだが、PHPの隠蔽はやっておくべき。
518 :
nobodyさん :04/07/29 14:47 ID:VlhsQ7NZ
php 4.3.3を使ってるんだが、もしかしてexitで処理を抜けた時って、 register_shutdown_functionで登録した関数呼び出されない?
exit前にregistしろよハゲ
禿じゃないヨ
PHPってバイナリモードだかに出来るって本当ですか? 関数のバイナリじゃなくて。
でこが広いだけだよね
俺なんかデコ広すぎてツムジが無くなっちゃったよ!
それは禿と呼ぶな、普通。
俺なんかデコ広すぎてウナジが無くなっちゃったよ!!
それはコンパイルしてバイナリしちゃいましたか。
フォームを使わないでPOSTでMulitipart/form-dataを指定したときと同じよう にファイルを添付したいのですが、これ可能でしょうか? できるとしたら、どのエンコードをし、どういう送信ヘッダを作ればいいんでしょうか?
どこから送りたいの?
>>527 PHPじゃ無理。フォームの仕様を使うのが正しい。
でなければFlashでも使う。
530 :
nobodyさん :04/07/29 23:43 ID:b7+JpvL1
DOM勉強始めた途端につまづきました。 以下プログラムを実行すると Error while parsing the document\n とエラーになってしまいます。 一体何がいけないのでしょうか? <?php if(!$dom = domxml_open_file("test.xml")) { echo "Error while parsing the document\n"; exit; } ?> test.xml <?xml version="1.0"?> <root> <test>this is test</test> </root>
>>528 ,529
http://oshiete1.goo.ne.jp/kotaeru.php3?q=817797 >hogehoge.phpが、メールサーバーにソケット接続、マルチパート処理し、ウェブコンテンツを更新
ちょうど↑と同じようなことなんですが、
ケータイからメール(添付付)をメールサーバーに送り、phpが実行された時にPOPサーバーから受信、
同時に添付ファイルをエンコしてwebサーバーにPOSTし、本文には添付ファイルへのリンクなどを
挿入した状態でPOSTしたいと思ってます。
ケータイでの投稿に対応していないblogになんとかケータイから投稿したいと思ってます。
簡単に言うと写メールBBSのphpの機能にwebサーバーへのPOST的処理を付け加えたという感じです。
やはり、エンコードデータはブラウザに作らせないとダメなんですかね・・・。
>>531 fsockopen() とかを使って決まった形式でデータをエンコードして通信すれば可能。
フォーマットは RFC あたりを見て勉強するか、POST を行う際の通信データをキャプチャ
して解析すればできそう。
または curl 関数あたりを使ってもおそらく添付ファイル付きの POST は可能みたいな
感じがする。試していないので間違っているかもしれないけど。
でも、わざわざ POST しなくても FTP とか SCP でファイルとデータを送っても問題なさそう
な気がする。
533 :
nobodyさん :04/07/30 03:23 ID:lnH8lc1C
他のサーバにあるファイルの更新日時情報をsocketを用いて HTTPヘッダから取得するという方法では、対象が複数の場合、 非常に遅くなってしまいます。 他に方法はないでしょうか?どうぞよろしくお願いします
>>533 ありませんね。
遅いというなら処理がヘタなのでしょう。
535 :
533 :04/07/30 03:32 ID:lnH8lc1C
>>535 特に簡略化するような部分はありません。
>>535 GETメソッドではなくてHEADメソッドで更新日時を取得する。
でも、まあ取得に時間が掛かるのは各々のHTTPコネクション
におけるネゴシエーション処理とかだから、別のプログラムを
組んで同時に複数処理するようにでもしないと、目に見えて
速くはならないよ。
538 :
537 :04/07/30 04:00 ID:???
そのスレッドの[PHP-jp 12338]で指摘されてるね<GET→HEAD
539 :
nobodyさん :04/07/30 05:12 ID:mTOZKk4E
質問です。 Windows XP Home Edition のサーバーです。 unlink でファイルを削除しようとすると、 Permission denied とエラーが出てしまいます。 そのファイルのあるフォルダの読み取り専用属性のチェックは はずしているのですが・・・。
540 :
539 :04/07/30 05:29 ID:???
すいません。ただ削除しようとしているファイルを fcloseで閉じるのをわすれていました。
|Д`)
542 :
nobodyさん :04/07/30 09:41 ID:Qj3jxbbr
御願いします。 execを使ってTXTファイルをPSファイルに変換すると 日本語部分が文字化けしてしまうんですが なんとかならないものでしょうか?? コマンドラインからTXT>PSは文字化けしないのですが・・
$text ='123'という文字列を$text ='1<br>2<br>3'に変換したいのですが、 どうやるのが理想的でしょうか? 1文字ずつ抜き出して<br>を加えて行くしかないのでしょうか?
>>543 $array = preg_split("//",$text);
$text = implode("<br>",$text,-1,PREG_SPRIT_NO_EMPTY);
違う、こうだ $array = preg_split("//",$text,-1,PREG_SPRIT_NO_EMPTY); $text = implode("<br>",$array);
>>544 早々なお返事、ありがとうございます。
教えて頂いたものを弄って動く様になりました。
PREG_SPRIT_NO_EMPTYというのが気になってぐぐって調べてみたのですが
ヒットしませんでしたし、私の環境では使えない様でした。
特殊環境なのでしょうか?。
>>544 ではないが、綴りが間違っている。
正しくは PREG_SPLIT_NO_EMPTY
DBにぶち込んだ画像をもってきて HTMLに表示する時ってどうすればいいですか? 知ってる人教えて〜
>>548 アホですか?
ああやっぱりアホでしたか
>>543 $text = preg_replace("(.)","$0<br>",$text);
>>548 えっと、それってラージオブジェクトで確保してんの?
>>550 デリミタが抜けている。
$text = preg_replace("/(.)/","$0<br>",$text);
でも、日本語が入る場合は、mb_ereg_replace を使った方が安全かも。
$text = mb_ereg_replace( "(.)", "\\1<br>", $s );
553 :
nobodyさん :04/07/30 11:57 ID:8Ir+KZbt
554 :
548 :04/07/30 11:58 ID:???
はい、そうです。
556 :
nobodyさん :04/07/30 12:24 ID:T0I0w0s1
setlocale ってのを使えばいいでつか?
558 :
nobodyさん :04/07/30 16:19 ID:35tZk6a5
>>556 542です。
おっしゃるとおりでございました。
ありがとうございます。
559 :
nobodyさん :04/07/30 22:20 ID:xMf/Vu/l
>>548 画像はDBにぶち込まないほうがいいよw
>>532 RFCも見てみたんですが、boundaryの番号の生成法とか、バイナリデータをどう
エンコードしていいのかさっぱりなので、ヘッダを勝手に生成してくれるPerlでやってみようかと思います。
ありがとうございました。
さっきPHP始めたばかりなんですが質問させていただきます
http://abcd.com/test.php?hoge このtest.php?の後は引数ということでよろしいでしょうか?
その場合test.phpの中でどのように引数を扱えますか?
やりたいことは<a href = "./test.php?hoge.jpg">hoge</a>を
クリックするとhoge.jpgを含むページを吐くようなものです。
>>561 普通は"test.php?file=hoge.jpg"のようにやります。
この場合は$_GET['file']で内容を取得できます。
もし"test.php?hoge.jpg"としてやりたいのであれば
$_SERVER['QUERY_STRING']を参照するとよいかと思います。
こちらの場合は特殊文字がエンコードされているので
解除する必要があります。(rawurldecode参照
563 :
nobodyさん :04/07/31 01:12 ID:8q4uMfb8
拡張子 .php ってvodafoneからじゃ見られないの?docomo、ezや PCブラウザからは見られると報告を受けているHPが彼らのみ見られないようなのです。 もしくは何か使っちゃいけないTAGとか ファイルの大きさ制限とかあるんですか?
565 :
561 :04/07/31 03:50 ID:???
>>562 無事表示できました。
ありがとうございました。
566 :
nobodyさん :04/07/31 04:19 ID:EDchUNZZ
switch($hoge){ case 'check': $check = Check(); Abc($puni,$check); break; } function Check(){ $check = 'あいうえお'; return $check; } function Abc($puni,$check="1"){ if($check == 1){ print "1です。"; }else{ print $check . "です。"; } } とやっても $check に 1 以外入らないんですけど、なんで?
$baka = "あいうえお"; bk($baka); function bk($baka="1"){ echo $baka; }
<?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が合っていれば別のページに飛ぶようにしたいのですが 別にページに飛ぶための命令文がわかりません。 教えてください;;
headerでも使っておけ それからパスはmd5とかでハッシュ値を取れ
570 :
568 :04/07/31 18:56 ID:???
>>569 THX
print "$name01 $name02 $hn $id $pass $mail $age01 $age02 $age03 $add $tel";
if ($name01!=""&& $name02!=""&& $hn!=""&& $id!=""&& $pass!=""&& $mail!=""&& $age01!=""&& $age02!=""&& $age03!=""&& $add!=""&& $tel){
とやってみたんだがTRUEになんねーよ;;
ちゃんと全記入できてるのにな〜・・・
>>570 if の中にオカシイ部分がある。よーく見てみ。
つーか最後まで気を抜くな!
print "$name01 $name02 $hn $id $pass $mail $age01 $age02 $age03 $add $tel"; if ($name01!=""&& $name02!=""&& $hn!=""&& $id!=""&& $pass!=""&& $mail!=""&& $age01!=""&& $age02!=""&& $age03!=""&& $add!=""&& $tel != ""){ に修正しますた・・・無理ぽ、もうだめぽ_| ̄|○
header("Location:hogehoge.php")で飛べる。 headerは便利だから覚えておいたほうがいいよ。他にも色々あるし。
>>573 THX! mailtoもいけるのかな?
はあ... ちょっとはHTTP勉強してね
mailtoワロタよ
mailtoストームでも作る気なのか?
>>579 嵐キタ━━━━━(゚∀゚)━━━━━!!!!
581 :
nobodyさん :04/07/31 23:19 ID:WRy9c9NN
>>572 if文は不安な時は、()でくくるのが吉。
if ( ( $name01!="" ) && ( $name02!="" ) )
みたいに
あれ?変数ってブラウザ閉じないとずっと記録されてるよな?
PHPでファイル名を抽出することってできますか?
583 わかりにくいと思いますので詳しく 自分が何というファイル名かわからないとき 自分のファイル名を取得したい
スマン、誤爆った!
横からすみません。 PHPをコマンドライン側で実行する場合、$_SERVERの代用として なんという変数を使えばいいんですか? ついでにageさせてください。
HTMLをJPEGに変換するものって無かったですか?
591 :
589 :04/08/01 01:56 ID:???
すみません、質問内容が抜けていました。 $_SERVER -> $_SERVER['PHP_SELF'] です。 本当にすみません。。
PHP Accelerator使ってる人いる? うちはApache2+PHP4.3xなんだけど、使ってて動作おかしいとかない?
>>593 動作エラーを詳しく言えばいいのかな?
「Notice: Undefined variable: input_len文字までです。 in /www/xxx/yyy.php on line 498」
っていうエラーが出てきて、その行は
「show_error_msg("コメントは$input_len文字までです。");」
ってなってる。
コンパイラが「input_len文字までです。」を1つの変数と誤認識したんじゃないかと疑ってるのだが。
こんなの出るようなら評判悪いかなぁと思って、動作おかしいとかないか聞いてみた
>>592 PHPAもZend Optimizerもプログラムの作りによっては、
動作おかしいというか、落ちることがあるよ。
完全に互換性がある訳じゃない。
使う場合はちゃんとテストした方が良いよ。
URLをindex.php?chat=mattariで、 $data_file = "./$chat/log.cgi";にしているのですが $chat がどうしても空白になります。 なぜでしょうか?
597 :
596 :04/08/01 04:53 ID:???
print $chat; $data_file = "./$chat/log.cgi"; にすれば「mattari」と表示されました・・・
>>567 $foo = /{$_GET['chat']}/log.cgi
にしる。
register_variablesをOffにした方がいいぞ
599 :
598 :04/08/01 05:17 ID:???
おっと引用符と./を忘れたけどまぁ修正してくれ。
600 :
597 :04/08/01 05:24 ID:???
>>598 あり^^
9を逆さまにするなんてなかなかしゃれてるね
2チャンネルみたいに8文字のランダムなIDを作るにはどうしたらいいですか?
mt_srand, mt_rand, md5, substr辺りを使う
ここのIDはcryptベースだろ
class内でincludeした、function j()をa::j()として読み込む事は 出来ないのでしょうか? class a{ function b{ include_once('inc_php'); } } #inc_php function j(){ echo '123456789'; }
>>604 その書き方だと、function b の中に function j が入ってくることになるよ。
class a{
function j(){
include_once('inc_php');
}
}
# inc_php
echo '123456789';
キレイにしたいならstrategyパターンあたりを使えばええんでないの?
>>605 そうではなくて、includeした時に結果としてclass内の関数として
includeする方法がないものかと想いまして質問させて頂いております。
[結果イメージ]
class a{
function b{
}
function j(){
echo '123456789';
}
}
ページ1で$nameに山田と入力 ページ2でprint $name; ページ3で$nameを表示しようとしたらできないぽ;;
>>594 EUCで書けば多分日本語関係のエラーはほとんど潰れると思う。
SJIS使うなら変数は{$hoge}と括弧でくくっとこう。${hoge}だったかもしれんが。
print "コメントは".$input_len."文字までです。";でもOK。
>606 マニュアル読めよ
611 :
nobodyさん :04/08/01 16:03 ID:6iApVh2k
<?xml version="1.0" encoding="UTF-8"?> <ITEM> <CATEGORY Num="01">その他</CATEGORY> <CATEGORY Num="02">その他2</CATEGORY> </ITEM> これに<CATEGORY Num="03">その他2</CATEGORY>を書き込みたいのですが </ITEM>の後ろにしか書込めません。 </ITEM>の手前にポインタを移動する方法を教えて下さい。 fseekっていうのじゃ無理ですよね?
>>610 マニュアルには書いてないと思うがな
知らない奴が出しゃばるな!
>>611 ちょっとヒント。
ob_start関数、これを使えばseekのようなことはできないとしても
期待した結果に持っていくことはできますよ。
>>609 両方可能ですよ。
それと参考までに、
2次元配列使うときは必ず{}でかこまなければなりません。
もしも「echo "ほげ$hoge[1][0]ほげ";」と書いた場合は
echo 'ほげ' . $hoge[1] . '[0]ほげ';と等価になり
「ほげArray[0]ほげ」と出力してしまいます。
echo "ほげ{$hoge[1][0]}ほげ";と書くのが正しい方法です。
>>606 マニュアルには以下のようにかかれています。
「複数のファイルや複数のPHPブロックで分割してクラス
を定義定義することは できません。」
とはいっても似た処理として、
extends(クラスの継承)を使う方法がありますので
そちらを一度は見てみる価値はありそうです。
>>605 アフォか。そんな言語使用イヤ過ぎる。
普通にやれよ。
funciton hoge($params)
{
require_once('hoge.func.php');
return hoge($params);
}
617 :
611 :04/08/01 17:12 ID:6iApVh2k
>>613 マニュアルには出力のバッファリングを有効にするとあるのですが、
これでポインタ移動できるんでしょうか?
「ob_start ポインタ」でググってもそれらしき記述が見つからないのですが、、、
>>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);
>>615 マニュアルのそれは昔に読んだんですよね
funcitonをclass内に読み込み方法があればclass外のfunciton
と競合しないですむので理想的と考え質問したのですが、
それは出来ないみたいですね。
extendsを調べてみます^^ありがとうございます。
>>616 require_once()とinclude_once()の差はエラー時の処理の差で
しかないと記憶しているのですが違いましたか?
アフォな理由を説明してくれ!
620 :
611 :04/08/01 18:11 ID:6iApVh2k
>>618 すいません説明不足でした。
送信されてきた<CATEGORY Num="03">その他2</CATEGORY>を
<?xml version="1.0" encoding="UTF-8"?>
<ITEM>
<CATEGORY Num="01">その他</CATEGORY>
<CATEGORY Num="02">その他2</CATEGORY>
</ITEM>
と書かれているxmlファイルに書き足したいのです。
>>619 何でそこに反応するかな。
> return hoge($params);
のように以降の処理を普通に実装すりゃいいだけだろう。
>>620 いったんファイルをすべて読んでしまってから書き換えて出力するしかありませんね。
文字の挿入に関してはsubstr_replaceを見ておくといいかと思います。
# fseekで位置を移動するにも場所を知る必要性があるのであらかじめ全部読み取ったほうがいいです。
# fseekの場合</ITEM>に上書きしてしまいますし、、、
>>621 あぁ、funciton内で他のfuncitonを呼ぶのがですね^^;。
requireするファイルを絶対パスで実行されると不都合なファイルが
あるからなんですが構造として美しいものではありませんね。
624 :
611 :04/08/01 18:52 ID:???
>>622 色々と試してみます。
ありがとうございました。
掲示板を作ろうと思うんですけど、下記のやり方が思いつきません ・2重投稿の防止 ・連続投稿の防止 ・書き込みした内容の編集 ・書き込みした内容の削除 当方激しく初心者です;; もしよければアドバイスお願いします・・・
>>625 >・2重投稿の防止
>・連続投稿の防止
>・書き込みした内容の編集
>・書き込みした内容の削除
この機能を除いた掲示板はもうできたのか?
627 :
625 :04/08/01 20:13 ID:???
どういう方法で書き込み内容を記録してるかわかんないから答えられない
629 :
625 :04/08/01 20:18 ID:???
名前,タイトル,メール,コメント みたいな感じかな・・・
編集も削除もシーケンスでID振らないとどの書き込みか特定できないだろ
631 :
625 :04/08/01 20:20 ID:???
シーケンス!? すまん、初めて聞いた_| ̄|○
>>625 PHPの掲示板スクリプト配ってるところを検索してソースを見ろ。
初心者なんだからソースパクれ!
「連番」かな どのようして削除、編集するコメントを 指示するのか考えなかった?
634 :
nobodyさん :04/08/01 22:16 ID:2fDXisU0
拡張子が.phpのファイルにcgiを呼び出して表示させるのは、どうしたらいいですか?
拡張子が.phpのファイルに・・・ っておかしな言葉だな。 <? require("hogehoge.cgi"); ?> であかんのかい?
636 :
634 :04/08/01 22:28 ID:2fDXisU0
これだと、cgiファイルの中身が表示されてしまいます。 実行結果を表示させたいのですが。
log.cgiの中身を全て削除したいのですが どうすればよいでしょうか?
mysql_queryで長いクエリー送るとSyntax Error返してくる。 そのクエリーをphpMyAdminで送ったら正常動作する。 そういう経験ありますか?今これではまってます。助けて。 MySQLサーバーは3.23, phpは5.00ダー。
>>639 もしかして複数行送ったりとかしてないですよね?
>>638 削除するならば
@unlink('./log.cgi');
0Byteにするならば
fclose(fopen('./log.cgi', 'w'));
642 :
639 :04/08/01 23:19 ID:???
メッサ複数行送ってる。ダメなのね。ありがとさん・・・。
643 :
634 :04/08/01 23:23 ID:2fDXisU0
えー、やはり変わらず、cgiの中身が表示されてしまいます。 507さん教えてください。
中身を削除するって言ってるんだから0byteにするしかないだろ・・・ これだから厨コテは
来る奴来る奴奇天烈で差が無いなか結構味わいのあるとこ選考したなw つーかあれクラス内の関数とか言ってるし関数とメソッドの区別がついとらんだけやろ 最初理解不能だったので、グローバルスコープ要素をクラスメンバにしようっていう 発想の凄まじさは認めたいが、、なんかどの初心者も俺を置いて遥か彼方に旅立っ ていってしまうよ
>>638 やったことあると思うが開いてるならゼロにftruncateすればいい。
ついでにこれを機会にマニュアル読むようになったほうがいいよ。
いやいや、log.cgiがファイルとは書いてないな 意外と・・・
<INPUT type="submit" name="action" value="書き込み"> #記事書き込み処理 if ($action == "書き込み"){ if ($name == ""){ print " </CENTER>ERROR:名前が記入されていません"; }elseif ($comment == ""){ print " </CENTER>ERROR:コメントが記述されていません"; }else{ if ($subject == ""){ $subject = "無題"; }else{} } } 書き込みボタンを押したんだが記事書き込み処理 が無反応です。なぜかactionに書き込みが入らない模様・・・ ナゼダ!!!!!!!!!!!
関数って引数を処理し結果を返す命令群の総称だった気がするんだが・・・ メンバ関数と呼ばれるケースもあるしな
>>649 $_POST['action'],$_GET['action'],$_REQUEST['action']
のどれかの中身を覗いてみそ
652 :
649 :04/08/02 09:01 ID:???
全てカラッポですた><
>>652 ん、フォームの方かな^^;
<INPUT type="submit" name="action" value="書き込み">
だけ書いてもダメだよ
<form method='POST' action='filename'>
<INPUT type="submit" name="action" value="書き込み">
</form>
としましょう
654 :
649 :04/08/02 09:15 ID:???
<FORM method="POST" action="<?php echo $PHP_SELF; ?>"> <INPUT type="submit" name="action" value="書き込み"> </FORM> とりあえずFORMです・・・ これでもぬるぽ_| ̄|◎
655 :
649 :04/08/02 09:17 ID:???
あ、鯖にうpしたらできました^^; どうやら使っているPHPエディタが問題のようです;; ありでした〜
ファイルロック機能の動作テストをしようと思たのですが、 PHP全体は、ひとつのプロセスが終ってから次のプロセスを実行するのでしょうか? テキストファイルに、ただ10000回ほど読み込んだ物をまた上書きするだけのスクリプトを書き、 3,4窓で同時に回したのですが、どうも終ってから動き出しているような気がしてなりません。 ファイルロック用の関数を外した場合でも同じようでした。 そもそもテストの仕方が間違っているのかもしれません;; 環境はWindowsXP、AnHttpd、PHP4.3.2です。(同じPC、同じブラウザ) また、正しいファイルロックのテストの方法を教えていただけたら幸いです…。
>>655 そのPHPエディタって何? ほんとにエディタと関係あるのか?
658 :
655 :04/08/02 09:42 ID:???
DzSoft PHP Editor(体験版)です
>>656 まず WindowsXP、AnHttpd、PHP4.3.2 を
*BSDもしくはLinux、Apache 1.3.31、PHP 4.3.8 に変えてはどうでしょう?
#OSはともかく、httpdとPHPはマジ。
で、ロックをかけたとき、書き込み中、ロックを解除したときに何らかの出力をさせると良いかと。
あと書き込み中にusleep()してわざと処理に時間がかかるようにすると分かりやすいかも。
flock($fp, LOCK_UN);し忘れてるってのは無しの方向でよろ。
<?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内に上を記述するとページが何も表示されなくなりました・・・ なぜでしょうか・・・
>>660 if ($count>=$page){
$count = $page;
}
ここで$countがリセットされているようですよ。
>>659 有難う御座います。まずはApacheを入れてみる事にします。
>>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);
ですよ。ロックは失敗する可能性もあります。
664 :
nobodyさん :04/08/02 11:01 ID:FFy40LXR
初めて質問します。 cgiとphpを使っていますが、 cgiファイルを使って、一部phpファイルを使いたいです。 たとえばcgi掲示板の中にphp表示(例えば別の掲示板も表示)するとか・・・ ご指導ください。
外部コマンドとして呼び出して結果を表示すればよい。
>>663 ロックに失敗するのって例えばどんな場合?
セッション情報をクリアしたいのですが、 セッションIDだけはクリアせずそのまま使用したいのですが 何かいい方法はないでしょうか? 現在はsession_unsetを使ってクリアしようとしています。
672 :
660 :04/08/02 13:43 ID:???
>>661 if ($count>=$page){
$count = $page;
}
もし$pageより$countのがでかければ
$countに$pageを代入したいのですが・・・
673 :
660 :04/08/02 13:51 ID:???
お・・・できてました・・・ しかしこんなバグが残ってしまいました Aを書き込みする、Bを書き込みすると更にAが書き込みされる・・・ なーぜだああああああああああ
674 :
660 :04/08/02 13:58 ID:???
$message = file($logfile); list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2) = split( ",", $message[0]); if ($no2 == ""){ $no = 1; }else{ $no = $no2+1; } if ($name != $name2 && $comment != $comment2){ $put = implode(",", array($no,$name,$mail,$subject,$comment,$time,$host,$color,$pass)); $message = file($logfile); $fp = fopen($logfile, "a"); rewind($fp); fputs($fp, "$put\n"); if($max <= sizeof($message)) $num = $max - 1; else $num = sizeof($message); for($i = 0; $i < $num; $i++){ fputs($fp, $message[$i]); } fclose($fp); $taju = 0; unset($message); }else{ $taju = 1; }
丸投げヤメロ
676 :
nobodyさん :04/08/02 14:01 ID:FFy40LXR
>>665 cgiの外部コマンドでphpを呼び出せるそうですが、
出来るんですね。ただ解説しているサイトがない・・・_| ̄|○
`php file.php`
678 :
nobodyさん :04/08/02 14:23 ID:FFy40LXR
>>677 #!/usr/local/bin/perl
$command = `php file.php?q=php&hl=ja&lr=lang_ja`;
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>結果</TITLE></HEAD>\n";
print "<BODY BGCOLOR=\"#ffffff\">\n";
print "$command\n";
print "</BODY></HTML>\n";
でよろしいでしょうか?
679 :
nobodyさん :04/08/02 14:28 ID:9GDxpHGw
PHPを使用して、JPEGイメージにコメントヘッダを書き込むには どうしたら良いですか?
680 :
662 :04/08/02 14:31 ID:???
>>663 サンプルコード有難う御座います。
ロック機能本体についても勉強中です。
>>667 半日かけてなんとかApach導入できました(汗
結果、恐らく今度は同時に動いており、ロック外した状態でリセットされまくりでした。良かったです。
681 :
nobodyさん :04/08/02 14:36 ID:lglFWosb
PHP4.3で、画像ファイルの添付メールを送るにはどうしたら良いですか? <input type="file">形式で、アップロードされた画像は添付できるのですが 元々サーバ上にある特定の画像を添付してメールしたいのです。
>>681 アップロードされた画像を添付できるなら、もともとある画像の添付もわけないと思うが、
ひょっとしてアップロードされた画像をメール配送するスクリプトをどこかでひらってきただけか?
なんか、丸投げのヨカソ。
PEARのMail_mimeでも使えばよろしいかと。
683 :
nobodyさん :04/08/02 15:03 ID:N/tiSL6x
下記のHPを見るとき、
http://www.bridal-vip.co.jp/ 時々、開けないときがあります。
表示されないとき、上記のHPを見ると以下のようなソースが書いてありました。このようなHPを多くの人が見れるように改善するときに、最小限の修正をするとしたら、どういった改善方法をとれば、いいのでしょうか。詳しくは、ソースを見てください
わかんね
phpの文字列の実装ってどうなってるんでしょ。 長さは保持してるのかいな。 最初に確保されるメモリーのサイズは? CopyOnWriteで実装されてるのか、そうじゃないのか。
>>686 つかマニュアル嫁よアホが。確保されているメモリのサイズはデフォで8Mだ。
688 :
681 :04/08/02 15:46 ID:???
>>682 凡ミスで、送れていなかっただけでした…。
PEARを使わずに出来れば良いのだけれど(便利で結局使うが)
>>681 PEAR使わないなら自分でBoundaryを作ってマルチパートに埋め込んで
送るしかないなぁ。俺は一応その手のライブラリ作ってるけどPEARのが便利だね( ´-ω-)y‐┛~~
勉強にはなったけど。
初歩的な質問なんですが aとwの違いってなんですか?
マニュアル読んでも意味がわからなかった?
#記事削除 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!!!
>>644 マニュアルには以下のように書いてありますので
私の書いた処理でもファイルを0Byteすることはできます。
'w' 書きこみのみでオープンします。
ファイルポインタをファイルの先頭に置き、
"ファイルサイズをゼロにします"。
ファイルが存在しない 場合には、作成を試みます。
>>671 マニュアルのセッションの章を全部読んでください。
>>679 PHPの関数には無いようなので、JPEGのフォーマットを調べて
ファイル関数群を使って書き込むことになります。
誰か作って公開してるかも知れんけどね。
>>686 実装が気になる場合はソース嫁
>>679 EXIFブロックならばexif_read_dataを使って読むことができますよ。
>>692 $fp = fopen($logfile, "w");
$message = file($logfile);
ここの部分がおかしいですよ。
697 :
692 :04/08/02 17:03 ID:???
あり、とりあえずいろいろ修正して #記事削除 if ($action=="記事削除"){ $message = file($logfile); fclose(fopen("$logfile", 'w')); if($max <= count($message)){ $num = $max - 1; }else{ $num = count($message); } for($i = 0; $i < $num; $i++){ print "1 $no2 2 $number 3 $inpass 4 $pass2"; list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2,$color2,$pass2) = split( ",", $message[$i]); if ($number==$no2 && $inpass==$pass2){ }else{ $fp = fopen($logfile, "w"); rewind($fp); fputs($fp, $message[$i]); fclose($fp); } } } にしたのですが、記事が消えません;; パスあってるのに〜;;
>>692 ファイルを開いているときの0Byteにする場合はftruncate関数を使います。
ファイルを開いていない場合は'w'モードで開くだけで0Byteになります。
'w'モードで開いた時点でファイルは0Byteになります。
その後にファイルを読み込むと0Byteの文字列が返されることになります。
>>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);
700 :
697 :04/08/02 17:10 ID:???
シラナイ命令文イパーイでシボンヌ_| ̄|○ || ( ) ∪ ∪ ∪∪
>>700 あえてあなたの書いたコードを修正するならばこう。
でもファイルロック処理とかしていないから込み合う
サイトではデーターが消えたりします。
// 記事削除
if ($action=="記事削除"){
$message = file($logfile);
$fp = fopen($logfile, 'w');
if($max <= count($message)){
$num = $max - 1;
}else{
$num = count($message);
}
for($i = 0; $i < $num; $i++){
// print "1 $no2 2 $number 3 $inpass 4 $pass2";
list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2,$color2,$pass2) = split(",", $message[$i]);
if ($number==$no2 && trim($inpass)==trim($pass2)){
// 該当記事
}else{
fputs($fp, $message[$i]);
}
}
fclose($fp);
}
>>693 まぁアホは相手にしなさんな。・゚・(ノ∀`)・゚・。
>>701 ありです><
なんとかできました(*´д`)ハァハァ
(trimてなんだろ・・・)
マニュアルを見る癖をつけろ
706 :
nobody :04/08/02 17:25 ID:tyWsL5gt
アマゾンのWebサービスからXMLを取得し、SimpleXMLでデータを引き出そうと思っています。
環境はPHP5、WindowsXPpro、Apache2.0です。
例えば、
ttp://xml-jp.amznxslt.com/onca/xml3?t=webservices-20&dev-t=webthreads&locale=jp&KeywordSearch=Amazon&mode=books-jp&type=lite&page=1&f=xml 上記で取得したXMLから、
foreach($xml->Details as $details){
echo $details->ProdctName;
}
などのようにデータを取り出すことはできましたが、取得したXMLのなかで、
著者名(Author)など、各詳細情報(Details)内でも複数あるデータについて
foreachなどでデータを取得することができません。
単純にキーを指定して、$details->Authors->Author[2] などのようにすれば
データは取れるのですが、ループで取得できないとなんとも不便です。
とりあえずこんな感じに書いてみましたがうまく動作しません。
foreach($xml->Details as $key => $details){
echo $details->Manufacturer;
foreach($details->Authors as $authors){
echo $authors->Author;
}
}
これだと著者名の最初1件しか拾えません。countなどでAuthorを数えてみても
正しくカウントされないようです。
これはこういう仕様なのでしょうか?
なにか間違った記述をしているのでしたらご指摘いただけると助かります。
よろしくお願いいたします。
>>703 fileで読み込んだ配列はどうしても最後に"\n"が入ってしまうからtrimで除去したんですよ。
パスワードのあとに","が入っているプログラムなら大丈夫なのですが、、、
708 :
703 :04/08/02 17:29 ID:???
そういえば一番後ろにpassがあったような_| ̄|○ 本当にアリガトー>< PS.目的別PHPハンドブックを読んでいるがワカンネェ
$details->Authorsが複数存在してるのではなく $details->Authors->Authorが複数(配列として存在している)のならば こうあるべきでは? foreach($details->Authors->Author as $authors){ echo $authors; }
今日はImo氏がいるからアホの言いがいが無いな…。 また明日な。・゚・(ノ∀`)・゚・。
>>699 一瞬でもにでもファイルを 0バイトにすると外部から読み込みが入ると怖いのであまり 0バイトには
しない方が安全だと思う。
やるとすれば以下のような感じかな。実用するならもう少しエラーチェックを真面目にするけど。
if (fwrite($fn, implode("\n", $data))) {
ftruncate($fn, ftell($fn));
}
あと、fopen で開いているファイルを file_get_contents で開くのはちょっと好きでは
ないので、以下の方法で読み込むとか。
$data = fread(filesize($logfile));
>>711 でもその方法でやると後半部分のデータがくずれたりしますよ。
すべての部分(書き込みするために読み取る部分と、書き込みする部分)で
ロック処理をしておけばよっぽどのことがない限り大丈夫なはずです。
file_get_contentsはphpでは推奨しているといかなくとも、
「OSによっては高速になる」との記述もあります。
まぁちょっとの差でしょうけどね。
# それとちょっと間違えてるよ
# $data = fread($fn, filesize($logfile));
715 :
nobody :04/08/02 17:43 ID:tyWsL5gt
>>709 レスありがとうございます。
本当だ。できました。ありがとうございます。
こんな簡単なことに気が付かないとは恥ずかしい・・・。
716 :
711 :04/08/02 18:25 ID:???
>>711 で rewind を忘れていた。本当は fwrite の結果を取得してから
if 文を行った方が安全だけど。
rewind($fn);
if (fwrite($fn, implode("\n", $data))) {
ftruncate($fn, ftell($fn));
}
>>713 後半部分のデータがくずれるというのがよく分からない。
そのために、ftell で書き込み終わったファイルポインタの位置を取得して、
それ以降の部分を切り捨てている。
fwrite から ftruncate までの間に別からファイルの読み込みがあった場合は
確かにくずれるかもしれないけど、0バイトで読み込まれるよりはましだと
思ったということで。
一瞬でもファイルを 0バイトにしたいくないのは、fwrite で失敗、例えば
HDD のディスクが一杯になったりして、ftruncate でファイルを 0バイトに
した後にfwrite が失敗したりするとファイルは 0バイトで止まってしまうと
いう問題もあるからだけど。
711 で書いた fread の引数は確かに間違い。
ただ、fopen で既にファイルを開いていた場合は file_get_contents よりは
fread で全部読み込んだ方が早いのは確か。一応、ベンチマークを取って
確認した。
fopen から fclose までの一連の処理を行うよりは file_get_contents の方が
早いけど。
717 :
686 :04/08/02 18:37 ID:???
>>687 "最初に確保されるサイズ"ってのは文字列オブジェクト一つのことなんですけど。
あとデフォで8Mってのはmax_limitのこと?
これは「確保できる最大メモリーサイズ」であって、
どこにも「最初に確保されるサイズ」ってかいてない。
それとも別のオプションがあるのかな。
とりあえず適当に実験してみたところphpの文字列はC文字列で、長さは保持しない感じ。
この辺はあまり気にしてもしょうがないんだが。
PHPを使ってHTMLやPDFの内容を 動的に画像生成したいのですが、可能でしょうか?
>>718 PHPはファイルを読み込むことができます。
PHPは画像生成をすることができます。
718はhtmlやPDFのレンダリングエンジンを作ることができます。
結論 -> 可能です。
ある会員登録の登録フォームで無料メールアドレスでの登録を拒否するようにしたいのですが、 どんな風にスクリプトを書けばいいでしょうか。 流れだけでもわかりませんか?
>>716 そこでそのようなことをしなければならないようじゃ、
それをしてもデーターの後半はくずれてしまいますよ。
と言いたかっただけですよ。
私は一般共用サーバーで使うことを前提にしてやっている
のでそこまで考えていませんが(HDDがいっぱいになるとか、、、
私も調べてみましたがまぁそうっぽいですね。
ファイルサイズがかなり巨大になってくると逆になりますが。
file_get_contentsは引数が少なくて個人的に好きです。
というよりかネットワーク処理のときにfreadの第二引数に
だまされて避けてるだけですが、(ローカルでは問題ありません
# FreeBSD+PHP4.3+PHPAで10000回ループさせた結果
# fopen&fclose: 0.253ms
# fread: 0.223ms
# file_get_contents: 0.335ms
>>720 無料メールアドレスのリストを作成し、入力されたメールアドレスを比較すればいいです。
有料メールアドレスのリストでもいいですよ。
>>717 でも文字列中に"\x00"も含められるということは文字の長さを保持しているわけだし、
変数といわれても型がいろいろあるわけで、最低10Byteは消費しているなと思ったり。
推測なんでなんともいえませんが、
>>720 私だったらこんなの書きますよ。
$deny = array('hotmail.com', 'mail.goo.ne.jp');
list($mail_user, $mail_domain) = explode('@', $mail, 2);
if (in_array($mail_domain, $deny)) {
die('別のアドレスで登録してくださいませ');
}
725 :
679 :04/08/02 19:33 ID:???
レスありがとうございます
>>684 高いっす
>>694 知り合いから頼まれて作っているのですが(携帯用待ち受け画面サイト)、
端末に合わせて自動的に画像を拡大縮小してほしいということで
元ファイル読み込み→GDでリサイズ→imagejpegで出力
という処理をしています(ファイルとしては書き出していません)。
で、携帯のほうで転送不可にしたいということで、ドコモ用・au用で
違った転送不可フラグを書き込みたい、と。
やはり一度書き出さないと無理なのでしょうか?
気合入れてググってきます・・・。
>>695 そのexif_read_data()の逆の関数があればラクなんですけど・・・
exif_write_data($image,"comment","hogehoge");みたいな。
>>722 さん
>>724 さんレスありがとー
今のところhotmailが対象なのですが、他のメールも登録を考えた方がいいかな?と
思ってるので、そのリストを作成してみます。
ソースの提示もしていただき感謝です。
今のスクリプトへうまく組み込めればいいのだけど、最近php始めたもので^^;
参考にしてやってみます!
flockでロックしているファイルを、 file()で読み込もうとするとどうなりますか? flockを使うならファイル処理はfopenで揃えた方がいいでしょうか?
729 :
nobodyさん :04/08/02 23:11 ID:lHZ4GoiW
>>725 二つアドバイス。
一つ目
生成されるファイルサイズに気をつけてね。
vodafoneのV3/4シリーズは、ファイルサイズ最大6Kbyteだ。
QVGAサイズで6Kbyteは早漏圧縮率を上げないとね。
二つ目
QVGA対応端末の中には、Webアクセス時、QVGAサイズの画像を表示できない端末があります。
そやつらは、vodafoneだったら四分割、ezwebだったらダウンロードさせるしかないです。
730 :
nobodyさん :04/08/02 23:17 ID:lHZ4GoiW
おながいします。 千通ちかいメールを送る必要があります。 Mail::send()を使おうと思ってるんですが、sendmailで送るのと、smtpで送るのとで、速度面ではどちらが高速でしょうか? ちなみに、MTAはqmailです。
731 :
nobodyさん :04/08/02 23:41 ID:d5GNjYEU
変数に文字列が入ってるんですが、最初から20文字までを表示したいプログラムって、どのように組んだらいいのでしょうか? for分を使ってカウントしようとしたのですが、文字そのものをカウントできなくて困ってます。 よろしくお願いします。
732 :
nobodyさん :04/08/02 23:42 ID:8RF4q1S0
フォームからメール送信時のBccについて質問させて下さい
$to = '
[email protected] ';
$bcc = "
[email protected] ";
$from = "
[email protected] ";
$title = "sampletitle";
$headers = "From: $from\r\n";
$headers .= "Bcc: $bcc\r\n";
$msg = file("./mailtxt.txt");
$msg = implode("",$msg);
mb_send_mail($to,$title,$msg, $headers);
のように書いてtoの他にbccでも送信したいのですが
送信されません、マニュアルをみるとmb_send_mail()はヘッダの区切りが\nになっていましたが
mail()の方は\r\nになっていましたので両方試しましたがダメなのはそこではなさそうなのですが
どこがおかしいかご指摘いただけますか。
旧サンのコバルトのraQ550、Apache/1.3.20+php4.0.6です。
ポカーンな質問でとても申し訳無いのだけども... スクリプト内部に"->"という記述があるのだけども これってどんな意味があるのかどうかご教授を... 余りにも漠然としたワードなんで ググっても全くヒットしなかったデスん('A`)
734 :
nobodyさん :04/08/03 00:00 ID:7JP71wHz
phpとクラスとかオブジェクトとかで検索すると 出てくるんでないかあい?
>>734 >>735 なるほど!
クラスを用いた時のメンバ変数やメソッドにアクセスする為の
演算子という事が少しずつ分かってきました
激しく目から鱗です、謝々!!
アロー演算子な
739 :
nobodyさん :04/08/03 02:10 ID:OM2Aei59
コンストラクタでnewしてそのクラス内で $this->オブジェクト->メンバ名 としても Object->メンバ名 となってしまうんですが、どこがおかしいのでしょうか?
740 :
nobodyさん :04/08/03 02:22 ID:Q+9yurzP
その「Object->」はどっから出てきたんだ? 具体的なエラーメッセージor挙動を書きなさい
741 :
739 :04/08/03 02:29 ID:OM2Aei59
すいません、言葉足らずでした(^^; 設定情報を格納するクラスをつくっていて、 他のクラスのメンバにそのクラスのオブジェクトを生成・代入し、 print "なんたらかんたら$this->オブジェクト->メンバ名"; みたいな感じで出力させたところ、何故か出力が Object->メンバ名 になってしまうのです。 一応C++をやっていたのですが、PHPではpublicなメンバみたいなのは使えなかったりするのでしょうか?
<?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が出力されるけど、こういうことではない?
あ、タブで区切っちゃってた。・゚・(ノ∀`)・゚・。 適当なところにスペースよろしく。
>>741 print "なんたらかんたら{$this->オブジェクト->メンバ名}";
こうやってみたらいかが?
745 :
nobodyさん :04/08/03 13:20 ID:WVIz7Nic
PHP4.1.2時代に作ったプログラムを4.3.8用に修正したんだけど、 PHPのバージョンを4.3.8に上げる前に、 プログラムは前もって4.3.8に修正したヤツを 現行のサーバーに入れようと思ってます。 文法をより適切に修正しただけで、新しい関数などは用いてはいないので 4.3.8用に修正したプログラムでも4.1.2で動くかと思ったら、 一箇所ダメなところが。 「mb_ereg()」関数が4.1.2時代にはまだ「mbereg()」としてしか存在していなかったようで、 mb_ereg()関数を呼び出しても未定義と怒られる。 なので、 function mb_ereg($str1,$str2,$str3){ return mbereg($str1,$str2,$str3); } のような感じで関数をとりあえず定義してバージョンアップ前まではお茶を濁そうと思っていたら 三番目の引数が問題でうまく動かない。 mb_eger("(hoge)$",$data,$regs); とした場合に正規表現にマッチした部分を$regs[1]として 取り出すことができなくなってしまうのでお手上げ。 なので、「mb_ereg()」と自作した関数をそのまま「mbereg()」関数に リンク(エイリアス?)するような方法はないでしょうか?
746 :
739 :04/08/03 13:36 ID:???
>>742-744 レスどうもです!
>>742 ,743
やっちゃいますよね、それ。
内容は大体そんな感じです。
結局のところ、原因は・・・
>>744 まさにこれでした!
便利さには危険が付きまとうんですね(笑
皆さん、どうもありがとうございました。m(_ _)m
>>745 たとえばこんな感じ?
function mb_ereg($str1,$str2,&$str3){
return mbereg($str1,$str2,$str3);
}
748 :
745 :04/08/03 14:27 ID:???
>>747 なるほど、参照渡し。
PHPで参照渡しってほとんど使ったことなかったから思い付きませんでした。
ありがとうございます。助かりました。
ていうか参照渡しとすぐ分かるだろうに・・・
750 :
nobodyさん :04/08/03 15:27 ID:KxZQfxxV
ググってもよく分からないので有識者の方にお聞きします。 いままで、結構な規模のPHPプログラムをincludeを使って書いています。 このソースを外部に公開することになったのですが、 functionを使う感覚でincludeを使って処理を別ファイルに書き出していたので、 プログラム的にちょっとみっともないかな、と思っています。 ですが、問題はここではなくて、 includeとfuctionで同じ(ような)処理を呼び出す場合、 処理スピードが違う等のメリットはあるのでしょうか? functionではメモリにキャッシュされるような気もするのですが、 それに関するドキュメントが見つかりませんでした。 メリットが特になければ、 「スピードには問題ない!」で押し通そうと思っているのですが...
セッション情報をクッキーでブラウザに渡すとき、 Set-Cookie ヘッダは session_start() 関数を実行するときに表示されているんでしょうか? 環境は 4.3.6 + FreeBSD のレンタル鯖です。
752 :
nobodyさん :04/08/03 16:03 ID:BfqwKzi+
ApacheとTomcatを連携させている所にPHP4.3.8をインストールして HTMLに<?php include("test.jsp"); ?>と記述してみたのですが、 test.jspのソースがそのまま表示されてしまいます。 Apacheのhttpd.conf中のAddType application/x-httpd-phpに 「.jsp」を追加してみたのですがだめでした。 JSPのファイルからJSPをインクルードする方法なら簡単なのですが、 どうしてもHTMLからJSPをインクルードしたいんです。 JSPを表示する方法が分かる方がいたら教えてください。
>>749 「人生いろいろ、会社もいろいろ、社員もいろいろだ」
小泉純一郎首相様が言ってました。
>>750 取り合えずPHP4が前提でいいのかな?
「メモリにキャッシュ」をどのようにイメージしてるかが
ちょっと不明だが、サブプログラムのincludeでも
メインプログラム上のfunctionでの記述でも実行前に
メモリに取り込まれるのは変わらない。またこれは、
includeの箇所が実際に実行されるされないに関わらない。
スピードに関わるとしたら、includeの場合はファイルのopenや
close等の処理などで、塵も積もれば的な差異が出る可能性はある。
しかしその程度は瑣末な事。
>functionを使う感覚でincludeを使って処理を別ファイルに書き出し
素の処理コードをまんまincludeしてるのかな?
「公開」の目的とするものによっては、きちんと追いやすいコードに直すべきだよ。
includeはライブラリ然としたものを読み込むべし。
756 :
752 :04/08/03 17:24 ID:???
>>755 750です。
回答ありがとうございます。
メモリにキャッシュ、というのは、2度目以降の読み込みを想定していました。
functionだとメモリ上に常駐してくれるのかな、と。
includeはテンプレートを読み込むっていうイメージがあるもんで。
> 素の処理コードをまんまincludeしてるのかな?
そうです。
よく考えると、functionの方がコードとしては追いやすいですよね。
外部へは時間の関係で今のまま出しますが、
少しずつ、手直ししていくことにします。
重ねてありがとうございました。
質問なんですが、皆PHPをはじめたときどうやって勉強しましたか? 1文ずつ覚えていったり一つ何かを作ろうとしたり・・・ 俺の場合は本買ってまず掲示板作ろうととりかかりましたが 勉強のやり方はあっているでしょうか?
>>759 合ってるやり方なんて無いよ。自分で見つけるものさ。
自分が作りたいものを目指して勉強するのがいいんじゃないかな。
761 :
759 :04/08/03 19:06 ID:???
必死に掲示板を作っているけど ロックのかけ方もわからないし、クッキーすら全く・・・ 出来たものも微妙です・・・
最初はそんなもんじゃないかな。 ロックの概念とか頭に入れてるだけでもマシな方かと。
>>759 一番最初はcgiの拡張子をphpにしてエラーが無くなるまで頑張ったよ
大まかなところから考えていく。これがコツ。たとえば掲示板に書き込む処理なら、 「掲示板に書き込む」 「内容のチェック」 「必須項目チェック」 「内容が空欄であればエラー」 「最大文字長チェック」 「それぞれにあった文字数以上であればエラー」 「不正文字チェック」 「\x00を除去する」 「改行を\nに統一する」 「\r\nを\nに、\rを\nに置換する」 「問題のある文字(タグなど)を置換する」 「改行をタグに変換」 「ファイルの書き込む」 「ファイルを開く」 「ファイルをロックする」 「ファイルを読み込む」 「データを追加する」 「ファイルに書き込む」 「ファイルのロック解除」 「ファイルを閉じる」 1つ1つの細かいところは簡単。でも、漠然としてるから難しく感じる。 まぁとはいってもロックはちゃんと理解していないとだめだけどね。 # でもちゃんとしたロックをできている人はphpプログラマーでは少数 # 今度ホームページでも作ってそれについて書こうかな、
phpまともに理解していない糞コテが何言ってんだか
>>757 >メモリにキャッシュ、というのは、2度目以降の読み込み
この辺あたりから同じプログラムが連続して処理された場合の
キャッシュのようなものがあると考えてるのだと思われるのだが、
PHPはJavaのように何らかのアプリケーションサーバが常に
起動してる訳じゃなくて、基本的には1回こっきりで閉じている。
但しその1回の中での同一の処理については、効率化のための
処理が行われている。
httpdのモジュールとして運用した場合は若干違うのだが、
CGI版の挙動を調べてみると判りやすいだろう。
# CLIの方がもっと判りやすいか。
「同じプログラムが連続して処理された場合のキャッシュ」については
PHP Accelerator、Zend Performance Suite(Zend Accelerator)、
PECLに移された APCなどのプロダクトが関連するので、それを調べること。
767 :
745 :04/08/03 20:47 ID:???
747氏の方法で解決と思いきや、 第三引数を指定しない場合にエラーになってしまいます。 function mb_ereg($str1,$str2,&$str3=""){ とするとエラーになってしまうし。 どうしたものでしょう? 参照渡しの場合は初期値の設定は不可?
>>767 完全な実現は無理だと思うのですが、とりあえず
mb_eregを呼び出すときにmb_ereg($str1, $str2, &$str3);
定義の方をfunction mb_ereg($str1,$str2,$str3="")
にすることによってある程度実現は可能です。
>>765 じゃぁこれをもってこのスレから立ち退きますね。
少なくとも次スレまでは、
770 :
nobodyさん :04/08/03 21:34 ID:29Vzu5Ve
フォルダ内のファイルを表示するプログラムを作りたい場合、どのような関数を使えばいいですか?
(´Д`;) まにゅある見ようぜ わざわざ日本語に訳してくれてんだし
772 :
745 :04/08/03 21:42 ID:???
>>768 ありがとう。
今はテストできる環境がないので、明日試してみます。
773 :
770 :04/08/03 21:49 ID:29Vzu5Ve
readdirですね。スマソ
flock($fp,LOCK_EX) でロックかけたあと、ロックを外すにはどうすればいいのですか?
>>774 で、オマイはマニュアルのflockのページを見たのかと。
776 :
774 :04/08/04 15:32 ID:???
スマン、解除の方法見落としていた・・・
777 :
nobodyさん :04/08/04 15:39 ID:+l+GCo7r
774にロックをかけるにはどうすれば良いのですか?
flock( fopen("
>>774 ","r"), LOCK_EX );
>>778 774のファイルハンドルはいずこへ…。
780 :
nobodyさん :04/08/04 16:43 ID:T7C0bXmt
PHPを使って、フォームから数字を入れて、たとえば5と入れたら0〜5までを表示させるプログラムを教えてください。
<?php $no = 5; for ($i=$no ; $i >= 0; $i--){ print $i; } ?> これでダメなのか?
782 :
nobodyさん :04/08/04 16:54 ID:T7C0bXmt
だめでした_| ̄|○ フォームの処理は <?php echo $_POST["名前"]; ?> でいいんですよね
フォームの書き方にもよるよ。 method属性指定してなかったらデフォはGETで送られるし。
>>780 フォームで入力した値を取得して、
適正な値(正の数値、整数等々)かどうか確認して、
for構文を使って初期の値(0)から、入力値まで
カウントアップ(例示のでは+1)して、echoする。
初期値とカウントアップ、適正値の条件などは容易に
変更できるようにパラメータ設定としておくのが定石。
<?php $iNo = intval($_REQUEST["名前"]); for( $i = 0; $i <= $iNo; $i++ ) { print $i."<br>"; } ?> 一応答えおいとく。
786 :
nobodyさん :04/08/04 17:04 ID:T7C0bXmt
学校の課題なんですが・・・。 フォームから正の整数を入力して送信すると、1からその数字までの整数の 並び方を表示するPHPスクリプトを作れ。フォームの入力はテキストフィール ドやメニューを使ってもよい。入力が0以上かどうかのチェックも行え。
て、宿題丸投げかよ・・・○| ̄|_
788 :
nobodyさん :04/08/04 17:07 ID:T7C0bXmt
ああ!! さっきのできました! でも”5”の指定なしはどうすればいいんでしょう・・・?
789 :
nobodyさん :04/08/04 17:08 ID:T7C0bXmt
あああ! できました!!どうもありがとうございました!!
書き込む前に考えろや こチな!のAA貼っとけや
791 :
nobodyさん :04/08/04 17:16 ID:T7C0bXmt
小一時間考えました○| ̄|_ 4人で・・・ すみません。
>>788 課題を貰ってるのは君らだけなんだから、
授業を受けてる生徒内で解決するか
その課題に書いてある条件をここに列挙しろよ。
マルチ先にしか書いてない条件なんて、他の人は判らん。
でも先生も、このスレとPHP-usersと丸投げMLぐらいは読んでると思うぞ。
>>792 >でも先生も、このスレとPHP-usersと丸投げMLぐらいは読んでると思うぞ。
確かに読んでそうだな・・・(藁
てか、このレベルの課題って・・・何年生?低学年か?
しかも4人がかり。中学生かな。
ていうか学校の授業ってサーバサイドスクリプトの勉強なんかするんだ 普通はCとかスタンドアロンアプリケーションなんだけどな
時代が違うんだよおじちゃん
専門学校だたりして?
専門であのレベルだとしたら行く価値全くねーな
俺が高校の時はCOBOLだったが。DIVISION萌え。・゚・(ノ∀`)・゚・。
オレモー IDENTIFICATION DIVISION
WORKING-STORAGE SECTION
大文字はやめてくれよ 加齢臭オヤジども
プログラミングとか、ネットマナーとか、独学じゃなくて 誰かに教えてもらう時代になったんだな
807 :
nobodyさん :04/08/04 18:41 ID:+l+GCo7r
$_SESSIONを利用した場合にリンクによるGETによりPHPSESSIDが 盗まれた場合に同一ドメインまたはサーバー上のPHPが利用出来れば $_SESSIONの内容を拾得する事が可能であると想うのですが、 このリスクをさける為にはsession.use_only_cookies=1にする以外の 手はないのでしょうか?
言いたいことは分かるが >同一ドメインまたはサーバー上のPHPが この辺の日本語がおかしい
日本語の添削始めちゃったよ
うわぁぁぁん;;文字サイズ13pxなのにかなりデケーヨ;;
[<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に変数が格納されません、なぜでしょうか?
812 :
nobodyさん :04/08/04 19:09 ID:oguY/FCP
>>811 実際のブラウザ上でアンカーのhrefは何になってる?
813 :
811 :04/08/04 19:10 ID:???
ごめんなさい、”いつのまにか”ちゃんと表示されました・・・ 本当迷惑かけてごめんなさい・・・釣ってきます、、
なんだ register_globals の問題かと思った。
815 :
nobodyさん :04/08/04 19:36 ID:5xfxrndz
入力されたデータをDBに書き込みたいんですが、 普通にINSERT文をクエリー発行すると 複数ユーザに同時に書き込みされた時に DBアクセスが著しく遅くなってしまいます。 同時アクセスを防ぐ方法として、 一個のフラグのようなファイルを作ってみたのですが どうも確実に同時書き込みを防いでくれません。 その辺を便利に防いでくれる関数はないでしょうか? それか、便利な防ぎ方が載っているサイトがあれば教えて下さい。
テーブル構造が悪いんじゃなかろうか?
ぽまいら、
>>791 はXPでテトラプログラミングをしている先進的な学校の生徒でつよ
>>807 ついでにcookieもssl-secureにしておけば多い日も安心。
>>815 まずはDBのチューニングかな。
その前にスクリプトのチューニングが必要かも知れんけど:-p
その後で、使っているDBのロック機能を調べてみれ。
PHP側だけで排他制御するのはあんまりお勧めできない。
一箇所でも忘れたら全部パー。それでもあえてやるならflock関数かな。
同時アクセスの制御自体はデータベースサーバがやってくれるわけだし 俺もテーブル構造が悪いんだと思う
ていうか テーブルのロックするsql文あったでしょ
みんな他人の回答も読もうぜ。
あくまでアクセスブロックで防ぐとして、 ブロックされた人には 「只今、混みあっています。少々時間が経ってから再度アクセスください。」 とかってエラー出すのだろうか?
822 :
807 :04/08/04 20:55 ID:+l+GCo7r
SESSION機能を使っている時にIPの確認は毎回行っているのですが、
他に個人を識別するのに役に立つ情報などは何かあるのでしょうか?。
>>808 ハード一台で複数のドメインを管理している貧乏サーバーとか
あるかな、とひねくれた発想を^^;。
サーバー上でSESSIONがファイルとして保存されている場所が
同じであればドメインが異なってもアクセス出来てしまうのでは
ないかという事も考えてみました^^;;。
ひねくれすぎですね・・・。
IPアドレス+UserAgent+MACアドレス とか。 仕様的にはMACアドレスだけでも(ルータレベルまでは)識別できるはずだけど、 インターネット上には同じMACアドレスが山ほどあるみたいだからね。
824 :
1 :04/08/04 21:00 ID:???
クッキーについて教えてください
825 :
nobodyさん :04/08/04 21:02 ID:+6UXuj/L
すいません、ちょとお聞きしたいのですが、 今、PHPとPostgresSQLとで、プログラムを作ってるんですが、 DBから得たresultから、1行づつデータを読み込む部分での質問です。 たとえば、5行のresultがあるとして、 3行目まで読み込んだところで、ポインタをまた1行目に戻したい場合、 関数は何を使えばいいのですか? sybase_data_seek を使ってもうまくいかず(PHPのバージョンが足りてないのかも知れませんが) MySQLなら、mysql_data_seekという関数があるようですが、 Postgresの方には、同じような役割の関数はないのでしょうか? 開発環境を変えることができないことを前提で、 どなたか教えてほしいです。
> MySQLなら、mysql_data_seekという関数があるようですが、 > Postgresの方には、同じような役割の関数はないのでしょうか? sybase_data_seek
質問読まずに書き込む PEARのDB.php使って結果を配列に格納すれば無問題
PHP+MySQLで掲示板作ったのですがコメントの部分がたまに文字化けするのはなぜでしょうか? 文字コードもEUC-JPにコンバートしてるのですが、たまーに文字化けしてしまいます。 ご教授よろしくお願いします。
830 :
825 :04/08/04 23:12 ID:???
>>826 それは、PHPのバージョンがいくつから使えるんですか?
試してみたのですが、エラーでたんですけど・・・。
>>830 PostgreSQLを使うのにsybaseの関数を何故使うのか、ということだと思うのだが。
元質問の話に戻すと、まぁ、なんだ。おまいもマニュアル嫁。
PostgreSQL関係の関数って高々70個くらいだろ。
832 :
nobodyさん :04/08/05 00:46 ID:jHqBsTPN
会員制の掲示板を作ったとして、 その人がログインしているかどうか確かめることってできますか? ID、PASSを入力してログインするとログインしている人の名前が出るとか・・・ またブラウザを閉じるとその人の名前が消えたり・・・
何もかもダメダメだな
マニュアルから逆引きの方法教えてください・・・
Parse error: parse error, unexpected $ in 94って何すか? 特にミスっている場所ないのですが・・・
838 :
836 :04/08/05 03:15 ID:???
ちなみに文はこれです <?php $data = file($gdata); $count = count($data); for ($i=0;$i<=$count;$i++){ list ($idr,$passr,$lvr,$expr,$char,$winr,$loser,$hpr,$atcr,$defr,$masr,$dexr) = split( ",", $data[$i]); if ( $id != $idr ){ if ($i == 1){ print " <OPTION value=$idr selected>$idr</OPTION>"; }else{ print " <OPTION value=$idr>$idr</OPTION>"; } } ?>
これで満足? <?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>"; } } } ?>
841 :
836 :04/08/05 03:23 ID:???
まだまだ欲求不満ヽ(;´д`)ノ (ちなみにexplodeてなんだろ)
843 :
836 :04/08/05 03:33 ID:???
なるほどさんくす! しかしエラーが一向に消えない・・・
94行目付近がこのソースなんだろ?
845 :
836 :04/08/05 03:36 ID:???
88 </TR> 89 </TBODY> 90</TABLE> 91</FORM> 92</CENTER> 93</BODY> 94</HTML> _| ̄|○
どこかの } が足りないと思われ ちなみに838のソースはforを閉じてないぞ
847 :
836 :04/08/05 03:45 ID:???
>>846 あり! '}'忘れてました(*´д`)
ifとforが同じ列だったんで分かりづらかったようです><
有難うございました^^
一つのプログラム文を複数にわたって使うやりかた・・・ どうだっけ?w
849 :
848 :04/08/05 04:37 ID:???
例えば print "あいうえお"; print "かきくけこ"; 上の二つを呼び出す文
850 :
836 :04/08/05 04:47 ID:???
<?php print " <TD bgcolor=#ffffff align=center><SELECT size=1 name=getyou>"; $data = file($gdata); $count = count($data); for ($i=0;$i>=$count;$i++){ list ($idr,$passr,$lvr,$expr,$char,$winr,$loser,$hpr,$atcr,$defr,$masr,$dexr) = split( ",", $data[$i]); print $idr; if ( $id != $idr ){ if ($i == 0){ print " <OPTION value=$idr selected>$idr</OPTION>"; }else{ print " <OPTION value=$idr>$idr</OPTION>"; } } } ?> ヒロシです。 上の文を作ってみましたが、$idrに変数が格納されません・・・。
852 :
850 :04/08/05 05:01 ID:???
解ケツ! forの不等号が反対でした!
853 :
初心者 :04/08/05 05:02 ID:???
変数はブラウザを閉じない限りはずっと格納された状態なんでしょうか?
>>853 スクリプトが実行されている間のみかと(初期化しない限りは
855 :
初心者 :04/08/05 05:07 ID:???
1ページ目で、変数を$Aに入れる 2ページ目で変数を$Bに入れる 3ページ目で$Aと$Bを表示させる $Aはカラッポ、$Bにはちゃんと入ってる。。。 という現象です・・・
>>855 ページを切り替えるときにPOSTなりGETなりCOOKIEなりで渡してやらねば・・・
857 :
初心者 :04/08/05 05:10 ID:???
ごめんなさい、GET、COOKIEについてはサッパリです・・・ POSTはこの状況じゃ使えないです。
>>857 とりあえず何がやりたいのかわからんが
example.php?A=$A&B=$B
こんな感じで呼び出してやればいいんでない?
>>853 サーバサイドとクライアントサイド・スクリプトの
違いについて勉強してこい。してきた上で
「シリアライズしてファイル化」について調べると
幸せになれるかもしれぬ。
>>855 それも課題なのだろうか…という疑問がちょっと沸いた。
それなら「セッション変数」「hidden」だな。
861 :
初心者 :04/08/05 05:27 ID:???
とりあえずhiddenで解決できました。 しかしなぜ3ページ目まで変数が渡らないんだろう・・・
あたり前田のクラッカー
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ']' in 〜 on line 35
print " <CENTER>$idrrが$dmgに餌をあげた!</CENTER><BR>"; この文何かおかしいかな? これがエラーの原因なんだが
{$foo}
sjis馬鹿は死んでも治らない。
for文を使って数回同じ文を使いたいのですが $Aが0または$Bが0になった場合抜け出したいのですが どうすればよいですか?
868 :
867 :04/08/05 07:34 ID:???
for ($i=0;$i<=$A || $i<=$B;$i=$i+0){} こんな文が使えるなんて初めて知りました><
> $i=$i+0 キモッ while(...) でいいじゃん
>869 お前の方がよっぽどきもいわパゲッ!
> $i=$i+0 コスモを感じる
(=゚ω゚)ノィョゥ クッキーの使い方教えてくださいおながいします P.S マニュアル読んでもわかんねーよヽ(`д´)ノウワァァァァン
874 :
536 :04/08/05 09:04 ID:???
while ($A != 0 and $B != 0)
>>874 他スレでの名前になってた。・゚・(ノ∀`)・゚・。
クッキーにa'b"cという文字を保存してそれを出力するとa\\\\\\\'b\\\\ってなってしまうのですが どうしたらいいでしょうか?
$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); } データが消えてしまう・・・ 何がおかしいんだろうか・・・
magic_quotes_gpcをOFFにしてみれ。
とりあえず添削を。 for ($x;$x<=$count;$x++) $x=0ぐらいしる。 で、データが消えてしまうってどういう意味で言ってるのか分からないけど fopen($gdata,"a")でやってみれ。
あとsplit(",",rtrim($data[$x]));も試してみちょくれ。
クッキーに保存されたa"b'cを抽出して出力するとa\\\\ になってしまうのはなじぇ?
どうやったらうまく出力できるでしょうか?
magic_quotes_gpcをoffにすることは できません。 で、stripslashesを使ってもうまくいきません。。。
>>885 \だけ消したいならreplace使って消すといいよ。
>>885 >>magic_quotes_gpcをoffにすることは できません。
他の処理で使うからかな?それともoffにしたくてもphp.iniをいじれないからかな?
後者なら.htaccessで
php_flag magic_quotes_gpc Off
これも.htaccessが使用可能だければだけど
はい。クッキーにはa'b"cが保存されていて $a = str_replace("\\","",$a);とやってみましたが 表示される文字はa'b になってしまう。。だぶるくおーてーしょん以降が表示されないのです。。
除去してもいいんじゃない? $a = str_replace("\"", "", $a);
( ´゚д゚`)えーーー 除去でいいの? なんか不安なんだけど クッキーの文字自体に\があった場合はどうするのよ
ちなみにみなさんはフォームからの入力データをクッキーに保存させるときってどうしてますか?
俺は全てDB任せですが
>>895 クッキーには最低限の情報を与えます
例えばID
あとはクッキーからIDを読み取り、そのIDの情報をDBから取り出します
ID変えたら終わりだろ
>>893 大事な情報なら自作暗号化アルゴリズムで暗号化します
あとは空気から雰囲気を読み取り、その雰囲気の情報を経験から取り出します
COOKIE嫌いなん?(俺も嫌いだが…) PHP3か? 4ならSESSIONでも良いじゃないか。
俺もクッキーは大嫌いだね。 セッションが一番いい。 まぁセッションもクッキー使ってるわけだけど
何で嫌いなん?の何が嫌いなん?
905 :
882 :04/08/05 12:38 ID:???
どうやっても無理でしたので896さんの方法でやることにします。 結果は同じなのでま、いいか
>>905 これでどう?
if (get_magic_quotes_gpc()) {
$a = stripslashes($a);
}
>>878 }
fclose ($fp);
}
↓
}
}
fclose ($fp);
>>907 無理です。。
\\\がついてくる
ちなみにIDだけ保存してDBから取り出すと
cryptされたパスワードが抽出されてしまってだめでした。。
912 :
nobodyさん :04/08/05 13:27 ID:dWrkED0y
PHP4で処理の途中で何秒間か止めたりする方法って ありませんでしょうか?
クッキーに保存されてる変数$aのデータはクオート取り除いたデータです クッキーにはa%27b%26quot%3Bcと保存されていますので。。 で、$aをクッキーから抽出して表示するとa\\\'bと。。こうなってしまうのです
そういえば 眠れない時に羊を数えるのってsheepがsleepに似てるからなんだよ
917 :
nobodyさん :04/08/05 13:45 ID:UeFJsakm
>>904 クッキー使えなくしているクライアントが結構いる。
クッキーからIEの穴つつけたりした。
918 :
912 :04/08/05 14:04 ID:dWrkED0y
>>913 Windowsで動かしてます?
Shift-JISなら入力データをEUC-JPに変換、クォートしたらクッキーに書き込み、
クッキーから抽出したらShift-JISに戻して表示でどうです?
$a = mb_convert_encoding($a, "EUC", "SJIS");
自分自身のファイル名(index.phpなど)を取得できる関数ってありますか?
>>920 var_dump($_SERVER);
Unsupported operand types なんですが以下の変更で起きました (T-T) $list1、$list2 ともに配列です。 $all = array_merge($list1, $list2); ↓ $all = $itemList1 + $itemList2; なにが原因と考えられるでしょうか?
927 :
925 :04/08/05 15:36 ID:???
自己解決 $list1 or $list2 が array の 他に undef の場合があった。 array_merge()は undef でもマージできるけど + だと 型違いでマージできず。
セッションってやたら便利だけど キャッシュが効かないのが嫌。仕方ない?
>>928 そんなおまいのためにsession_cache_limiterですよ
931 :
nobodyさん :04/08/05 20:34 ID:4UXeuveB
質問です。 今、ラジオボタンでの入力を取り出すプログラムを書いてるんですが、 name属性が可変の場合、取り出す時にどうやって指定すればいいのでしょう? 具体的には下のようなソース。 <input type="radio" name="<?php echo $groupCode ?>" value="rw" > <input type="radio" name="<?php echo $groupCode ?>" value="r" > <input type="radio" name="<?php echo $groupCode ?>" value="n" > ↑で取り込んだやつを、 if( $groupCode == "rw" ){ $readStatus = "T"; $writeStatus = "t"; } のような感じで取り出したいのですが、 if文の中が、文字列の比較になってしまって、 どうしても取り出せないんです。 どなたかアクロバットなやり方を知りませんか?
こんな感じでどうですか <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"; }
あ、すまぬ可変って内容でしたね・・ちょっと寝ぼけてまつ hiddenで別に渡せないかなぁ?
・・・hiddenでも出来ないかな、これでどうかな? if( ${$groupCode} == "rw" ){ $readStatus = "T"; $writeStatus = "t"; } 何度も書き込んですまぬ、そろそろ寝よう・・
935 :
932 :04/08/05 21:20 ID:???
>>934 無理ですー。
うーむ、全面的につくり変えないとあかんのかな・・・
$groupCode = "rw"; $data = "groupCode"; echo $$data; //rw
937 :
932 :04/08/05 21:32 ID:???
>>936 できましたー、こんな単純なことでいいんですねー。
まじで、ありがとうございます。
$groupCode = "A00"; $A00 = "rw"; echo $$groupCode; //rw 実は逆だった…
なんども、出ている質問かもしれませんけど、 PHP version4.2.xで動いていたソースが4.3.xで動かなく なる場合はどうすればいいんですか?
>>939 ソースを書き換えるか4.2.xで永遠に動かし続ける。
どう書き換えればいいですか?
動かなくなったところの関数等をgoogleとかで調べて書き換えればいいと思うよ。
い 夏 ん 厨 じ い ゃ っ ん ぱ い
945 :
nobodyさん :04/08/05 23:18 ID:sAzaKBea
ファイルのアップロードのやり方がわかりません。 <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するか決められるのですか? (送信ボタンは別にあるものとして・・・)
>>946 マニュアルの目立つ所に書いてあるだろ。
948 :
946 :04/08/05 23:23 ID:???
すまん、マニュアル読んでわかんなかったから ここで聞いたんだが・・・もう一度見てくるぽ
$_FILES['userfile']['name']; の使い方が理解できんのよ・・・
$_FILES['userfile']['name']はアップロードしたファイルの名前だ。 サンプルを見て試して手加えて身体で覚えろ。 マヌアル10回声を出して読んで来い。
953 :
946 :04/08/05 23:53 ID:???
Warning: move_uploaded_file(***): failed to open stream: Permission denied in /usr/home/free/home/phpworld/public_html/pu/upload.php on line 8 Warning: move_uploaded_file(): Unable to move '/var/tmp/phpxgdg4W' to '***' in /usr/home/free/home/phpworld/public_html/pu/upload.php on line 8
955 :
nobodyさん :04/08/06 01:31 ID:ZX7YO8MK
おれもあぷろだ作ったけど、普通は何度も実験して覚えるもんだがなぁ 結果だけ急いでると勉強にならんよ
956 :
nobodyさん :04/08/06 02:56 ID:OcQEeCf3
上げての質問お許しを。 phpプログラムを複数改造しましたが古い方のものと 同じフォルダに入れてしまいました。 タイムスタンプもほぼ同じで区別がつきません。 そこで、例えばa.phpとa'.phpを比べて内容を比べる良い方法はありませんか? 比較する中で違う部分を反転表示させると言った便利な技はないでしょうか? たくさんあるので途方に暮れています。
スレ違い、というか板違い。
960 :
nobodyさん :04/08/06 08:32 ID:Herwsld0
皆さん、はじめまして。 最近、PHPを学習してる者ですが正規表現の所でつまづいて困っています。 半角英文字3文字と5桁の数字を組み合わせたものを if文判定で否定したいのですが if(eregi("^[^(abc[0-9]{5}])",$hoge)) { 処理A } else { 処理B } でやってもうまくいきません。どなたか分かる方ご教授ください。 よろしくお願いします。
diff
>半角英文字3文字と5桁の数字 ここが分からない。 つまり合計8文字になるってことか? なら if ( eregi("(^[a-zA-Z0-9]{8}$)",$hoge) && eregi("(^[a-zA-Z]{3}$)",$hoge) )
963 :
962 :04/08/06 08:38 ID:???
eregに訂正してちょ
なぜいまだにeregを使うのか俺には理解できぬ。
965 :
960 :04/08/06 09:13 ID:Herwsld0
>>962 すいません。説明不足でした。
最初の英数3文字abcは固定で、続く数字5桁は変動ありにしたいのです。
abc11111,abc22222,abc12345とこんな感じならOKという感じです。
総文字数は
>>962 さんの言うとおり8文字です。
これを否定したいので
もし入力データが上記のようだったら処理B,上記の形式を取ってなかったら
処理Aというような感じにしたいのです。
拙い説明で本当に申し訳ないのですが、どうかよろしくお願いします。
if(!ereg("^[abc]{3}[0-9]{5}$",$hoge)){ echo "A"; }else{ echo "B"; }
>>965 while(;;)
{
if( preg_match("/(^[a-zA-Z0-9]*$)/",$hoge,$match) )
{
print $match[0];
}
}
969 :
960 :04/08/06 09:49 ID:Herwsld0
皆さん。出来ました。 本当に有難うございました。
>596 そういうツールを PHP で書いてみたら? それなりのものができたらお手本として diff の ソースを見てみるといい。
972 :
970 :04/08/06 13:00 ID:???
ごめんよう。レス番まきがえた。 >596 でなくて >956 ですた。
974 :
nobodyさん :04/08/06 13:41 ID:sHfe9a+G
./img/xxx/zzz/123.jpg と言うファイルがあってそれをGDで自動でサムネイルを作っているのですが。 サムネイル作成時に、./img/xxx/zzz/のパーミッションを777に変えないと サムネイルが作成出来ないですが、 この./img/xxx/zzz/を自動で777に変えたいのですが、 何か方法はないでしょうか? explodeを使って切り出しして後でそれぞれのディレクトリー名を繋げればいいのですが、 ./img/xxx/zzz/ は毎回フォルダー名が変わるので ./img/xxx/zzz/123.jpgだと最後の「/」部分で前と後ろを分解する方法はないでしょうか? よろしくお願いします。
chmodで変える。basename,dirname使う。おけ?
>>975 さっそくありがと!
chmodは分かるのでdirnameとbasenameで調べてみます!
どもでした!
普通にコピーしてやったのですが必ず下記の文が出てしまいます ファイルアップロード攻撃をされた可能性があります。デバッグ関連情報: Array ( [userfile] => Array ( [name] => MapEditor.zip [type] => [tmp_name] => [error] => 2 [size] => 0 ) )
979 :
977 :04/08/06 14:41 ID:???
>>977 ではエラーコードが2だと出ている。
その上で
>>978 を読めば分かると思うんだけど・・・
分からないのならもっと基本的なところから始めたほうがいい。
981 :
977 :04/08/06 14:52 ID:???
エラーの数が2個かとオモタヨ煤i; ̄□ ̄)
成功(・∀・)と思いきや 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 ) ) とりあえず吊ってきます ||
ああ、そこのサーバーじゃ無理かもな。セーフモードかかってるよ。
AAACAFEの糞やろーーーーーうわああああああああああああああん!!!
そろそろ次スレ建てまつか
986 :
982 :04/08/06 15:26 ID:???
って・・・画像うpのCGI使えるんだからうpできるでしょ?
(ノ∀`)アチャー ほんと、基本からやれや
PHP側の制限であってperlの制限ではない。
知ったかは分からないエラーを全てセーフモードのせいにするようだ
990 :
976 :04/08/06 16:33 ID:???
うんむ・・ $image_dir_path = dirname($image_path);/*元イメージ格納ディレクトリーパス*/ $mkdir_path = $image_path.$mkdir_name;/*サムネイルを作成するディレクトリーまでのパス*/ mkdir($mkdir_path , 0777); chmod ($mkdir_path , 0777);/*←これが無いとmkdirでは755にしかならなかった、*/ で一応目的のディレクトリーを作ってサムネイルも作成できるのだけど $mkdir_path へディレクトリーを作るにはその上層のディレクトリーのアクセス権を777にしないと 行けないので、mkdirの前にchownでchown($xxx , www); としたけど、 chownするのはそのまた上層にwwwへのアクセス権777が必要みたい・・・ 結局、サムネイルを作成するディレクトリーまですべてwwwをオーナにして777にしないと いけない状態。。 どうすればいいんだろうか。。
>>989 原因や解決策がわかるなら答えてみろよ。
できねーんだろ?
ならセーフモードのせいかどうかわからないってことだ。
つまりお前みたいなやつが一番の知ったか。
993 :
:04/08/06 16:43 ID:???
993
>>991 いちゃもんつけたいだけのアホみたいだから放っておいたほうがいいよw
995
↑995 . .996 ↓997
>>991 ( ´,_ゝ`)
まぁそうやって逃げてればいいよ。
XREAで普通に画像うpできてるけど・・・
セーフモードで
>>983 釣り?
999 :
nobodyさん :04/08/06 18:06 ID:UNSVOLia
983は自分にセーフモードをかけてる予感♪
1000 :
nobodyさん :04/08/06 18:07 ID:UNSVOLia
〆
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。