トップページ⇒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


抜けているものがあったら補足願います
016613904/07/20 19:56ID:???
>140
サンクス!
default_charset = "Shift_JIS" が抜けてたらしい

php.ini

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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



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

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

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

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

return $str;
}
?>

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

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

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

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


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

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

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

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

require_once("res.inc");

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


print($text[$i]);

}




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

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

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

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

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

0242nobodyさん04/07/21 17:27ID:???
>>241
そこまで見当がついているなら、先ずはマニュアル嫁。
0243nobodyさん04/07/21 17:37ID:???
PHP5を使っているのですが、$_REQUESTにはCOOKIEの情報も
含まれるみたいなのですが、これはPHP4の時からそうなっていた
のでしょうか?
今まで気づかなかっただけか・・・^^;。
0244軟式PHP04/07/21 18:27ID:???
>>243
それがっどうしたっ!あっほだよっ♪
0245nobodyさん04/07/21 18:37ID:???
なつかしい
024624304/07/21 18:49ID:???
>>244
ごめんようぅ print_r($_REQUEST);
ってprint_r使う事がほとんどなかったのよん;
0247nobodyさん04/07/21 18:51ID:???
セキュリティ関連ならこの辺も参考にしとけ
ttp://jp.php.net/manual/ja/security.php
0248nobodyさん04/07/21 18:55ID:???
>>246
PHP4でも含まれていたはずだけど、今まで無かったのなら↓これの所為では?
ttp://jp.php.net/manual/ja/ini.sect.data-handling.php#ini.variables-order
0249nobodyさん04/07/21 18:57ID:???
今年のLLWeekendにはどうしてPHP出てないんですか?
つか去年はどうして出れたんですか?
0250nobodyさん04/07/21 19:02ID:???
Part1 : http://ebi.2ch.net/php/kako/982/982687820.html
Part2 : http://pc.2ch.net/php/kako/1003/10032/1003283567.html
Part3 : http://pc.2ch.net/php/kako/1013/10139/1013919792.html
Part4 : http://pc.2ch.net/php/kako/1022/10229/1022999539.html
Part5 : http://pc.2ch.net/php/kako/1031/10317/1031721334.html
Part6 : http://pc5.2ch.net/php/kako/1038/10389/1038988518.html
Part7 : http://pc5.2ch.net/php/kako/1044/10444/1044478561.html
Part8 : http://pc5.2ch.net/php/kako/1050/10502/1050249148.html
Part9 : http://pc5.2ch.net/php/kako/1057/10579/1057947512.html
Part10: http://pc5.2ch.net/php/kako/1064/10641/1064104114.html
part11: http://pc5.2ch.net/php/kako/1067/10676/1067635640.html
part12: http://pc5.2ch.net/test/read.cgi/php/1070639208/
part13: http://pc5.2ch.net/test/read.cgi/php/1073291978/
part14: http://pc5.2ch.net/test/read.cgi/php/1076163015/
part15: http://pc5.2ch.net/test/read.cgi/php/1078592587/
part16: http://pc5.2ch.net/test/read.cgi/php/1081267619/
part17: http://pc5.2ch.net/test/read.cgi/php/1084781699/
0251nobodyさん04/07/21 20:24ID:???
>>250
GJ!でもpart12-14はみれないぽ
0252nobodyさん04/07/21 20:29ID:???
mb_eregで^を無視するのは仕様か?
0253nobodyさん04/07/21 20:57ID:???
夏厨の釣りってこんな程度?
0254nobodyさん04/07/21 22:49ID:???
>>253
はぁ?答えられないなら書き込まないでね^^
0255nobodyさん04/07/22 02:00ID:???
夏ですなあ
0256nobodyさん04/07/22 02:03ID:???
<?php
header("Content-Type:text/plain");

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

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

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

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

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

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

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

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


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

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


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

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

・・・それ以前にa要素のtitle属性に全文をぶち込もうという蛮勇のほうが問題と思うが。
しかもstrip_tagsもhtmlspecialcharsもかけずに。
ポップアップさせたいのならCSSとJavaScriptで対応した方がいいよ。
p2のソースとか参考にしる。
■ このスレッドは過去ログ倉庫に格納されています