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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/07/16 07:12ID:KvHeypq/
・PHP全般の質問スレです。
・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。


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

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

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

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

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


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

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


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

error messageは

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

Windows だって タスク・スケジューラー や
Cygwin 版の cron (+cygrunsrv) で できるんではないでしょうか
0038nobodyさん04/07/16 19:14ID:ctj/r83y
>>37
>>34 は cron が自由に設定出来るようなプロバイダ鯖は、
あまり無いといいたいと 見た
■ このスレッドは過去ログ倉庫に格納されています