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


抜けているものがあったら補足願います
0492nobodyさん04/07/27 16:02ID:???
すみません
PHP+MySQLで日本語検索やりたいんですが、
レコード数が数十万件から100万件程度になると、

WHERE カラム名 LIKE '%検索したい文字%'

ってだけで救いようのないぐらい遅くなります。
なんかアイデア・対処方法は無いでしょうか?

MySQL頼みのFULLTEXTサーチは
日本語NGでしたし・・・。
049349204/07/27 16:11ID:???
あ、検索文字列の正規化?はやってます。
全角英数を半角にとか、
カタカナをひらがなにとか。
0494nobodyさん04/07/27 16:16ID:???
普通正規化とはマスタとデータを分けたりする事を指すのだが、
100万件でそんなに遅くなったっけか。Psqlなら遅くなりそうだが…。
インデックス効いてる?
049549204/07/27 16:27ID:???
>>494
お返事ありがとうございます。

LIKE の 頭に ワイルドカードが入ると、
インデックスが効かないのです。

これはMySQLの仕様のようです。
100万件でインデックス効かないから遅いのは当たり前なんですが。
0496nobodyさん04/07/27 16:40ID:???
それってMySQLの仕様か?
頭にワイルドカード入ってりゃ全件総ナメに決まってんべ
0497Imo ◆.jC7ANgFY. 04/07/27 16:44ID:???
>>495
アイディアだけ。遅くなる率は高いけどもしかしたらというわけで。

・phpでbin2hexしたデータを追加し、それにFulltextIndexをかける。
   データが2倍になるという欠点がある。
・2バイト文字列を2バイト英数字に変換し(不可逆)、それにFulltextIndexをかける。
   意味不明なデーターがひっかかる可能性がある。
・独自で頻度表を作ってみる。
   頻度表でどこまで処理できるかが問題。
・namazuを見習って単語リストを作ってみる。
   とりあえず面倒。
049849204/07/27 16:54ID:???
>>497
FulltextIndexですかね。やっぱり。
普通は LIKE '%キーワード%' よりは速くなるらしいですね。

ただ、スペースなどで単語を区切らないといけないので、
chasenとか外部プログラムが必要になるのですが、
ここら辺のサンプルなんか紹介しているようなWebページないでしょうか?

perlだと Text::ChaSenなんてモジュールがあるらしいですが・・・
0499nobodyさん04/07/27 17:15ID:A3g22VFK
http://www.voidstar.com/gnews2rss.php

上記のサイトを参考にして、複数のニュースサイトのヘッドラインを取得、
静的生成するスクリプトを作ってみました。
サイトを複数指定した場合、最終行に書かれたサイトのみしか取得できないのですが
どこか間違えているのでしょうか…?
どうぞ、ご教授お願い致します…。

sample.dat --------------------
%<a href=\"(.+?)\">(.+?)</a>%|http://www.yourdomain.com
%<a href=\"(.+?)\">(.+?)</a>%|http://www.hogehoge.net
0500nobodyさん04/07/27 17:15ID: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);
?>
0501軟式PHP04/07/27 17:45ID:???
(;´Д`)なんか解析するのもだるいな…
0502nobodyさん04/07/27 18:06ID:???
見た目で。

とりあえず、$dataの初期化が欲しいと違うことを言ってみる。
で、正解はファイル名に\nが入っているから。
0503nobodyさん04/07/27 18:48ID:???
読むのマンドクセ(;´Д`)
printデバッグ汁
0504nobodyさん04/07/27 19:21ID:???
>>500
file() で読み込むと行の最後にある改行まで変数に入る。
rtrim() で不要な改行を取り除けば大丈夫。

$list = explode("|", rtrim($val));
0505nobodyさん04/07/27 19:23ID:???
>>474
Apache DSO 版を使っているのなら virtual() はどう?
050650004/07/27 20:04ID:???
>>502>>504
unset()、rtrim()でうまくいきました。
本当にありがとうございます。
050747404/07/28 09:04ID:???
>>484 >>488 >>505

レスありがとうでした。
virtual()でいけました。
ありがとうございました。

0508nobodyさん04/07/28 12:37ID:1Y3BKvIO
>>474
職場で爆笑した責任を取ってもらおうか...
0509nobodyさん04/07/28 13:52ID:???
教える気がないならスルーしとけ。
0510nobodyさん04/07/28 20:43ID:???
某スレでapacheのconfのユーザーディレクトリに
AddType text/html .php を記述すればphpがテキストとして
扱われると聞いたのですが、逆にテキストとして扱わない場合(PHPとして扱う)
はどういう書き方があるのでしょうか?
0511nobodyさん04/07/28 20:46ID:EvRrHsAN
abc001_1.jpg abc002_1.jpg といった連番の画像が500以上あるんですが、
これを 60 x 60 の画像に縮小→切り抜きし、abc001_a.jpg・abc002_a.jpgといった風に
リネームする必要ができました。
どうするのが一番効率が良いでしょうか?
縮小・リネームだけなら、ソフトとPerl・PHPスクリプトを連携して出来るのですが、
切り抜きが入ると、全く方法が思いつきません。どなたかご教授ください。

画像サイズは 160 x 120 とか、縦横比率がバラバラなので、切り抜きが必須なのです orz
051251104/07/28 20:47ID:???
すいません、板違いでした orz
0513nobodyさん04/07/28 20:54ID:???
んが。今マニュアルみて関数の確認してたのに....
imagecopyあたりが適当じゃなかろうか?
0514nobodyさん04/07/28 21:02ID:???
MMCacheもAPCと同じでincludeファイルも変換してキャッシュ
してくれるのでしょうか?
それとも呼び出されたファイルだけでしょうか?
0515nobodyさん04/07/28 21:22ID:???
>>510
PHPをモジュールとして組み込んでいる場合は、application/x-httpd-php
CGIの場合は、application/x-httpd-cgiとすることもある。
(application/x-httpd-phpで処理させるように設定することも可)
0516nobodyさん04/07/29 08:53ID:???
そもそもプログラム側でヘッダーを変更できるのに、
タイプを固定する意味がないという。
0517軟式PHP04/07/29 09:49ID:???
PHPのマニュアルにも載ってることだが、PHPの隠蔽はやっておくべき。
0518nobodyさん04/07/29 14:47ID:VlhsQ7NZ
php 4.3.3を使ってるんだが、もしかしてexitで処理を抜けた時って、
register_shutdown_functionで登録した関数呼び出されない?
0519nobodyさん04/07/29 14:53ID:???
exit前にregistしろよハゲ
0520nobodyさん04/07/29 16:51ID:???
禿じゃないヨ
0521nobodyさん04/07/29 17:11ID:???
PHPってバイナリモードだかに出来るって本当ですか?

関数のバイナリじゃなくて。
0522nobodyさん04/07/29 17:11ID:???
でこが広いだけだよね
0523nobodyさん04/07/29 17:27ID:???
俺なんかデコ広すぎてツムジが無くなっちゃったよ!
0524nobodyさん04/07/29 17:42ID:???
それは禿と呼ぶな、普通。
0525nobodyさん04/07/29 17:45ID:???
俺なんかデコ広すぎてウナジが無くなっちゃったよ!!
0526nobodyさん04/07/29 18:00ID:???
それはコンパイルしてバイナリしちゃいましたか。
0527nobodyさん04/07/29 22:38ID:???
フォームを使わないでPOSTでMulitipart/form-dataを指定したときと同じよう
にファイルを添付したいのですが、これ可能でしょうか?
できるとしたら、どのエンコードをし、どういう送信ヘッダを作ればいいんでしょうか?
0528nobodyさん04/07/29 23:17ID:???
どこから送りたいの?
0529nobodyさん04/07/29 23:18ID:???
>>527
PHPじゃ無理。フォームの仕様を使うのが正しい。
でなければFlashでも使う。
0530nobodyさん04/07/29 23:43ID: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>
0531nobodyさん04/07/29 23:43ID:???
>>528,529
http://oshiete1.goo.ne.jp/kotaeru.php3?q=817797
>hogehoge.phpが、メールサーバーにソケット接続、マルチパート処理し、ウェブコンテンツを更新

ちょうど↑と同じようなことなんですが、
ケータイからメール(添付付)をメールサーバーに送り、phpが実行された時にPOPサーバーから受信、
同時に添付ファイルをエンコしてwebサーバーにPOSTし、本文には添付ファイルへのリンクなどを
挿入した状態でPOSTしたいと思ってます。
ケータイでの投稿に対応していないblogになんとかケータイから投稿したいと思ってます。
簡単に言うと写メールBBSのphpの機能にwebサーバーへのPOST的処理を付け加えたという感じです。
やはり、エンコードデータはブラウザに作らせないとダメなんですかね・・・。
0532nobodyさん04/07/30 01:59ID:???
>>531
fsockopen() とかを使って決まった形式でデータをエンコードして通信すれば可能。
フォーマットは RFC あたりを見て勉強するか、POST を行う際の通信データをキャプチャ
して解析すればできそう。

または curl 関数あたりを使ってもおそらく添付ファイル付きの POST は可能みたいな
感じがする。試していないので間違っているかもしれないけど。

でも、わざわざ POST しなくても FTP とか SCP でファイルとデータを送っても問題なさそう
な気がする。
0533nobodyさん04/07/30 03:23ID:lnH8lc1C
他のサーバにあるファイルの更新日時情報をsocketを用いて
HTTPヘッダから取得するという方法では、対象が複数の場合、
非常に遅くなってしまいます。
他に方法はないでしょうか?どうぞよろしくお願いします
0534nobodyさん04/07/30 03:29ID:???
>>533
ありませんね。
遅いというなら処理がヘタなのでしょう。
053553304/07/30 03:32ID:lnH8lc1C
http://ns1.php.gr.jp/php-jp/archives/msg11953.html

参考にしたページはこちらなんですが
もう少し簡略できませんでしょうか?
0536nobodyさん04/07/30 03:35ID:???
>>535
特に簡略化するような部分はありません。
0537nobodyさん04/07/30 03:57ID:???
>>535
GETメソッドではなくてHEADメソッドで更新日時を取得する。
でも、まあ取得に時間が掛かるのは各々のHTTPコネクション
におけるネゴシエーション処理とかだから、別のプログラムを
組んで同時に複数処理するようにでもしないと、目に見えて
速くはならないよ。
053853704/07/30 04:00ID:???
そのスレッドの[PHP-jp 12338]で指摘されてるね<GET→HEAD
0539nobodyさん04/07/30 05:12ID:mTOZKk4E
質問です。
Windows XP Home Edition のサーバーです。
unlink でファイルを削除しようとすると、
Permission denied とエラーが出てしまいます。
そのファイルのあるフォルダの読み取り専用属性のチェックは
はずしているのですが・・・。
054053904/07/30 05:29ID:???
すいません。ただ削除しようとしているファイルを
fcloseで閉じるのをわすれていました。
0541軟式PHP04/07/30 09:15ID:???
|Д`)
0542nobodyさん04/07/30 09:41ID:Qj3jxbbr
御願いします。
execを使ってTXTファイルをPSファイルに変換すると
日本語部分が文字化けしてしまうんですが
なんとかならないものでしょうか??
コマンドラインからTXT>PSは文字化けしないのですが・・
0543nobodyさん04/07/30 09:46ID:???
$text ='123'という文字列を$text ='1<br>2<br>3'に変換したいのですが、
どうやるのが理想的でしょうか?
1文字ずつ抜き出して<br>を加えて行くしかないのでしょうか?
0544nobodyさん04/07/30 09:54ID:???
>>543
$array = preg_split("//",$text);
$text = implode("<br>",$text,-1,PREG_SPRIT_NO_EMPTY);
0545nobodyさん04/07/30 09:55ID:???
違う、こうだ
$array = preg_split("//",$text,-1,PREG_SPRIT_NO_EMPTY);
$text = implode("<br>",$array);
0546nobodyさん04/07/30 10:22ID:???
>>544
早々なお返事、ありがとうございます。
教えて頂いたものを弄って動く様になりました。

PREG_SPRIT_NO_EMPTYというのが気になってぐぐって調べてみたのですが
ヒットしませんでしたし、私の環境では使えない様でした。
特殊環境なのでしょうか?。
0547nobodyさん04/07/30 10:45ID:???
>>544 ではないが、綴りが間違っている。

正しくは PREG_SPLIT_NO_EMPTY
0548nobodyさん04/07/30 11:08ID:???
DBにぶち込んだ画像をもってきて
HTMLに表示する時ってどうすればいいですか?
知ってる人教えて〜
0549nobodyさん04/07/30 11:12ID:???
>>548
アホですか?

ああやっぱりアホでしたか
0550nobodyさん04/07/30 11:27ID:???
>>543
$text = preg_replace("(.)","$0<br>",$text);
0551軟式PHP04/07/30 11:38ID:???
>>548
えっと、それってラージオブジェクトで確保してんの?
0552nobodyさん04/07/30 11:39ID:???
>>550
デリミタが抜けている。
$text = preg_replace("/(.)/","$0<br>",$text);

でも、日本語が入る場合は、mb_ereg_replace を使った方が安全かも。
$text = mb_ereg_replace( "(.)", "\\1<br>", $s );
0553nobodyさん04/07/30 11:57ID:8Ir+KZbt
>>542
そんなことってあるのか?
055454804/07/30 11:58ID:???
はい、そうです。

0555nobodyさん04/07/30 12:02ID:???
>>554
マジレスカコワルイ
0556nobodyさん04/07/30 12:24ID:T0I0w0s1
>>542
環境変数LANGをチェックすべし
0557nobodyさん04/07/30 16:09ID:???
setlocale ってのを使えばいいでつか?
0558nobodyさん04/07/30 16:19ID:35tZk6a5
>>556
542です。
おっしゃるとおりでございました。
ありがとうございます。 
0559nobodyさん04/07/30 22:20ID:xMf/Vu/l
>>548
画像はDBにぶち込まないほうがいいよw
0560nobodyさん04/07/30 22:22ID:???
>>532
RFCも見てみたんですが、boundaryの番号の生成法とか、バイナリデータをどう
エンコードしていいのかさっぱりなので、ヘッダを勝手に生成してくれるPerlでやってみようかと思います。
ありがとうございました。
0561nobodyさん04/07/31 00:18ID:???
さっきPHP始めたばかりなんですが質問させていただきます
http://abcd.com/test.php?hoge
このtest.php?の後は引数ということでよろしいでしょうか?

その場合test.phpの中でどのように引数を扱えますか?

やりたいことは<a href = "./test.php?hoge.jpg">hoge</a>を
クリックするとhoge.jpgを含むページを吐くようなものです。
0562Imo ◆.jC7ANgFY. 04/07/31 00:46ID:???
>>561
普通は"test.php?file=hoge.jpg"のようにやります。
この場合は$_GET['file']で内容を取得できます。

もし"test.php?hoge.jpg"としてやりたいのであれば
$_SERVER['QUERY_STRING']を参照するとよいかと思います。
こちらの場合は特殊文字がエンコードされているので
解除する必要があります。(rawurldecode参照
0563nobodyさん04/07/31 01:12ID:8q4uMfb8
拡張子 .php ってvodafoneからじゃ見られないの?docomo、ezや
PCブラウザからは見られると報告を受けているHPが彼らのみ見られないようなのです。
もしくは何か使っちゃいけないTAGとか ファイルの大きさ制限とかあるんですか?
0564nobodyさん04/07/31 01:38ID:???
>>563
スレ違い
056556104/07/31 03:50ID:???
>>562
無事表示できました。
ありがとうございました。
0566nobodyさん04/07/31 04:19ID: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 以外入らないんですけど、なんで?
0567nobodyさん04/07/31 12:11ID:???
$baka = "あいうえお";
bk($baka);
function bk($baka="1"){
echo $baka;
}
0568nobodyさん04/07/31 16:57ID:???
<?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が合っていれば別のページに飛ぶようにしたいのですが
別にページに飛ぶための命令文がわかりません。
教えてください;;
0569nobodyさん04/07/31 17:12ID:???
headerでも使っておけ
それからパスはmd5とかでハッシュ値を取れ
057056804/07/31 18:56ID:???
>>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になんねーよ;;
ちゃんと全記入できてるのにな〜・・・
0571nobodyさん04/07/31 19:12ID:???
>>570
if の中にオカシイ部分がある。よーく見てみ。
つーか最後まで気を抜くな!
0572nobodyさん04/07/31 19:50ID:???

print "$name01 $name02 $hn $id $pass $mail $age01 $age02 $age03 $add $tel";
if ($name01!=""&& $name02!=""&& $hn!=""&& $id!=""&& $pass!=""&& $mail!=""&& $age01!=""&& $age02!=""&& $age03!=""&& $add!=""&& $tel != ""){

に修正しますた・・・無理ぽ、もうだめぽ_| ̄|○
0573nobodyさん04/07/31 20:49ID:???
header("Location:hogehoge.php")で飛べる。
headerは便利だから覚えておいたほうがいいよ。他にも色々あるし。
0574nobodyさん04/07/31 20:51ID:???
>>573
THX! mailtoもいけるのかな?
0575nobodyさん04/07/31 20:53ID:???
はあ...
ちょっとはHTTP勉強してね
0576nobodyさん04/07/31 21:05ID:???
http://www.w3.org/Protocols/rfc2616/rfc2616
ここでお勉強しなさいよ
0577nobodyさん04/07/31 21:07ID:???
>>576
英語ばっかじゃん読めないよ
0578nobodyさん04/07/31 21:10ID:???
mailtoワロタよ
0579nobodyさん04/07/31 21:21ID:???
mailtoストームでも作る気なのか?
0580nobodyさん04/07/31 22:36ID:???
>>579
嵐キタ━━━━━(゚∀゚)━━━━━!!!!
0581nobodyさん04/07/31 23:19ID:WRy9c9NN
>>572
if文は不安な時は、()でくくるのが吉。
if ( ( $name01!="" ) && ( $name02!="" ) )
みたいに
0582nobodyさん04/07/31 23:24ID:???
あれ?変数ってブラウザ閉じないとずっと記録されてるよな?
0583nobodyさん04/08/01 00:23ID:???
PHPでファイル名を抽出することってできますか?
0584nobodyさん04/08/01 00:25ID:???
583
わかりにくいと思いますので詳しく

自分が何というファイル名かわからないとき
自分のファイル名を取得したい
0585nobodyさん04/08/01 00:30ID:???
>>584
ttp://www.php.net/manual/ja/reserved.variables.php#reserved.variables.server
0586nobodyさん04/08/01 00:43ID:???
>>585
THX!
0587nobodyさん04/08/01 01:10ID:???
おね
http://www.ii-park.net/~goldred/ero-box/001.jpg
http://www.ii-park.net/~goldred/ero-box/002.jpg
http://www.ii-park.net/~goldred/ero-box/003.jpg
0588nobodyさん04/08/01 01:11ID:???
スマン、誤爆った!
0589nobodyさん04/08/01 01:38ID:???
横からすみません。
PHPをコマンドライン側で実行する場合、$_SERVERの代用として
なんという変数を使えばいいんですか?

ついでにageさせてください。
0590nobodyさん04/08/01 01:55ID:???
HTMLをJPEGに変換するものって無かったですか?
059158904/08/01 01:56ID:???
すみません、質問内容が抜けていました。
$_SERVER -> $_SERVER['PHP_SELF'] です。
本当にすみません。。
0592nobodyさん04/08/01 02:03ID:???
PHP Accelerator使ってる人いる?
うちはApache2+PHP4.3xなんだけど、使ってて動作おかしいとかない?
■ このスレッドは過去ログ倉庫に格納されています