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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/01/03(火) 17:18:20ID:???
PHP全般の質問スレです。
【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。

過去スレ、関連リンク、FAQ等>>2-10辺り
0548nobodyさん2006/01/31(火) 02:12:45ID:???
>>545
print("fib($i)"); → print(fib($i));

print("fib($i)") ってのは文字列に$iの値を埋め込んで出力するって事、つまりfib()を関数として認識してない。
それと動作しないのとは関係ないけど、最初に書いてる$n; $i; は不要。$i は for($i=0; ...) で初期化されてるし、$n は使われてない。

まぁ次からは下質スレにおいで
0549nobodyさん2006/01/31(火) 02:20:40ID:???
下質住人キタコレw
05505452006/01/31(火) 02:26:33ID:???
>>548
ありがとうございます、おかげできちんと表示させる事ができました。
わかりやすい説明もどうもありがとうございました。
05515402006/01/31(火) 09:12:48ID:2n+xF/sd
ありがとうございます!

>>547
信じてなかったわけではなく、理解できなかったわけで…。
コレを機会にちゃんと勉強します。
かなり甘えすぎてしまってごめんなさい。

答えてくれた皆さん、本当にありがとうございました
m(__)m
0552nobodyさん2006/01/31(火) 10:41:44ID:???
>>551
str_replace()やpreg_replace()の置換対象の仕様なんて正規表現と何の関係もないし
05535432006/01/31(火) 20:03:14ID:???
>>546
おー、すごい楽そう。
使ってみます!
ありがとうございますー。
0554nobodyさん2006/01/31(火) 20:33:44ID:???
すごい楽しそうなのかと思った
0555nobodyさん2006/02/01(水) 00:05:32ID:???
$array = array("aaa","bbb","ccc");
みたいな配列を
$res["aaa"]["bbb"]["ccc"] = 1;
のようにするのってどうやってやる?
evalは使わないで。
0556nobodyさん2006/02/01(水) 00:10:07ID:???
>>555
$res[$array[0]][$array[1]]][$array[2]]] = 1;
05575552006/02/01(水) 00:22:23ID:???
>>556
すんません、 $array の長さが不定なんです。
3つ固定ならそれでいいんですが。
0558nobodyさん2006/02/01(水) 01:07:07ID:???
>>555
$array = array("aaa","bbb","ccc");
$ref =& $res;
foreach($array as $k) $ref =& $ref[$k];
$ref = 1;
0559nobodyさん2006/02/01(水) 11:17:48ID:???
555じゃないけどプチ感動した。
なんかいろいろ応用できそうだ。
0560nobodyさん2006/02/01(水) 12:08:18ID:???
array_rand -- 配列から一つ以上の要素をランダムに取得する
とあったのですが、
配列の1行目の要素を拾う場合は array_ なんと入れれば良いのでしょうか?
05615602006/02/01(水) 12:15:45ID:???
あ、すみません
$data[array_rand($data)];
こういう書式だったんですが
0562nobodyさん2006/02/01(水) 13:12:03ID:???
>>560
「配列の1行目」とは?
05635602006/02/01(水) 13:17:08ID:???
あ、すみません
<?
$data_file = "data.csv";
$row = array("7");
$num = count($row);
$data = file($data_file);
for($j = 0; $j < $num; $j++)
{
$result = $data[array_rand($data)];
$val = explode("\t", $result);
echo $val[$row[$j]] . "<br>";
}
?>

こういうプログラムで、data.csvの一番上のデータ行の、8列目の文字列を取り出す、
というのをやりたいんですが
$result = $data[array_shift($data)]; ではダメだった…
0564nobodyさん2006/02/01(水) 13:35:24ID:???
えーっと、$data[0]ってことかな?
05655292006/02/01(水) 13:53:53ID:???
memory_limit の問題にハマっています。
ご存じの方、教えて下さい。

このコードは8M超のファイルがDownload可能である事を確認しました。
---------
[php.ini]
 memory_limit = 8M
------------
[test.php]
 $content_size = filesize("$FNAME");
 header("Content-Type: application/octet-stream;");
 header("Content-Length: ".$content_size);
 header("Content-Disposition: attachment; filename=\"$SRCFILE_SJIS\"");
 flush();
 ob_end_flush();
 readfile($FNAME);
------------
しかし、上記と全く同じものを、ファイル名($FNAME)選択する
PHP中に含ませると下記のエラーが出ます。
Allowed memory size of 8388608 bytes exhausted (tried to allocate 8209774 bytes)

php.ini の memory_limit を超えてDownlloadできる方法は
これで合っているのですが、解決方法や問題点をご存じの方、ご指摘願います。
(小さなファイルはDownload出来ています)
0566nobodyさん2006/02/01(水) 14:33:37ID:???
>>565
> ファイル名($FNAME)選択するPHP
これが何やってんだかわからん。
無駄な処理を挟んでないか?
05675292006/02/01(水) 15:26:49ID:???
>>566
ファイル選択の前に、ID/PASSの認証と、sessionを利用してます。(同じPHPコード内)

ロジックとして以下のフローとなっています。
 認証 → .認証をSessionで保持 → ファイル選択 → .DL

もちろん、前段の部分が原因になっているとは思うのですが、
外すわけには行かず…。orz

DLに関しては、上記PHPコード部分で(ほぼ)独立した世界であると
考えておりましたが、甘かったようです。

最悪、外に fget.php を用意して、引数を与えて
DLさせるようにしてみようと思いますが、
何かしら解決手段、原因など判る方はご指摘願います。
0568nobodyさん2006/02/01(水) 15:58:54ID:???
>>567
前段でグローバル変数とか使いすぎてるんじゃないのか。

ダウンロードのとこ、readfile()で一気読み&出力しないで
fgets+fwriteのループ処理にしてやればいきなり8MBもメモリ確保するようなことはなくならない?
なんかPerl辺りじゃ常識的な省メモリ動作のロジックなのに(やらんやつはタコ呼ばわり)、
PHPの開発者って便利関数に頼りすぎて丸っきり無視する傾向にあるよな。
ファイルがあったら何でも配列に丸ごとぶちこめ!みたいな。
0569nobodyさん2006/02/01(水) 16:40:16ID:???
>>568
>PHPの開発者って便利関数に頼りすぎて
これはあるな。GETのQUERY_STRINGが自前のコードでパースできない奴とか。
便利なものを使わずに、わざわざ不便なやり方をしろとは言わないけど。
0570nobodyさん2006/02/01(水) 16:45:40ID:???
ま、それがPHPのいいとこでもあるんだがな。
05715292006/02/01(水) 16:56:19ID:???
>>568
レスどうも。 色々試してみた結果のご相談です。

>>529 読み込みバッファ固定+ループで吐き出し

 大きなファイル×
 小さなファイル ○

>>565 メモリ食わないように、強制バッファリング無し(ob_end_flush();)で吐き出し、(+flush系関数での試行錯誤。)

 大きなファイル×
 小さなファイル○

という結果で、路頭に迷っている訳です。

実は「強制バッファリング無し等が有効にならない条件」があって、
それにハマっているんじゃないかと思う次第です。

ともかく、下手打ってphpに100Mとか、1Gとかメモリを
食われるのはご免なので、もう少し苦しんできます。
0572nobodyさん2006/02/01(水) 17:04:12ID:???
>>571
Allowed memory size of 8388608 bytes exhausted は
PHPの変数で確保しようとしたメモリが足りないときのエラーだから
バッファリングのフラッシュとかは全然関係ないと思うぞ。
あと、ob_end_flashってob_start以降の出力制御をかけたときのフラッシュ処理で
ob_startを使ってないなら何の関係もない。

読み込みバッファ固定+ループってやつがやり方間違ってるとかじゃないの?
0573nobodyさん2006/02/01(水) 18:35:08ID:???
WinXPでshell_execでxcopyコマンド使うにはどうしたらいいでしょうか?

echo shell_exec("xcopy /?");

で走らせた所

'xcopy' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

と出て使えませんですた
0574nobodyさん2006/02/01(水) 19:25:40ID:???
>>573
PATHが通ってないだけだろ。フルパスで書いてみれば?
0575nobodyさん2006/02/01(水) 19:28:39ID:???
>>573
普通に使える。

>php xcp.php
<?php
echo shell_exec("type xcp.php")."\n";
echo shell_exec("xcopy /?");
?>
ファイルとディレクトリ ツリーをコピーします。
[以下略]

path通してないんじゃ?
0576nobodyさん2006/02/01(水) 21:13:37ID:???
%PATH%入れてませんですたorz
0577nobodyさん2006/02/02(木) 12:29:48ID:nicG19IV
質問です。

関数やメソッドに「配列を複数の引数として渡す」のは
call_user_func_arrayなどで出来ると思いますが、
new時のコンストラクタには出来ないのでしょうか。

class obj{
  function obj($a,$b,$c){
    echo "a=$a,b=$b,c=$c<br />\n";
  }
}
$arr=array("a","b","c");
new obj($arr);

↑みたいにしたいのですが・・・。
よろしくお願いします。
0578nobodyさん2006/02/02(木) 12:43:48ID:???
>>577
できないと思われ。
俺も以前、割と汎用的なファクトリパターンを実現したくて(飽くまで遊びでだけど)同じこと考えたけど、できないので諦めた記憶がある。
そのときは結局、継承だかインターフェイス使うかしてinitializeっていうメソッドを加えてcall_user_func_arrayした。
作ったやつ実際どこにも使わなかったけどorz
0579nobodyさん2006/02/02(木) 12:47:07ID:???
>>577
call_user_func_array(array("obj", "obj"), $arr);
0580nobodyさん2006/02/02(木) 12:49:48ID:???
取得したリモートホストのドメインより前を隠したい(*.aaa.co.jpのように)のですが、やりかたがよくわかりません。。
ヒントください。
0581nobodyさん2006/02/02(木) 12:52:31ID:???
ただし静的呼び出し(obj::obj()と同義)なのでコンストラクタ呼び出しとしては意味なさげ。
new obj($arr); //newの戻り値無視
とは同等だけどね
0582nobodyさん2006/02/02(木) 12:55:01ID:???
特に今困ってるわけじゃないんだけど、
PHP5ってそろそろ移行しといた方が良いと思う?
0583nobodyさん2006/02/02(木) 12:59:48ID:???
好きにすればいいと思うが、「良いかどうか」と問われれば「まだ早い」と答えたい
0584nobodyさん2006/02/02(木) 13:02:20ID:???
>>577
コンストラクタ側にそういう機能を持たせたら?
class obj{
  function obj($a,$b,$c){
    if(is_array($a)) {
     list($a, $b, $c) = $a;
    }
    echo "a=$a,b=$b,c=$c<br />\n";
  }
}
0585nobodyさん2006/02/02(木) 13:17:08ID:???
>>577-578
こんな感じのラッパーはどうか。試してない。

instance_on_array($classname,$args) {
$args_list=join(",",$args);
eval("\$instance=$classname $args_list");
return $instance;
}
0586nobodyさん2006/02/02(木) 13:24:50ID:nicG19IV
>>578 >>579 >>581 >>584
たくさんのレスありがとうです。

>>579さんの見て「おっ」と思ったのですが、
>>581さんの言う通り、普通の関数呼び出しです・・。
難しいようですね。
>>584さんの方法あたりで、もうちょっといろいろやってみます。
0587nobodyさん2006/02/02(木) 13:28:53ID:???
>>580
どういう挙動にしたいかいまいちわからないけど、例えばこんな感じか?
"*" . strstr("bbb.aaa.co.jp", ".")
0588nobodyさん2006/02/02(木) 14:35:36ID:nicG19IV
結局、力技で・・・。
 switch( count($arg) ){
 case 0:
  return new $obj();
 case 1:
  return new $obj($arg[0]);
 case 2:
  return new $obj($arg[0],$arg[1]);
...以下ひたすら延々とw
皆さんありがとうです。
05895292006/02/02(木) 17:39:14ID:???
結果報告
--------------------------------------
環境
 apache+mod_ssl-1.3.33+2.8.22_1  (httpsを利用)
 php4-4.4.2
 php.ini memory_limit = 8M
 test.zip 25Mbytes

--------------------------------------
(1)OKコード

 $filename = "./test.zip";
 ob_end_flush();
 readfile($filename);
--------------------------------------
(2)NGコード

 $fp = fopen ("test.zip",'rb');
 while(!feof($fp)){
  echo fread($fp,1024*10);
  flush();
 }
 fclose($fp);
--------------------------------------

(1)の場合でも、session_start();を利用すると×
両NG時、memory_limit = 100MでOK、70MではNGだった。

25Mのファイル如きに、冗談かと思うメモリ消費量。
なんにせよ疲れた…。
0590nobodyさん2006/02/02(木) 18:02:40ID:v1gMyS91
PHP初心者の漏れなんだがとても困ってるので質問シマス。
実はHPを運営してるんだが、phpの掲示板を設置した
しかし、設置したはいいが動作しない(ページが表示されない)
鯖はsakuraです
しかし別の鯖ではうまく動作します
phpはぜんぜんわからないのでご支援ヨロです。
0591nobodyさん2006/02/02(木) 18:08:41ID:???
うpして
0592nobodyさん2006/02/02(木) 18:10:55ID:???
>>590
ダウンロードした物をそのまま上げて動かないなら
文字コードかなあ。
0593nobodyさん2006/02/02(木) 18:14:00ID:???
>>590
別の鯖で動くなら、その動くほうの鯖で動かすっていう選択肢はなしなの?
05945902006/02/02(木) 18:20:47ID:v1gMyS91
>>592文字コード?
>>593別の鯖は無料の代わりに広告が入るから…。
出来ればサクラで動かしたい
同じ鯖で同じスクリプト使ってるサイトもあるのだが、
ちゃんと動作している。
0595nobodyさん2006/02/02(木) 18:25:23ID:???
それじゃソースうpしてみ。
あと「動作しない」ってのがどういうふうに動作しないのか具体的に書くよろし。
エラーメッセージが出るのか出ないのか、表示はできるけど書き込みすると変なことになるとか、文字化けがあるとか。
何をどうしたときにどう変なのか。
0596nobodyさん2006/02/02(木) 18:31:08ID:???
>>594
経験的に多いのは
FTP時に勝手に文字コードが変わったとか
設定ファイルを書換時に文字コードが変わったとかで
サーバの設定上使えない文字コードになっていたり
一部のファイルのみ文字コードが変わった結果
部分的にエラーになっている状態。

エラーメッセージ無しで真っ白なんだよね?
0597nobodyさん2006/02/02(木) 18:31:30ID:???
>>594
まぁ、恐らく「パス指定」とかデータ格納場所の「パーミッション」とかの問題だと思うね。
0598nobodyさん2006/02/02(木) 18:38:28ID:???
sakuraのPHPはCGI版だがそのことで何かミスしてるんじゃない?
05995902006/02/02(木) 18:53:06ID:4KM2QfVc
ソースは↓の写メールBBS+画像変換です
http://zut.jp/index.php?mode=page&aim=A4B1A4EAA1BCA5BDA5D5A5C8
具体的には500エラーとなります
0600nobodyさん2006/02/02(木) 18:59:28ID:c4LX8dEo
ワロスw
0601nobodyさん2006/02/02(木) 19:30:21ID:???
多分パーミッションの設定ミスで 500 Internal Server Error が出てるんだろう。

さくらではCGIはsuExecでCGIを起動して所有者権限で動作する。

フォルダとスクリプトのパーミッションは何になってる?
777とか707じゃ動かない筈、755か705でやってみれ。
フォルダとスクリプトは755(705)、それ以外は644(604)、ブラウザで直接参照しないデータファイルなら600でok

これでならないようなら、レンタル鯖板のさくらインターネット質問スレで聞け

↓さくら使うなら一通り目を通すように
>さくらのレンタルサーバ非公式FAQ
>ttp://faq.sakura.ne.jp/
06025902006/02/02(木) 19:42:51ID:4KM2QfVc
>>601
ありがとう。でもダメだったぽ
なんどやっても500エラーorz

レンタル鯖板のさくらインターネット質問スレで聞いてみることにするよ
いろいろサンクス
0603nobodyさん2006/02/02(木) 19:55:35ID:???
>>602
うーん・・ならないか。
試せる環境ないし、一息ついてから聞いてごらん

非公式FAQより
>一回、鯖上のCGIもローカル上のCGIも全部消してごらん。
>そして、コーヒーなりお茶なりで一服してごらん。
>落ち着いたら、もう一回CGIを落としてきて、
>説明書きに書いてある通りに、何も考えずにやってごらん。
>
>大混乱してるときには何やっても上手くいかないよ。
>落ち着いてマターリと。
0604nobodyさん2006/02/02(木) 19:59:24ID:???
一行目のパス指定が無いとか
0605nobodyさん2006/02/02(木) 22:17:34ID:???
>>604
さくらの場合は不要のはず
0606nobodyさん2006/02/02(木) 22:31:22ID:???
>>604
書いても無視される。と公式に書いてあった
0607nobodyさん2006/02/03(金) 14:37:08ID:Rdf8V/FS
・タイトル
 extension_dirとMySQL

・内容
 �@c:/windows/php.iniファイルで、extension_dir = "c:/php/ext/"
  と設定しましたが、phpinfo()で確認したところ、ブラウザには
  extension_dirはc:\php5となっていました。c:\phpフォルダは作成済み
  ですが、c:\php5フォルダは作成していません。
  php.iniでのextension_dir設定を反映させるにはどうしたら良いでしょうか。
  また、この現象の理由も知りたいです。
 �Aphpinfo()による出力画面でMySQL設定項目が表示されません。
  大項目「libxml」の次は「odbc」となっており、「mysql」がありません。
  mysql項目がphpinfo()で表示されるにはどうしたら良いでしょう。
  php.iniで下記の設定をしています。
   extension_dir="c:/php/ext"
   extension=php_mysql.dll
  c:/windows/system32フォルダにはc:/php下のdllをコピーしています。
  
・環境
 OS:WindowsXP SP2
 サーバ:Apache2
 PHP:ver.5.1.2
 MySQL:ver.5.0
 ウィルスソフト:Norton Internet Security

・google検索したキーワード
 phpinfo,php.ini,extension_dir,mysql,httpd.conf

アドバイスのほど、宜しくお願い致します。
0608nobodyさん2006/02/03(金) 14:55:01ID:???
>>607
phpinfo() の最上部ブロックの
Configuration File (php.ini) Path を確認しれ

ttp://www.php.net/manual/ja/configuration.php
06096072006/02/03(金) 16:11:13ID:Rdf8V/FS
>>608
C:\WINDOWS と書いてあります。

下記にはphp.iniはありませんでした。
【1】C:\Program Files\Apache Group\Apache2
【2】HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath

06106072006/02/03(金) 16:40:00ID:Rdf8V/FS
>>607の問題が解決しました。
Apache2の設定ファイル httpd.conf に次の行を記述したところMySQLを認識しました。
 ○PHPIniDir "c:\php\"

それまでは上記の行を

 ×PHPIniDir "c:/php/"

と書いていました。
06116072006/02/03(金) 16:43:11ID:Rdf8V/FS
>>608
C:\WINDOWS\php.ini となりました。
アドバイスありがとうございます。
0612nobodyさん2006/02/03(金) 17:06:45ID:???
>>610と>>611が矛盾してるが認識したのならまあいいや。
06136072006/02/03(金) 17:31:54ID:Rdf8V/FS
>>612

>>610 に書いた設定をコメントアウトしてもOKでした。
#PHPIniDir "c:\php\"

PHPIniDir "c:\php\" を書いてしまっていたのが良くなかったようです。。
0614nobodyさん2006/02/03(金) 18:47:27ID:???
>>590
ローカルマシンでテストした?
コード上の問題なら手元のWindowsマシンなどでもチェックできるわけだが
0615nobodyさん2006/02/03(金) 20:00:36ID:nU0pDG8Y
【タイトル】
コンストラクタ内で、同じクラスに定義された関数の呼び出し

【Google, PHPマニュアル】
Google: オブジェクト指向、コンストラクタ、PHP5、クラス、etc...
マニュ: クラスとオブジェクト(PHP 5)あたり

【環境】
XAMPP1.5.1、PHP5.1.1、WindowsXP SP2

【内容】
コンストラクタ内で、同じクラスに定義した関数を呼び出すにはどうしたらいいでしょう。
もしくは、それと同等のことを行う代替案などはないでしょうか?
コンストラクタ内に全部の処理を書くと、量が多くて保守が大変そうなのです。

言葉で少し説明しづらいですが、下のような感じでやりたいのです。
本来のソースでは、関数内のコード量が多く、かつ関数がたくさんあるのですが・・・。
class testClass
{
  private $val;

  public function __construct($arg){
    $this->val = func($arg);
  }

  function func($arg){
    return defaultFunc($arg)
  }
}
0616nobodyさん2006/02/03(金) 20:06:49ID:???
>>615
メンバ関数内でのメンバへのアクセスは$thisを介して行う。
マニュアル読んで出直せ
0617nobodyさん2006/02/03(金) 21:05:05ID:qY0QLJ3A
preg_match_all の ereg版 は無いんですか?
06186152006/02/03(金) 21:39:09ID:???
>>616
undefind function、ってそういうことだったんですね・・・。
コンストラクタが呼び出された時点で、関数が作成されていないのかと思ってました。
ありがとうございます!
0619nobodyさん2006/02/04(土) 03:00:52ID:HNAkLjne
htmlspecialchars()で変換した文字列を元に戻すにはどうしたらよいでしょうか?
0620nobodyさん2006/02/04(土) 04:19:53ID:???
そろそろFAQだな。
0621nobodyさん2006/02/04(土) 06:09:58ID:???
chopで半角スペースを取るように、
全角スペースを除去する方法ありますか?
0622nobodyさん2006/02/04(土) 06:23:04ID:???
mb_ereg_replace('( )+$', '', $str)とか
06236222006/02/04(土) 06:29:45ID:???
>>622
解答thxです。
確かにその方法ありますよね。

実は数千件のデータ処理に使ってるのですが、
正規表現だと重いので避けたいのです。
なので関数の方が好ましいのですが・・・。

#貧弱開発環境('A`)マンクルポ
0624nobodyさん2006/02/04(土) 07:08:48ID:???
>>623
rtrim($str," ")は?
0625nobodyさん2006/02/04(土) 07:29:55ID:???
>>624
第2引数は1バイト単位のリストだから
それだと最後の文字が化ける可能性あり
0626nobodyさん2006/02/04(土) 11:22:51ID:???
--enable-mbstring Enable multibyte string support.
--enable-zend-multibyte Compile with zend multibyte support.

この二つのオプションの違いを教えてください。
0627nobodyさん2006/02/04(土) 11:51:05ID:???
>>626
簡単に言えば
--enable-mbstring マルチバイト関数を有効にする
--enable-zend-multibyte 通常はスクリプトの記述として使えないSJISを使用可にする
0628nobodyさん2006/02/04(土) 11:53:06ID:???
>>627
ありがとうございます。
0629nobodyさん2006/02/04(土) 16:35:43ID:+uM4bJSp
質問させてください。

テキストファイルに数行のデータを書き込みます。
その時に
キーワード<>データ1<>データ2<>....
というようなフォーマットで書き込んでいきます。

この時に、テキストファイルからキーワードを検索し、
そのキーワードを含む行を取ってくるようにするには
どうしたらよいでしょうか。
0630nobodyさん2006/02/04(土) 16:51:04ID:???
文字列操作の関数にどんなものがあるか一通り調べてから出直してこようね
0631nobodyさん2006/02/04(土) 17:02:28ID:???
>>629
1.1行取り込む。
2.取り込んだ行の最初の<>までのデータをキーワードとして取得する。
(キーワードには<>が含まれていないこと)
3.取得したキーワードと検索キーワードを比較する
4.比較の結果マッチすれば、その行を保持する
5.ファイルの終わりまで1〜4までを繰り返す。

これを>>630の言うようにマニュアルの文字列関数等で
使えそうなものがないか確認しつつ実装する。
0632nobodyさん2006/02/04(土) 17:47:40ID:+uM4bJSp
>>631
ありがとうございます。やってみます。
0633nobodyさん2006/02/04(土) 21:10:03ID:???
下らん質問だなぁ
0634nobodyさん2006/02/04(土) 22:10:43ID:f7yaA8i8
rawurldecode()でたとえばShift_JISでエンコードされた文字を

<head>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=Shift_JIS">
</head>
<body>
<?
$str = "%82Q%82%83%82%88%82%c5%82%b7%81B";
echo rawurldecode($str);
?>
</body>

で表示すると”2chです”としっかり表示されますが

<head>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=UTF-8">
</head>
<body>
<?
$str = "%82Q%82%83%82%88%82%c5%82%b7%81B";
echo rawurldecode($str);
?>
</body>

ではUTF-8なのでしっかりと表示できません。

そこでエンコードされた値を調べUTF-8でエンコードされたのか、またはShift_JIS、EUCなのかなどを判断しUTF-8ならデコードしそのまま表示。そのほかの場合は一度デコードしUTF-8型に戻してやりしっかり表示させるにはどうしたらいいのでしょうか?
0635nobodyさん2006/02/04(土) 22:53:17ID:???
>>634
それ、decodeとか関係なく普通に文字コード処理の基本の話だから。
mb_convert系のマニュアルを頭から読み直すとよろしい。
0636nobodyさん2006/02/05(日) 00:47:59ID:???
>>629

<>区切りってのがkentのcgiっぽくてダサいなぁ。
0637nobodyさん2006/02/05(日) 00:55:08ID:???
つまり、2ちゃんねるはダサい、と。
0638nobodyさん2006/02/05(日) 01:27:19ID:???
触れちゃだめです
0639nobodyさん2006/02/05(日) 01:32:18ID:???
「,」区切りはデータのエスケープが面倒ってのは分かるけど、
TABでなく「<>」を使うってのはどういう意図?
0640nobodyさん2006/02/05(日) 01:40:57ID:???
HTMLタグは実体参照化されているのが前提だからだろ。
「<」だけでも本来なら良いはず。
0641nobodyさん2006/02/05(日) 01:58:56ID:???
HTML上では使用しないだけなら「<」でも「>」でもTABでも一緒だろ。
で、世間一般で区切り文字として標準的なのは「,」かTABだろ。
何故そこであえて「<>」を採用するのか?ってことだよ。
1人や2人なら、まぁそういう人もいるよね、好き好きだしね、で済むけど
わざわざ他人の真似をしてまで採用するようなもんじゃないと思うんだが。
0642nobodyさん2006/02/05(日) 02:03:33ID:???
4月1日専用ページを作りたいなぁと思ったのだけど、その頃生きてるか解らん
どうしたらいいですか?
0643nobodyさん2006/02/05(日) 02:09:19ID:uUJqicme
$footer = "<hr><p align='right'>Posted $posted|$date|<a href='$posted.html'>comment()</a>";

中略

fputs($fp,$footer);

として、投稿日時、コメント用ページへのフッターを貼り付けたいのですが、
「Posted  comment()」 となってしまって時間が表示されません
回避方法はありますでしょうか・・・・・
0644nobodyさん2006/02/05(日) 02:18:59ID:???
>>643
>回避方法はありますでしょうか・・・・・
プログラマーを雇う
0645nobodyさん2006/02/05(日) 02:22:43ID:???
>>643
まあ考えられるのは$postedや$dateに値が入ってないってことくらいだろうけど。
print_rやvar_dumpを$footer = ・・・の直前でやってみたりしてごらん。
未定義か空文字かnullかfalseかその辺だろうから。
原因がわかったら$postedや$dateに値を代入している部分周りのロジックを入念にチェック。
0646nobodyさん2006/02/05(日) 02:22:49ID:???
>>641
俺はTabだと確認のとき見づらいから<>使ってる
0647nobodyさん2006/02/05(日) 02:28:36ID:uUJqicme
>>644-645
$footerを2分割して後でまとめて表示することでできました。
ありがとうございました
0648nobodyさん2006/02/05(日) 02:58:11ID:uUJqicme
<?php
�@〜〜〜
?>

<HTML本文>

<?php
�A〜〜〜
?>

のように間にHTMLの本文を挟んで離れた<?php〜?>間で変数の受け渡しって可能なんですか?
■ このスレッドは過去ログ倉庫に格納されています