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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/08/27 18:00ID:???
・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
0698nobodyさん04/09/10 00:41ID:GObesny2
自分のソースに記述するんですよね?
やっぱりここで聞く質問じゃないですか?
0699nobodyさん04/09/10 00:52ID:???
>>698
http://pc5.2ch.net/test/read.cgi/php/1065151808/
ここかな?
0700nobodyさん04/09/10 00:56ID:???
どうもありがとうございます
ご迷惑お掛けしてすみませんでした。
0701nobodyさん04/09/10 03:33ID:???
http://php.s3.to/man/ref.sockets.html
↑ここの例1をwindowsで動かしてみたんですが、
そのままだと接続した瞬間シャットダウンしてなにもできません…

試しにsocket_read のPHP_NORMAL_READをPHP_BINARY_READに変えてみたんですが、
そうすると今度は動くには動くんですが、一文字入力するたびにレスポンスがあって、
'quit'と入力することができません。

なにかまともに動かす対処法はないでしょうか
070270104/09/10 06:00ID:???
すいません自己解決できました。
0703nobodyさん04/09/10 10:11ID:???
正規表現が難しくて困ってます。
一つ作るのに3日くらい試行錯誤しながら
作ることもありまつ。
できあがったとしても、マッチはするものの
それで合っているのか不安です。
助けてください
0704nobodyさん04/09/10 10:17ID:???
>>703は110や119に電話しても「助けて」だけしか言わないタイプ
0705nobodyさん04/09/10 10:33ID:???
>>704
一本!
070670304/09/10 10:35ID:???
(´;ω;`)
0707nobodyさん04/09/10 10:37ID:???
>>703
正規表現はパズル感覚で楽しめるようにならないとな。
0708nobodyさん04/09/10 10:55ID:???
>>706
泣くな。正規表現は、おっもしろいぞー。 
0709nobodyさん04/09/10 11:52ID:e5AaNUbi
正規表現…オライリーでそれだけで1冊本ができるぐらいだからな。
一朝一夕にマスターできると思うな。
0710軟式PHP04/09/10 12:58ID:???
つかわんと覚えんよ。
071170304/09/10 13:22ID:???
自分の書いたので合っているかどうか
よく不安になるので・・・
正規表現が楽しめるようになるよう
がんばりまつ(`・ω・´)
レスありがとう。
0712nobodyさん04/09/10 13:42ID:???
>>703
とりあえずこんなスレも有るぞ

正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
http://pc5.2ch.net/test/read.cgi/php/1069245758/
0713nobodyさん04/09/10 14:58:11ID:???
>>711
不安ならとりあえずここに書いたもん晒せよ
071468604/09/10 18:22:40ID:???
686のコードを
mysql_connect(...) or die(mysql_errno().":".mysql_error());
としてためしてみると、
2003:Can't connect to MySQL server on 'hostname' (0)
となりますです。
tcpdumpしてみると正常に接続できるときとは異なるパケットが飛んできてるようだけど、
だからといってどこを直せばわからん。

よくわからんので、MySQLのクライアントライブラリから
コンパイルしなおすことにするです。うーむ。
0715nobodyさん04/09/10 18:32:16ID:???
>>703
Regexp Tester
http://www.bitesizeinc.net/index.php/regexp.html
0716nobodyさん04/09/10 19:39:21ID:???
goo blogの管理ページ、
ブラウザの戻るしてもちゃんと表示されてるんだけどどうやってるんだ?
0717nobodyさん04/09/10 19:41:32ID:???
>>716
いくらでも方法はあると思うけど。俺はセッション使う
0718nobodyさん04/09/10 19:54:27ID:???
いや、セッションは解るんだけども、どうやってんだろう、と。
戻ったら期限切れで表示されないよね。
0719nobodyさん04/09/10 20:21:35ID:???
>>718
そりゃポストのときだろ
0720軟式PHP04/09/10 23:39:59ID:???
sessionリミッターでどうにでもなるけど。
0721nobodyさん04/09/11 08:14:04ID:???
HTTPヘッダを出力しないようにするにはどうしたらいい?
header()じゃだめだし、ini_set()でもそれらしいオプションが見つからん。

やりたいことはCGI版をコマンドラインで実行させたときに余計なHTTPヘッダを出力しないってだけなんだけど。
-qオプションを使いたいところなんだが、
#!/usr/env/php -q
としたら
/usr/bin/env: php -q: No such file or directory
と出て怒られた。
0722nobodyさん04/09/11 09:09:35ID:???
>>721
CGI版の PHP がどこにインストールされているのか知らないけど。
env を使わずに
#!/usr/bin/php -q
とか
#!/usr/local/bin/php -q
にしてみれば?
0723nobodyさん04/09/11 12:10:38ID:???
>>721
コマンドライン版使えばいいのに。
0724nobodyさん04/09/11 12:18:59ID:???
>>716
オイラはgoo blogは使ってないから想像で書くけど、
POST後にブラウザの戻るを使われて困る場合は、
POST処理後にheader("Location: 〜".SID) を使ってGET扱いにさせる。
0725nobodyさん04/09/11 13:15:27ID:1u0p7mhs
Vine+PHP4+MySQLの環境でphpMyAdminを使用しようと思って
phpMyAdmin-2.6.0-rc2.tar.bz2を解凍して
phpMyAdminと名前を変えてhttp://localhost/phpMyAdmin/
でアクセスすると
扱えない拡張子のファイルです,
PHP の設定をチェックしてください。
というメッセージがでて使用できません。どうすればよい
でしょうか?
0726nobodyさん04/09/11 14:07:53ID:???
>>725
>どうすればよいでしょうか?
↓
「PHP の設定をチェックしてください。」
0727sasa04/09/11 14:34:22ID:1u0p7mhs
>>726
php.iniを調べてもそれらしき場所が見当たりません。
httpd.confも.php登録してますし・・・
なんで扱えない拡張子なんだろ・・・
0728sasa04/09/11 15:06:32ID:1u0p7mhs
バージョン下げたら普通に動きました。
0729nobodyさん04/09/11 15:35:49ID:???
バージョンが上がるには理由があるわけで、
それを下げるのは解決法としてはあんまり良くないな。
>>725のエラーメッセージらしきものをググってみても全然ヒットしないんだけど、
何か隠してることは無い?
0730nobodyさん04/09/11 15:52:16ID:yl69/FM+
異常なまでにリロードされ、カウンタファイルがたまに壊れて困っています。
日付、昨日のカウント数、今日のカウント数、総カウント数
という形式で保存、総カウント数を出力しています。

保存はflock→fputs→fcloseです。
病的リロードに耐えうるカウンタは、どう作ればよいのでしょうか。
コツなどありましたら教えてください。
0731nobodyさん04/09/11 16:05:03ID:???
どうコーディングしてもサーバにリソース制約を
課されていれば壊れるときは壊れる。
flockで保護できるのは同時書き込みだけ。
0732nobodyさん04/09/11 16:06:47ID:???
>>730
そんなにリロードされるなら、IPで2重カウント禁止にすればいいじゃん
073373004/09/11 16:13:43ID:yl69/FM+
レスありがとうございます。
壊れるのはどうしようもないということですので、
2重カウント禁止に修正したいと思います。
731さん、732さんありがとうございました。
0734nobodyさん04/09/11 16:15:07ID:???
>>722
/usr/bin/phpでも/usr/local/bin/phpでもどちらでも動かせるようにしたいんで。

>>723
もちろんそうなんだけど、どちらがインストールされてても動くようにしたいので。

だって、「HTTPヘッダを出力しない」ってだけだから、それくらいの機能あるだろうと思うのだが。
それくらいの機能さえ見つけられないおれがへたれなんだがな。
0735nobodyさん04/09/11 16:45:45ID:???
>>734
HTTPヘッダの出力抑制は-qオプションであってるよ。
まあ一部抑制しきれてない(エラーかなにかだったかと)部分はあったと思うけど。

エラーでてるのはオプションの与え方とか、実際にファイルがなくて出てるんじゃないの?
0736nobodyさん04/09/11 16:52:30ID:???
たいていの OS は #! で複数の引数を認めないはず。
そんな制限のないものもあったような気もするが。

>/usr/bin/phpでも/usr/local/bin/phpでもどちらでも動かせるようにしたいんで。

特に ruby の人はこの傾向が強いけど、個人的にはやっちゃいかんと思う。
↓こうすればできるようだけど、オススメはしない。

#!/bin/sh
sed 1,3d "$0" | php -q -- "$@"
exit
<?php
phpinfo();
?>
0737nobodyさん04/09/11 16:59:08ID:???
バッファに咥えて破棄することはできんの。
0738nobodyさん04/09/11 17:20:54ID:???
strtolower('ABCabcアイウ');

abcabcヂツテ

これって仕様ですか?
0739nobodyさん04/09/11 17:39:36ID:???
mb_
0740nobodyさん04/09/11 17:39:49ID:iOhe01Jz
>>738
仕様です。
と答えれば満足するのか?
0741nobodyさん04/09/11 17:41:32ID:2sNlQMEV
>>738
strtolowerはマルチバイトには対応してないよ。
mb_strtolower使いな。
074273804/09/11 17:42:10ID:???
ごめんなさい
文字コード指定してあげたら
ちゃんと動きました
0743nobodyさん04/09/11 17:43:38ID:???
>>738
仕様というか、ある意味海外製ソフトウェアの宿命。
2バイト文字がShift_JISコードの場合の文字コードは、
A → 41
B → 42
C → 43
ア → 83 41
イ → 83 43
ウ → 83 45
で、内部にAとかを内包してるから。
最初から2バイト文字を配慮して作られてるソフト以外ではそのまま変換してしまう。
PHPもしかり。
試してないけどttp://jp.php.net/manual/ja/function.mb-strtolower.phpはどう?
mbstringモジュールが有効でPHP4.3.0以降ならの話みたいだけど。
074473804/09/11 17:46:06ID:???
>>739
>>741
オラクルのlowerと同じ仕様の関数を探してました
ありがとうございます!
4.3からmb_strtolowerがあったんですね。
0745nobodyさん04/09/11 18:27:55ID:jQgqezNj
imageCreateFromGif( )を使ってGIFを読み込み作成しようとしたのですが
使用しているサーバのGDがGIFに対応していないので困っています。
PHPを使ってGDを使わずGIFを読み込み作成は出来るのでしょうか?
みなさんはPHPでGIFを扱うときどうしているのでしょうか?ご教授ください
0746nobodyさん04/09/11 18:33:22ID:???
>>745
GIFの特許はもう切れたのだから、GIF対応したGDを入れるように
サーバ管理者に頼んだ方が早くね。
0747nobodyさん04/09/11 18:38:14ID:???
>>746
GIFの読み込みだけはGIFの特許問題と関係なく結構前のバージョンから対応している
まあいずれにしても、入れ替えるに同意
古いバージョン使っててもろくなことないし
0748nobodyさん04/09/11 18:39:50ID:jQgqezNj
>746-747
ありがとうございます。
さっそく、管理者にメールで要望してみます。
非常に助かりました
0749nobodyさん04/09/11 18:55:13ID:onw6fTqi
ファイルAからファイルBに処理を委譲したいのですが、
どのようにすればできますか?
header の location で遷移はできましたが、
hidden とかのパラメーターが渡らないんで困ってます。
? やセッションを使って渡してもいいかと思いますが、
他の方法があったら教えてくださ〜い。
今は、ファイルBをファイルAにインクルードして対処してます。
0750nobodyさん04/09/11 19:25:53ID:???
>>749
オブジェクト化しれよ
0751nobodyさん04/09/11 20:30:46ID:jF+qSLdI
こちらでよいかわかりませんが質問です。
PHP+apache+MySQLで組んだWEBアルバム(写真)があるのですが、携帯メールに
添付されている写真データを自動的にデータベースに登録する方法がピンときません。
できる方法ありましたら、大まかなイメージで結構ですのでアドバイスください。

現在、Postfixを入れ、画像付のメールが~/MailDir/newディレクトリに保存されて
いるところまで確認できてます。

0752nobodyさん04/09/11 20:42:57ID:???
>>751
即時性を求めるなら、procmailを使ってメール受信時に処理。
定時処理でいいなら、cronで定期実行。
0753nobodyさん04/09/11 20:50:42ID:???
>>752
aliasesでコマンドそのまま渡して、
標準入力からメールを読み込んだ方が早くね。
0754nobodyさん04/09/11 22:14:20ID:???
>>730
そのサーバで、flock によるロックがかかるかの検証をした方がいいよ。
flock のマニュアルにはこうあります。

> flock()はNFS及び他の多くのネットワークファイ ルシステムでは動作しません。
> 詳細についてはオペレーティングシステ ムのドキュメントを確認下さい。
>
> いくつかのオーペレーティングシステムでflock() はプロセスレベルで実装されています。
> ISAPIのようなマルチスレッド 型のサーバーAPIを使用している場合、同じサーバーインスタンスの
> 並列スレッドで実行されている他のPHPスクリプトに対してファイルを保 護する際に flock()を
> 使用することはできません!

>>394 の検証方法なんてどうよ?
0755nobodyさん04/09/12 00:12:15ID:???
>>736
>個人的にはやっちゃいかんと思う。
ほう、そうなのか?もしよければ理由きかせて。セキュリティ上の理由?

>>737
>バッファに咥えて破棄することはできんの。
ob_start()してob_close_clear()するってことかな。なんかそれでいけそう。

ていうか、こういう回答しかこないってことは、CGI版ではHTTPヘッダは必ず出力されてしまい、
抑制できないってこと?
0756nobodyさん04/09/12 01:02:10ID:???
俺もHTTPヘッダ出力を抑制する方法は知りたい。

header("RESPONSE: HTTP/1.1 404 Not Found");

とやっても自動出力されている最初のRESPONSE: HTTP/1.1 200 OK だけしか検知してくれない場合がある
0757nobodyさん04/09/12 01:07:41ID:???
>755
もう板違い

>756
きちんと404も出力すれば200は上書きされるよ
0758nobodyさん04/09/12 01:11:52ID:???
>>756
HTTPステータスは別格。書式->http://jp.php.net/header
0759nobodyさん04/09/12 01:13:17ID:5k4aSpIX
つーかphpスレって凄いレベルになってるのね
0760nobodyさん04/09/12 02:01:40ID:lTFax1YW
header("Content-Disposition: attachment; filename=".$EXPORT_FILE);
header("Content-Length: ".filesize($DB_PATH.$EXPORT_FILE));
header("Content-Type: application/x-octet-stream");
readfile($DB_PATH.$EXPORT_FILE);

これでファイルダウンロードしているのですが、
DLしたファイルの1行目に空白行(改行コード)が入ってしまいます。
(サーバー上のファイルは空白行がない)
Apache/1.3.24 (Win32) PHP/4.2.1

これってIEが悪いのですか?
0761nobodyさん04/09/12 02:04:29ID:???
>>760
広告が入るレンタルサーバーとかじゃないよね?
0762nobodyさん04/09/12 02:09:53ID:lTFax1YW
>>761
レンタルサーバーではないです。
ローカルでやっても同じ現象がでてしまいます。
0763nobodyさん04/09/12 02:39:44ID:???
実は
\n
<?php


?>
になってるとか。
0764nobodyさん04/09/12 04:25:37ID:???
>>763
おっしゃるとおりでした。
includeしたphpの最終行に

<?PHP
?>
\n

となってました。どうもありがとうございました。
0765nobodyさん04/09/12 05:33:04ID:ydmYYx+I
よければアドバイスを

ランダムで「タグ付きのテキスト(要はhtml文書の一部)」をHP上で表示したいのですが
テキストが短ければ「 " -> \" 」や「 改行 -> \n 」の変換作業は楽です。

ですが長くなってくると変換がめんどくさいので良い方法はないですかね。
「タグ付きのテキスト」をファイルにして読み込む方法を思いついたのですが、ちょっと大げさかと。

html文書からコピペで変更できると楽なんですが…
076676504/09/12 05:35:04ID:ydmYYx+I
srand;
$i = rand(0, 4);

switch ($i) {

case 0:
$ad_data = " <tr>\n <td><img src=\"aaa.gif\">\n";
break;

上記の感じでめんどくさいのでどうにかならないかと
0767nobodyさん04/09/12 05:41:58ID:???
> ランダムで「タグ付きのテキスト(要はhtml文書の一部)」をHP上で表示したいのですが

HTML内に、タグ含むHTMLを表示したいということじゃないのか。

> テキストが短ければ「 " -> \" 」や「 改行 -> \n 」の変換作業は楽です。

\"や\nに変換するということは、phpコードに変換するということか?

> 「タグ付きのテキスト」をファイルにして読み込む方法

何に対してどう大げさなんだ?

> html文書からコピペで変更

で、結局htmlを何に「変更」するんだ?
0768nobodyさん04/09/12 05:47:43ID:???
>>765-766
変換コードかますなり好きにすれば?
Datは使えよ。
0769nobodyさん04/09/12 05:57:35ID:???
もうちょっとPHPっぽい話もしとかないと何かヤバくね?
0770nobodyさん04/09/12 06:17:05ID:???
まさか・・・
ランダムでHPの内容変えたいってだけか?
表示するHTML全部ダブルクォーテーション内に書いて、
改行とか"とかまんどくせ〜
とか言ってるのか?

まさか・・・
俺ら釣られた?
0771nobodyさん04/09/12 07:51:02ID:???
何が面倒なのかが分からん。
HTMLソースでタグを改行して綺麗にネストさせたいがために
\nを入れるのがダルーって事か??
0772nobodyさん04/09/12 09:46:28ID:Iy6EF+FA
WindowsでPHPを(CGIとして)動かす場合、
インストーラー版じゃなくてアーカイブ版じゃないとダメなんですか?
0773nobodyさん04/09/12 10:46:16ID:???
>>765
> 「タグ付きのテキスト」をファイルにして読み込む方法
これで全てが解決します。include or require のマニュアルを参照。

>>772
php.netで配布してるブツのことなら、
> windows php 5.0.1 installer ( CGI only...
って書いてあるけど?
0774nobodyさん04/09/12 14:17:03ID:7xfelydB
php5.0.1を入れたら、同じページでも2,3割の確率で、
ランダムな箇所がエラーになるんですが、これってphp5.0.1のバグなんでしょうか・・・?
077577404/09/12 15:31:35ID:???
PHP4.3.8に戻したら、エラーがなくなった・・・

しばらくは様子見しよう・・・
0776軟式PHP04/09/12 15:33:05ID:???
出たばっかりのものは人柱覚悟で使わんと。
0777nobodyさん04/09/12 16:11:31ID:RQoOdmb2
PHP+MySQLを使用しています。
時間だけの足し算で、思う結果が出せません。
テーブルには、time型の項目が2つあり、この2項を足した結果がほしいのです。

date("H:i:s",strtotime($myrow["a_time"])+strtotime($myrow["b_time"]));

調べたところ、strtotime($myrow["a_time"]) の時点で日付のデータも含まれていて、
それが2つあるため、足し算した結果オーバーフローしてしまっているようです。

日付のデータを含まないで時間だけを扱う方法はないでしょうか。
0778nobodyさん04/09/12 16:32:09ID:???
>>774
ちょっとまだそういうところあるね>PHP5
PHP4にアクセラレータ系のエクステンションを噛ました時にも
結構同様なことは起きたけど。
0779nobodyさん04/09/12 16:39:00ID:???
Yahoo掲示板みたいな会員制の掲示板を作るには
クッキーは必ず必要でつか?
0780nobodyさん04/09/12 16:48:57ID:???
>>779
何のためにcookieを使うか考えて、
その後 他の物で代用できるかどうか考えてごらん。
0781nobodyさん04/09/12 17:18:15ID:???
>>774
具体的にどういうエラーよ
0782nobodyさん04/09/12 17:28:04ID:???
>>764
ちと遅レスだが
「ファイル終端におけるPHPブロックの終了タグはオプション(任意)です。 」
( ttp://jp.php.net/manual/ja/language.basic-syntax.php#language.basic-syntax.phpmode )
なので、特に必要ないなら付けないようにすれば、そういうので悩まなくて済むよ

>>776
以前printfで\0が入るという大バグが出た時は参った
あれ以来1ヶ月くらい様子見てからにしてる
0783nobodyさん04/09/12 18:57:23ID:???
やっぱりphp5はまだバギーなんだね
オブジェクト指向で作りたいから導入考えてたけど
まだだめか…
0784nobodyさん04/09/12 19:00:13ID:???
php4でもオブジェクト指向できるじゃん
0785nobodyさん04/09/12 19:06:53ID:???
教えてください。
PHPでファイルをアップロードしたときの
ファイルのパーミッションが600になるのですが
chmodで644にすることはできますが
最初から「644」で作成することはできないでしょうか?

php.iniの設定やapacheの実行ユーザの設定などで
決まるのでしょうか?
078675604/09/12 19:18:28ID:???
>>757
サンクス!
0787nobodyさん04/09/12 19:18:57ID:???
>>785
apacheの実行ユーザの設定で決まります。
umask。
でも、644にする必要無いんじゃないの?FTPで消したいとかなら別だけど。
0788nobodyさん04/09/12 19:44:19ID:???
>>787
なるほどー
ちなみにnobodyの場合は
どこかで設定可能でしょうか?

アップした画像ファイルをそのまま参照可能にしたいのですが
今まで使ってたレンタルサーバでは
そのまま「644」になってたのでなにか方法があるのかなーと。
0789nobodyさん04/09/12 19:45:41ID:???
interfaceが無いからポリモーフィズムを実現しにくいってのは
あるけど、PHP4でもOOPは出来るなぁ。
オブジェクト指向で作りたいからこの言語…と言ってる時点で底が見えてる。
0790Sinji04/09/12 22:19:09ID:O4Yb0b0i
すみませんが、PHPで日本語の文字列の16進数の表示はどうやればいいか教えてもらいませんか。
たとえば:
$str = "あい" という文字列なら
"2422" (JISの「あ」に相当する) と "2424" (「い」に相当する) という数字を出力したいのです。
よろしくお願いします。
0791nobodyさん04/09/12 22:43:52ID:???
$str = "あい";
for($i=0; $i<strlen($str); $i++) printf("%02x", ord($str{$i}));
0792nobodyさん04/09/12 22:45:49ID:???
>>790
bin2hex なんていかが?
0793nobodyさん04/09/12 22:47:53ID:???
>>790
$hex=implode('', unpack('H*', $str));

$strがJISなら漢字IN/OUTが含まれるかも
SJISなら問題なし
0794Sinji04/09/12 23:19:43ID:O4Yb0b0i
返事ありがとうございました。一応これで16進数の表示がわかりましたが、
$str = "あい";
for($i=0; $i<strlen($str); $i++) printf("%02x", ord($str{$i}));
の出力は:82a082a2 (24222424ではなく)これは単なるシフト(+5e7e)かと思ったら
$str = "アイ" や $str = "大阪"などにしたらどうもそうと見えないのですが。。。
0795nobodyさん04/09/12 23:53:38ID:Jg1ciVqm
>>794
その for でやってることが bin2hex だよ。
そして $str = "あい" の結果は Shift-JIS に見えるけど、$str = "アイ" や $str = "大阪" の結果はどうなるのよ?
0796Sinji04/09/13 00:12:43ID:3IjiBAgs
>その for でやってることが bin2hex だよ。
>そして $str = "あい" の結果は Shift-JIS に見えるけど、$str = "アイ" や $str = "大阪" の結果はどうなるのよ?
$str="アイ"などの結果はShift-JISのようです。欲しいのはJISの16進数なので、一応mb_convert_encoding($str,"JIS")をやってみましたがうまくできませんでした。
たとえば:
$str = "あい"; $str = mb_convert_encoding($str,"JIS");でbin2hexの出力は「1b244224」でした。
$str = "大阪"; $str = mb_convert_encoding($str,"JIS");でbin2hexの出力は「1b244242673a651b2842」でした。

なんだか、私はPHPがよくわからないと思っています。。。

0797nobodyさん04/09/13 00:15:49ID:???
分からなくなったらソースコードか仕様を見れよ
■ このスレッドは過去ログ倉庫に格納されています