トップページ⇒php
986コメント361KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん05/03/03 22:41:23ID:???
・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-10辺り
0685nobodyさん2005/04/12(火) 06:51:49ID:???
>>684
$renderer = & $form->defaultRenderer();
$renderer->setGroupElementTemplate('{label} {element}', 'name');
てな感じで可能かと。
group.phpのtoHTML()の中で、上と同様の処理があって そこで{element}だけにしているので
elementのラベルが消えてるんじゃないかなぁ。あんまり自信ないけど。
0686nobodyさん2005/04/12(火) 09:55:50ID:???
アンケートを作ってみました
<FORM ACTION="http://www.example.com/example.php" METHOD=POST>
氏名:<INPUT TYPE=TEXT NAME="name"><BR>
メールアドレス:<INPUT TYPE=TEXT NAME="email" ISTYLE=3> <BR>
<BR>
選択<BR>
<SELECT NAME="test">
<OPTION VALUE="a">A
 
<OPTION VALUE="b">B
 
<OPTION VALUE="c">C
 
</SELECT><BR>
<BR>
テスト<BR>
<TEXTAREA NAME="impression"  rows=" COLS=10 5"></TEXTAREA><BR>
<BR>
テスト<BR>
<INPUT TYPE=RADIO NAME="test1" VALUE="a">A<BR>
<INPUT TYPE=RADIO NAME="test1" VALUE="b>B<BR>
<INPUT TYPE=RADIO NAME="test1" VALUE="c">C<BR>
<INPUT TYPE=RADIO NAME="test1" VALUE="d">D<BR>
<BR>
<INPUT TYPE=SUBMIT NAME="submit" VALUE="送信" id="submit"> <INPUT TYPE=RESET VALUE="やり直し"><BR>
<BR>
<BR>
</FORM>
内容を一度確認して送信するようにするには、どうすればよろしいですか?
0687nobodyさん2005/04/12(火) 10:24:19ID:???
>>686
http://pc8.2ch.net/test/read.cgi/php/1110697712/511-512
0688nobodyさん2005/04/12(火) 11:42:38ID:???
Ruby 界隈で Ruby on Rails が話題になっているけど、
PHP でも欲しくね?もうある?
0689nobodyさん2005/04/12(火) 11:51:03ID:???
必要と感じないので自分で作ろうとは思わない。
使いたくなったらRubyを使えばいいだけだし。
0690nobodyさん2005/04/12(火) 17:41:03ID:???
携帯の各機種ごとに分かれて位置情報を習得したいのですが
どうすればよいでしょうか?
思いつきません・・・
0691nobodyさん2005/04/12(火) 18:13:56ID:???
>>690
習得するなら、一生懸命勉強せよ。

取得したいなら、各キャリアごとに情報を収集せよ。

0692nobodyさん2005/04/12(火) 20:28:41ID:???
>>685さんどうも。
もれHTML_QuickForm_Renderer_Object使ってるから、
そのソメッド使えんみたいだわ。
QuickFormやめて、Flexyおんりーにするぽ。
0693nobodyさん2005/04/12(火) 20:44:35ID:???
すいません、
perlの正規表現ではカッコで括ったところがマッチすると、
$1,$2という変数に格納してくれるという便利な機能がありますけど、
phpで似たようなことは出来ますでしょうか。

具体的には

2005/04/09(金),01時12分00秒,ほげほげ

という形のデータを

[01:12:00],ほげほげ

という、時刻とテキストだけの形に直したいんですが…。
自分ではカンマでsplitして、substrで何回かに分けて時、分、秒の変数を作って
後でそれをくっつけるという処理しか思いつきません。

どなたか簡潔な方法を知っていらしたらよろしくお願いします。
0694nobodyさん2005/04/12(火) 20:52:21ID:???
preg_match
0695nobodyさん2005/04/12(火) 21:22:42ID:???
\\1 〜 \\9
0696nobodyさん2005/04/12(火) 21:23:32ID:???
あ、eregの話ね。
0697nobodyさん2005/04/12(火) 23:22:24ID:???
>>695
$hoge=ereg_replace("([0-9]{2})時([0-9]{2})分([0-9]{2})秒", "[(\\1):(\\2):(\\3)]", $hoge);

みたいにしたんですが無理でした。
なんでだろ…。
06986972005/04/12(火) 23:24:47ID:???
あ、できました、ありがとうございます。
0699nobodyさん2005/04/12(火) 23:46:47ID:???
pg_insertで、複数行同時追加ってできますか?
07006972005/04/12(火) 23:47:03ID:???
ああ、この\\1とかってperlの$1とかみたいに変数じゃないから次の行まで値を保持したりできないんですね…。
0701nobodyさん2005/04/13(水) 00:31:58ID:???
つ print_r($hoge);
0702nobodyさん2005/04/13(水) 01:11:49ID:???
おいおまいら!
漏れはセッション使用するときに
session_cache_limiter('none');
こうやって設定しているんだが、これはセキュリティーホールになりますか。
0703nobodyさん2005/04/13(水) 01:42:35ID:???
例えば掲示板のプログラムで記事投稿フォームを作る時、
フォームから投稿内容を受け取り記事追加処理をするphpファイルを新たに作るか、
それとも外部ファイルに記事追加処理関数を書いてその関数を呼び出す形を取るか、
どちらがいいと思いますか?あるいは他にもっといい方法がありますか?
0704nobodyさん2005/04/13(水) 02:02:01ID:???
自分が書きやすい方で。
0705nobodyさん2005/04/13(水) 02:11:31ID:???
関数には引数に応じて処理を分ける物があるけど、ああいうのって中で普通にswitchとか使ってるの?
もしそうだと、どの処理をする時にもswitch処理が必要になって
それなら最初から関数を分けてしまった方が処理が速そうな気がするんだけど。
0706nobodyさん2005/04/13(水) 02:23:22ID:???
>>704
レスありがとう。

ファイルにするとユーザーとの通信の手間が入ってくるわけでその点が余計な負荷になる。
外部ファイルの関数にすると、もしかしてその関数を使わない場合でもメモリに外部ファイルがロードされてしまうのかと思うと
フォームを開いただけで投稿処理をしなかった場合に無駄になる。

単純に書きやすい方で選ぶというだけでは無い選択肢だと思うんだが。
0707nobodyさん2005/04/13(水) 03:28:56ID:???
>>705
関数が増えると関数を特定する処理に選択肢が増え(ry
ていうかそれくらいのこと、処理速度にはほとんど影響ないだろ
気にするな

>>706
おまえもその程度の負荷は気にするな
0708nobodyさん2005/04/13(水) 07:42:50ID:???
>>703

関数を呼び出す手前で require_once() する。

ユーザーとの通信の手間って何のこと?
0709nobodyさん2005/04/13(水) 07:54:01ID:???
>>706
いいぞ ベイべー!
負荷をかけるやつは普通のプログラムだ!!
負荷をかけないやつは何もしないプログラムだ!!
ホント 戦場は地獄だぜ! フゥハハハーハァー
0710nobodyさん2005/04/13(水) 09:06:20ID:???
>>705
処理の多くが他のユーザー定義関数と「かぶる」場合、「かぶらない」部分だけ
switch〜caseなんかで分岐させれば、コードを短くできる。また「かぶる」部分
に何らかの修正が必要となった場合、関数1つなら1つ修正すればいいだけだが、
関数を分けていれば全部を修正しないといけない。

>>706もだけど、処理スピードなんて気にする暇あったら、もっと他に考えなけ
ればいけない事があるんではないの?と俺は思った。

>>706
そこまで気にするなら、投稿処理の時だけ該当ファイルをrequireすればいい。
CPUやメモリの負荷率見れるなら見てみ。
全く気にする必要のないレベルに間違いない。
0711nobodyさん2005/04/13(水) 13:42:08ID:y+S//+Zc
初心者でスマソ。
phpでブラウザのjavascriptがonになっているかどうかは、確認できるの?
0712nobodyさん2005/04/13(水) 14:01:22ID:???
>>711
JavaScript(の適当な命令)がphpを呼び出せればJavaScriptを使える
(少なくとも呼び出しに使ったJavaScriptの命令が使える)、つー方針でなら可能かと。
オイラはそんな面倒なことをしたくないので、ブラウザ側でJavaScript利用可・不可のチェックをさせるけど。
0713nobodyさん2005/04/13(水) 15:50:16ID:???
それっぽいスレは別に有るみたいですが、そこまで専門的な内容では無さそうな故、
こちらのスレで質問させて頂きたく思います。どうか宣しくお願い致します。

自分は今現在、趣味の範囲と見様見真似で「見た目が 2ch 型」のソレらしい掲示板を
自力で作り、一通りの動作確認を終えて、ソースコードの整理をしているところなのですが、
自分の思い付きで書いたコードが今一つしっくり来ないと言うか、もっとスマートな書き方が
出来ないものかと少し悩んでいます。

実際に真似をし始めて初めて知った 2ch 型掲示板特有?の妙なレス番指定方法
(/l50 とか /-50 とか) の文字列に対応させる為、

preg_match("/^(\d+)$|^l(\d+)(n)?.*$|^(\d+)(n)?-$|^-(\d+)(n)?$|^(\d+)(n)?-(\d+)(n)?$/",$string,$result);

という様な正規表現を指定し、$string 中に有るレス番指定文字を $result に取り込んだ
後、配列 $result の個数とその中身によって処理を分岐させる様な事をしています。

これらをもっとスマートに書こうとしたら、一体どの様にすれば宣しいのでしょうか?
0714nobodyさん2005/04/13(水) 16:55:06ID:???
>>713
スマートって言うのがどういうのかわからない
1行で済ませるのがスマートだったら全然駄目だけど
昔のクエリ方式と互換性も足せるために
$st = $to = 0;
$nofirst = '';
$ls = 0;
if ($_SERVER['PATH_INFO']) {
$pairs = explode('/',$_SERVER['PATH_INFO']);
$bbs = $pairs[1];
$key = $pairs[2];
if ($pairs[3]) {
if (strstr($pairs[3], 'n')) {
$nofirst = 'true';
$pairs[3] = str_replace("n","",$pairs[3]);
}
if (substr($pairs[3], 0, 1) == 'l') {
$ls = substr($pairs[3],1);
}
elseif (strstr($pairs[3], '-')) {
list($st, $to) = explode('-',$pairs[3]);
if (!$st) $st = 1;
}
else {
$st = $pairs[3];
$to = $pairs[3];
$nofirst = 'true';
}
}
}
0715nobodyさん2005/04/14(木) 00:11:49ID:???
すいません、あるutf-8のcsvファイルを開いて同形式のデータの置換作業をしてるんですが、
頭から置換の「^」を使って行頭から置換していると、
なぜかファイルの先頭の最初の一行だけマッチしません。

何かファイルの先端を示す不可視文字のようなものがくっついてるんでしょうか。
出来ましたら対処方法など教えて頂けたらうれしいです。
よろしくお願いします。
0716nobodyさん2005/04/14(木) 00:21:43ID:???
BOMが付いているんだろう。
http://www.atmarkit.co.jp/aig/01xml/bom.html
http://e-words.jp/w/BOM.html
http://www.wdic.org/?word=BOM+:WDIC
http://www.birdport.jp/Others/unicode/
先頭3バイトを無視すればいい。
でも、UTF-8はBOMが付いていないことが多いから
単に3バイト無視すると悲劇が起こる予感。
0717nobodyさん2005/04/14(木) 00:40:13ID:???
>>716
ああ、ややこしそうですね。
とりあえずデータの形は全部一緒なので、
あまり意味のない保険かけずに
「^」の先頭マッチは外しておきます。

ありがとうございます
0718nobodyさん2005/04/14(木) 01:02:17ID:???
session_cache_limiter('none'); にすると
レスポンスヘッダー
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
がなくなります。このときに、コンテンツはプロキシ、クライアントに
キャッシュされるのでしょうか。
07197132005/04/14(木) 01:31:56ID:???
>>714
自分としては、その辺の処理を正規表現で実現しているのかと思い込んでいたの
ですが、実際にはそんなに難しくない文字列操作関数だけでも十分なのですね。。
具体的な例を示して頂けた事も有って、その仕組みが良く理解出来ました。後は、
自分で組んでいるコードに合う形に直した上で拝借させて頂きたいと思います。

素早い返答を頂きながらも、こんな時間になるまでレス出来ず、申し訳有りません
でした。そして、ありがとうございました。
0720nobodyさん2005/04/14(木) 07:53:17ID:???
>>718
see RFC 2616.
post-check pre-checkはIE専用の拡張でMSDNに説明があったかと。
07217112005/04/14(木) 11:23:50ID:???
>>712
ありがとうございます
0722nobodyさん2005/04/14(木) 12:49:56ID:ai8mxHPm
質問させてください。

最近になりApache2.0.52 + PHP5.0.2 + MySQL4.0

と言う構成にアップグレードしたのですが、CMS関係のPHPアプリケーションがインストールできなくなりました

特にphpMyAdminでは下記のようなエラーが表示されます

  [1.20] 「cannot load MySQL extension, please check PHP Configuration(MySQL エクステンションをロードできません。PHP の設定をチェックしてください)」というエラーが出ます。
      PHP が MySQL サーバに接続する際には「MySQL エクステンション」という MySQL の関数セットを必要とします。
      このエクステンションは PHP の配布ファイルに含まれている(コンパイルで組み込まれている)こともありますが、そうでない場合、動的にロードする必要があります。
      エクステンション名はたぶん mysql.so か php_mysql.dll のはずですが、phpMyAdmin はこのエクステンションをロードしようとして失敗しているわけです。
      ふつう、この問題は「PHP-MySQL」とかなんとかという名前のソフトウェアパッケージをインストールすれば解決します。

php_mysql.dll は C:/WINNT/php.ini ファイルにて確かに指定しているため原因が掴めません。

   extension_dir = "C:\php\ext"
   extension=php_mysql.dll 

Apache の再起動時にこのようなエラーが表示されます。

   PHP Startup: Unable to load dynamic library 'C:\php\ext\php_mysql.dll' - 指定されたモジュールが見つかりません。


どうかご助力お願いします。
0723nobodyさん2005/04/14(木) 13:06:16ID:???
>>722
「指定されたモジュールが見つかりません。」
声を出して読んでみて!。

php_mysql.dllを検索してディレクトリを探し、そのディレクトリを
extension_dirにセットする。

窓ではディレクトリではなくフォルダか。

それにそんな事で悩んでいるようではtsファイルの移動も怪しいな。

Windowsで悩む奴の気がしれん・・・。
0724nobodyさん2005/04/14(木) 13:40:26ID:???
>>722
libmysql.dllをWindowsのシステムフォルダにコピーせよ
07257222005/04/14(木) 13:42:31ID:ai8mxHPm
>>723

レスありがとうございます。

php_mysql.dll はc:/php/ext/php_mysql.dll にあります。

   extension_dir = "C:\php\ext"
   extension=php_mysql.dll 

それで上記のように指定し C:/WINNT/php.ini に設定しました。
しかし動作してくれません、/と\を変えても効果なしでした。
tsファイルは C:/WINNT/system32/php5ts.dll にあります。

httpdやその他の設定などは、手元の教本と下のウェブを参考にしました。

http://okweb.jp/kotaeru.php3?q=945621&rev=1
07267222005/04/14(木) 14:04:34ID:???
>>722

libmysql.dll 移動で動きました、ありがとうございました。
0727nobodyさん2005/04/14(木) 15:10:19ID:???
いい加減人を馬鹿にするのはやめないか
残業でストレス溜まってるのは分かるけどさ
0728nobodyさん2005/04/14(木) 15:57:15ID:???
この場合、馬鹿なのはWindowsだろ
0729nobodyさん2005/04/14(木) 17:47:12ID:HOg80ZtT
preg_replaceで文字列内の#を検索して置換することができません。
ソースは
$txt = "あいうえお#かきくけこ#";
preg_replace("#", " ", $txt, 1);
です。ereg_replaceだと見つけてくれるのですが、
回数を指定したいので、pregを使いたいのです。
よろしくお願いします。
0730nobodyさん2005/04/14(木) 18:14:25ID:???
>>729
preg_replace("/#/", " ", $txt, 1);
0731nobodyさん2005/04/14(木) 18:17:29ID:???
>>729
preg_replace("{#}", " ", $txt, 1);
0732nobodyさん2005/04/14(木) 18:41:06ID:???
$bd['abc'] = 'test';

$tpl = preg_replace("/{html:([a-z\_])}/",$bd[\\1],$tpl);
という感じで\\1をキーとして利用する方法はないでしょうか。
$key = array_keys($bd)でキーを拾得してwhileするしかないでしょうか?

0733nobodyさん2005/04/14(木) 21:37:04ID:hazlvdsC
>>732
質問するんならソースをもうちょっと分かりやすくして欲しい。

で、本題だが。

ちとズレるかもしれんが、strtrを使ってどうにかならんか?
07347332005/04/14(木) 21:42:49ID:???
回答者なのにあげてもた。すまそ。

謝罪ついでに、もうちょい具体的に書いとく。

$tbl = strtr($tbl, $bd);
preg_replace("/html:[a-z\_]/","",$tbl);

この2行で希望する動作すると思うんだがどうだろう。
07357322005/04/14(木) 22:18:30ID:???
>>733
お返事ありがとうございます

以下の行程を一行で出来ないかと想いまして^^;

$template テンプレートファイル {key}が仕込んであります
$this->bd {}と差し替えるキーと値

while($tmp = each($this->bd)){
$pt = '{'.$tmp[0].'}';
$template = str_replace($pt,$tmp[1],$template);
}
0736nobodyさん2005/04/14(木) 22:59:25ID:4Pev5d6u
もうPHP5実働させてる人いますか?
以前(5.0.2の時)ちょっと触ってみて、
しばらく動かしていたら挙動があやしくなったので4に戻したのですが。
「一日一回くらい再起動させたら大丈夫」くらいの感じでしたが。
そろそろですかね。
07377332005/04/14(木) 23:09:50ID:???
>>735
$this->bdってのがよく分からんが、、、

要は、
$bd['hoge'] = 'hage';
$bd['am'] = 'was';
という配列を元に
$template = 'i {am} {hoge}.'を
$template = 'i was hage.'にしたいんだろ?


それなら上にも書いてるが、$bdを加工してからstrtr使えば一発じゃないか?
foreach($bd as $key=>$value){
 $newKey = '{'.$key.'}';
 $bd_use[$newKey] = $value;
}
$template = strtr($template, $bd_use);

オレなら最初から$bdのキーを{hoge}にしとくけどな。そうすりゃ1行で済む。
0738nobodyさん2005/04/14(木) 23:42:06ID:???
>>732
preg_* の e オプションを使えば一行で書けるのでは?
$tpl = preg_replace("/{html:([a-z\_]+)}/e",'$bd["\\1"]',$tpl);
07397322005/04/15(金) 09:22:08ID:???
現在弄り回しているので少し変更が入りましたが今は以下のようになっています。
テンプレファイルから{}で囲まれている全てのキーを拾得してから処理するように
しました。これはマッチしなかった{}がそのまま表示されるのを回避させる為です。
複数のページ構成を1つのテンプレで処理しようと考えております。
ただ、これだと{}で囲まれる全てが・・アウトですね--;

$template = $this->open_fie($path,'r');
preg_match_all('/{[1-z\_:]}/',$template,$keys);

while($pt = array_shift($keys[0])){
isset($this->bd[$pt]) || $this->bd[$pt] = '';
$template = str_replace($pt,$this->bd[$pt],$template);
}

echo $template;

>>737
$bdのキーを{hoge}にしておいてstrtr一行にしてみたけど上記より処理速度が遅いみたいです

>>738
上手く行かなかったです-;
07407322005/04/15(金) 09:25:12ID:???
>>739
自己レス
preg_match_all('/{[1-z\_:]}/',$template,$keys);
  ↓
preg_match_all('/{[a-zA-Z\_\:]+}/',$template,$keys);
07417332005/04/15(金) 10:58:48ID:???
>>732 >>739
対象の$templateのサイズ次第でスクリプトは変えなきゃいけないだろな。

時間や負担がかかるようなものならば、
毎回$templateを読み込む処理はまずい。
つまり、cron等で自動実行することになるが、それに速度は必要なのか、と思う。

余談だが、
$this->は実際にクラス処理だったのね。。。
なんか配列にキーを入れてるってのを示してる初心者かと思たよ、すまそ。
07427322005/04/15(金) 12:11:58ID:???
>>741
いえいえ、こちらこそ小出しで申し訳ありません。

$templateのサイズが大きいので負荷が高くなりました-;。
$templateはブログのような感じで各ユーザーがテンプレではなく本当の意味で
自由にカスタマイズ出来る仕様にしたいと考えて試みたのですが負荷を考えると
ページ作成後に.htmlで吐き出して利用する事でしか方法はなさそうです。
ただ動的ページの事もありますし、sessionも利用しているので悩み所です。

ありがとうございました。
0743nobodyさん2005/04/15(金) 12:32:06ID:???
<!--HTML-->
if($Slog[2]){
$Slog[2] =~ s/>/>/g; $Slog[2] =~ s/</</g;
print<<"<!--HTML-->";
<tr id=log-10>
<td><font id=kei>$Slog[2]</font></td>
</tr>
<!--HTML-->
CGIで書いたこれをPHPに書き直すとどうなるんでしょうか?
<?php
if($Slog[2]){
?>
$Slog[2] =~ s/>/>/g; $Slog[2] =~ s/</</g;
<tr id=log-10>
<td><font id=kei><?=$Slog[2]?></font></td>
</tr>
としてみたんですが、"$Slog[2] =~ s/>/>/g; $Slog[2] =~ s/</</g;"が
ページに表示されてしまい上手くいきません。
0744nobodyさん2005/04/15(金) 12:43:28ID:???
>>743
phpの処理は<?php 〜 ?>の間でやるべし。
置換処理が外に出ちゃってるし、変数の表示も外。

PHPの記述概念を根本から勉強するべし。
0745nobodyさん2005/04/15(金) 12:48:13ID:???
>>743
関係しそうな部分をPerl - PHP - 内容 の表で書くと、

=~    str_replace 文字列の置換
print<< print<<<   ヒアドキュメント

ってな感じになるが、単純な命令の置き換えじゃ無理だから理解しながら変更すれ。
07467432005/04/15(金) 12:59:34ID:???
<?php
if($Slog[2]){
$Slog[2] =~ s/>/>/g; $Slog[2] =~ s/</</g;
?>
<tr id=log-10>
<td><font id=kei><?=$Slog[2]?></font></td>
</tr>
ともして見たんですが、これだと画面が真っ白で何も表示されなくなります。
どう記述すれば上手くいくんでしょうか?
0747nobodyさん2005/04/15(金) 13:00:18ID:???
>>743
お前「教えてgoo」でも質問しとったな
質問者がマルチする掲示板は回答者側も見てることが多いからマルチしても怒られるだけだよ。
0748nobodyさん2005/04/15(金) 13:04:42ID:???
釣りに決まっとるやんけ!
07497432005/04/15(金) 13:23:34ID:???
すいません、どうしても早急に必要だったので。
0750nobodyさん2005/04/15(金) 13:34:58ID:???
>>746

<?php
if($Slog[2]){
$Slog[2] = htmlspecialchars($Slog[2]);

print <<<_HERE_
<tr id=log-10>
<td><font id=kei>{$Slog[2]}</font></td>
</tr>
_HERE_;
?>

未確認なので動作保障は無し。
07517502005/04/15(金) 13:36:00ID:???
訂正

<?php
if($Slog[2]){
$Slog[2] = htmlspecialchars($Slog[2]);

print <<<_HERE_
<tr id=log-10>
<td><font id=kei>{$Slog[2]}</font></td>
</tr>
_HERE_;
}
?>
07527462005/04/15(金) 15:30:26ID:???
>>751
ありがとうございます。
今試して見ましたが、画面が真っ白になってしまいました。
0753nobodyさん2005/04/15(金) 16:07:31ID:???
>>752
しょうがないな
どうせ$Slog[2]に何も入ってないんだろ。

<?php
$Slog[2] = 'test';
if($Slog[2]){
$Slog[2] = htmlspecialchars($Slog[2]);

print <<<_HERE_
<tr id=log-10>
<td><font id=kei>{$Slog[2]}</font></td>
</tr>
_HERE_;
}
?>
07547462005/04/15(金) 16:34:23ID:???
>>753
ありがとうございます。
$Slog[2]にはコメントが入っています。
0755nobodyさん2005/04/15(金) 16:57:42ID:???
PHPで位置情報を習得する関数ってあったっけ?
0756nobodyさん2005/04/15(金) 17:08:58ID:???
>>755
文字列の位置ならstrpos( )
07577552005/04/15(金) 17:14:31ID:???
すまん、詳しく書く

モバイルで現在の北緯と東経を求める関数教えてくれ
0758nobodyさん2005/04/15(金) 17:16:16ID:???
>>757
>>690-691
07597552005/04/15(金) 17:32:49ID:???
何から勉強していいかわかんね(´A`)
0760nobodyさん2005/04/15(金) 17:33:21ID:???
>>757
fsockopen( )で位置情報を送ってくれるサーバに接続。もちろんただでは接続させてもらえない。
ゼンリンから電子地図と地図データベース買えば位置を地図で表示できるかもしれない。
0761nobodyさん2005/04/15(金) 18:49:40ID:???
>>757
すなおにGPSでも買えよ。
PHPの関数は魔法の呪文じゃないぞ
0762nobodyさん2005/04/15(金) 21:25:30ID:???
>>757
findwhereyouare()
0763nobodyさん2005/04/15(金) 22:12:19ID:???
>>755

もまえ某webゲームの管理人にメールしたろ。
07647552005/04/15(金) 22:37:46ID:???
>>763
ご本人様ですか?(・∀・)
0765nobodyさん2005/04/16(土) 00:06:16ID:???
(゚Д゚;)≡(;゚Д゚)なんだなんだこの展開は!
こいつは見逃せないぜ…(゚Д゚)ゴクリ
0766nobodyさん2005/04/16(土) 00:33:02ID:???
もまえらやたらと親切でつね
>>4なのに
07677632005/04/16(土) 18:54:38ID:???
>>755

本人ですがなにか?
phpには位置情報を処理する関数ないよ。
自力実装汁。
07687552005/04/16(土) 21:54:57ID:???
>>767
まじすかΣ(゚∀゚;)
あれはPHP制御じゃなかったのか・・・orz
0769nobodyさん2005/04/16(土) 22:53:03ID:???
なにこの空気
0770nobodyさん2005/04/16(土) 22:59:10ID:???
test.png という PNG ファイルがあり、ファイルサイズは 107KB です。
で、ImageCreateFromPNG("test.png") を実行すると、以下のエラーが発生します。
Allowed memory size of 8388608 bytes exhausted (tried to allocate 256 bytes)

php.ini の memory_limit は初期値の 8M です。
これを 16M に変更するとエラーが発生しなくなるので、メモリが足りないのは
間違いないんでしょうけど…。
107KB 程度の PNG ファイルでなぜに 16MB も必要?

環境は、Solaris10 + PHP5.0.4(ビルトインGD)
0771nobodyさん2005/04/16(土) 23:00:54ID:???
PNGだから
0772nobodyさん2005/04/16(土) 23:23:04ID:???
>>770
この板の看板を300%拡大してpng8に変換すると大体100kBになった。
これをさらにbmp8に変換すると、、、427MBになった。。。
画素をメモリ上に展開してゴニャゴニャすると考えると8MBくらい可愛いものかと。
0773nobodyさん2005/04/16(土) 23:57:24ID:???
>>771 >>772 レスありがとさんです。
元のファイルを読み込んで PHP が何かしらの形式に変換して
保持するから、元のファイルサイズ = 必要なメモリサイズではない、
という理解でいいんですね。
memory_limit を変更することにしますです。
んで、調べたら memory_limit は ini_set で変更できるんですね。
知らんかった。
共用サーバーで、無茶苦茶な値を設定されると怖いような。
0774nobodyさん2005/04/17(日) 00:35:54ID:???
>>773
何でPHP_INI_ALLなのか俺も理解できない。
自分のとこはPHP_INI_SYSTEMに変更してるけど。
0775nobodyさん2005/04/17(日) 03:42:37ID:???
以下の様にして繰り返し処理の中で乱数を使っているのですが、
9割方同じ値が出てきて乱数として使えません。
何が悪いのでしょうか?
make_seed()はPHPの乱数についてぐぐって出てきたページに書いてあったものを流用しました。

function make_seed() {
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
while($i < 100){
mt_srand($i*make_seed()+3);
$A = mt_rand(0,1800000).mt_rand(0,6000000);
mt_srand($i*make_seed()+4);
$B = mt_rand(0,1800000).mt_rand(0,6000000);
$i++;
}
0776nobodyさん2005/04/17(日) 05:16:51ID:???
>>775
mt_srand() の引数が大きすぎる。「$i*」を消しなされ
mt_srand(make_seed()); で良い。
0777nobodyさん2005/04/17(日) 09:17:07ID:???
テスト用だからかも知れんけど、ループにmt_srand()を含めるのはどうかと
0778nobodyさん2005/04/17(日) 09:53:06ID:???
>>775
mt_srand((double)microtime()*123456);
$A = mt_rand(0,1800000).mt_rand(0,6000000);
$B = mt_rand(0,1800000).mt_rand(0,6000000);
とでもしとけば
0779nobodyさん2005/04/17(日) 14:30:56ID:???
srandはランダムの"初期化"なんだから最初の一度だけでいい。
0780nobodyさん2005/04/17(日) 20:51:04ID:???
こんばんわ
日記中のurlに自動リンクを貼ろうと思ったんですが正規表現が苦手なんで、
あれこれ検索して見つけたのがこれなんですが

$url = ereg_replace("([^[:punct:]]+)(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",
"\\1<a href=\"\\2\\3\" target=\"_blank\">\\2\\3</a>", $text);

これだと例えば
http://hoge.jp/img/hoge[1].jpg

みたいなアドレスだとurl中の[ ]以降が無視されてしまいますよね。
その辺りを改善するとどのようなコードになるんでしょうか。
どなたかよろしくおねがいします。
0781nobodyさん2005/04/17(日) 21:33:23ID:???
>>780
三つ目の括弧の中の文字クラスの指定の中に¥[¥]を追加しなさい。
0782nobodyさん2005/04/17(日) 21:56:29ID:???
>>781
ああ、それ実はやってみたんですよ。
間違ってるかも知れないですけどこんな感じ

$url= ereg_replace("([^[:punct:]]+)(https?|ftp)(://[[:alnum:]\[\]\+\$\;\?\.%,!#~*/:@&=_-]+)",
"\\1<a href=\"\\2\\3\" target=\"_blank\">\\2\\3</a>", $text);

でもこうすると完全に最初から最後までマッチしなくなってしまったんです。
\[\] だと文字クラスとして囲んでると判断されるのかなあと思って
\]\[ とかにもしてみたんですけど駄目で…。
0783nobodyさん2005/04/17(日) 21:58:19ID:???
それはもうやってみたんですよ、か…
0784nobodyさん2005/04/17(日) 22:15:30ID:???
教えて君の典型例は初めて見た。
■ このスレッドは過去ログ倉庫に格納されています