トップページ⇒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辺り
0367nobodyさん2005/03/26(土) 14:31:21ID:???
>>364-366
ここはチラシの裏じゃねぇよ。
0368nobodyさん2005/03/26(土) 16:53:02ID:???
>>350
>25番ポートは開放されています。
実際に開放されてることはどうやって確認したの?

>しかし設定によって遮断されているというのはありえるのでしょうか?
自分はWindowsは良く知らないので、思わぬところに設定があったりして
はまることは良くある。あと今回はNATかなんかで外のISPのSMTPに繋ぐから
関係ないんだろうけど、外のSMTPサーバ側で接続規制してることも稀にあるからね。
0369nobodyさん2005/03/26(土) 17:22:24ID:???
このperlの命令をPHPで同じことをするにはどうしたらいいのでしょうか?
unpack 'B133',substr($data,8,17);
0370nobodyさん2005/03/27(日) 01:12:17ID:KQq1VVe4
Apache+PHPはどんな実行環境なんでしょうか?
一回のGetに対してphp.iniで設定されているmemory_limit分のメモリが
割り当てられて複数のGetに複数の処理系が動くのでしょうか?
0371nobodyさん2005/03/27(日) 01:15:25ID:???
>>370
Apacheのモジュールの場合は、Apacheのプロセスで動作する。
0372nobodyさん2005/03/27(日) 08:15:29ID:x1LbwUGs
execがうまく動かないんだけど、なんでだろう
セーフモードとか全オフなのになー
0373nobodyさん2005/03/27(日) 17:14:47ID:???
>>372
独り言は日記帳に
0374nobodyさん2005/03/28(月) 08:16:30ID:???
PHP のスクリプトを CUI で起動してるんですが、
php in malloc(): error: allocation failed
って出て、Core を吐きます。内容としては、データベースにアクセスして、
データをメモリにじゃんじゃんぶち込んでるんですけど…
PHP だとどのくらいまで耐えられるんでしょうねぇ?
Machine は FreeBSD 5.2.1-R で確かに物理メモリで 512MB しかつんでないけど、
top で見てみても PHP がぶっちぎってる感じはしないし、swap は 4GB ちかくあります。
ちなみに core の容量はだいたい…500MB くらい。
03753742005/03/28(月) 08:19:01ID:???
書き忘れました。
PHP 4.3.10 (cli)
です。 >> 374 の s/CUI/cli/g ですね。。
0376nobodyさん2005/03/28(月) 09:23:27ID:???
PHPの設定のmemory_limitを-1に
メモリ食いつぶしても俺のせいにしないでね
0377nobodyさん2005/03/28(月) 10:02:33ID:YyD4GvIT
たとえば2chのスレをスレタイのキーワードで絞って表示するようなスクリプトがあったとして、
$keyword = 'きーわーど';となってて、キーワード指定しないで全て表示したいときは
$keyword = '*';でOKでしょうか?
0378nobodyさん2005/03/28(月) 10:12:58ID:???
>>377
いまいちわからん。
0379nobodyさん2005/03/28(月) 10:48:41ID:8BD5QTo3
if文でチェキラしといて、スルーしとけばいくね?
どんな感じか解んねーけど、取りあえずチェキッとけとって。
0380nobodyさん2005/03/28(月) 11:45:09ID:Z3hOsg+9
ログを保存するとき日付の項目を、
「05/03/28(月)」という形式にしているのですが、
保存するときはタイムスタンプで保存して、
出力時に日付に変換するほうがいいのですか?
0381nobodyさん2005/03/28(月) 11:54:19ID:???
そうすると処理は増える。
どっちが良いのかは、必要があるか無いかで判断すれ。
0382nobodyさん2005/03/28(月) 13:08:42ID:1BLl4/4M
アニメーションGIFってイメージ関数では作れませんよね?
だとすると、バイナリデータを操作して作るしかないのでしょうか?
0383nobodyさん2005/03/28(月) 13:27:12ID:???
>>377
2chのスレをスレタイのキーワードで絞って表示するようなスクリプト次第
0384nobodyさん2005/03/28(月) 15:22:19ID:???
>>382
PHPを使ってということならその通り
自分でライブラリを作って公開したらどう
03853822005/03/28(月) 16:02:00ID:???
そうですか。では自分で作ってみることにします。
ありがとうございました。
0386nobodyさん2005/03/28(月) 17:48:52ID:0by1676F
【種別】 掲示板
【言語】 問いません
【備考】
ttp://pc5.2ch.net/test/read.cgi/hp/1106947416/
上のような感じのものがいいのですが
0387nobodyさん2005/03/28(月) 17:49:40ID:???
>>386
誤爆しました
0388nobodyさん2005/03/28(月) 18:11:52ID:???
(・∀・)ニヤニヤ
0389nobodyさん2005/03/28(月) 20:16:03ID:YyD4GvIT
>>378 >>383
実は人様(今連絡とれませんorz)に作って頂いたスクリプトなので、
その部分を公開したいのですがちょっと気が引けます。。

でもそれじゃあ相談できませんよねorz
うーん。。。
0390nobodyさん2005/03/28(月) 23:32:54ID:IX4olP0V
質問です。
SSHでルート権限でログインして du $dir とした場合と
phpで shell_exec( 'du $dir') を実行した場合(ブラウザからアクセス)では
なぜかSSHからのサイズのほぼ2倍になってしまいます。

ディレクトリのリストは同じように表示されるのですがそれぞれのサイズがほぼ2倍になっています。(サイズが1の場合は1のままでトータルでほぼ2倍)

念のため:容量計算対象のディレクトリ内ファイル・サブディレクトリ等は全てphpで作成されてます

これは何が原因なのでしょうか?

【環境】
レンタル鯖のVPS
FreeBSD 4.7
PHP4.3.9(apacheのモジュールとして動作)
Apache/1.3.33
0391nobodyさん2005/03/29(火) 03:08:23ID:sh3sT6Yb
質問お願いします。
classのメンバ変数に他のクラスのインスタンスを置いたとき、
そのメンバ変数のメソッドを実行する時は
$this->hoge->proc();
では駄目なんでしょうか?
Call to a member function on a non-objectとエラーが出てしまいます。
何かヒントでもあればお願いします。
0392nobodyさん2005/03/29(火) 03:23:49ID:???
>>391
ヒントも何も普通に使えるよ。

03933912005/03/29(火) 04:01:37ID:???
>>392
え?まぢっすか。
見直してみます。
どうもありがとうございます。
0394nobodyさん2005/03/29(火) 10:58:39ID:ChFumad5
ローカルフォルダにある.htmlと.phpファイルを
ブラウザでFTPの様にディレクトリ表示させリンクでファイルを開きたいのですが

良いスクリプトがあれば教えてください。
0395nobodyさん2005/03/29(火) 11:08:40ID:???
あきらかにすれ違い  死ね
03963942005/03/29(火) 13:04:39ID:???
自己解決しました。
0397nobodyさん2005/03/30(水) 19:06:28ID:???
2次元配列$hogeを関数に送って関数内で例えば$hoge[0][0]なら(0,0,$hoge[0][0])と
2次元配列全部の要素をループで取得したいのですけど、どのようにすればいいのでしょうか?
宜しくお願いします。
0398nobodyさん2005/03/30(水) 19:12:55ID:???
2度ループ処理すれば良いと思うよ。
0399nobodyさん2005/03/30(水) 19:45:47ID:???
>>398
サンクスです。
2次元配列の添字ってどうやって取得するのですか?
0400nobodyさん2005/03/30(水) 20:24:10ID:???
>>399
マニュアル読め。
$hoge[0][0]とかで出来るけど。
0401nobodyさん2005/03/30(水) 20:26:55ID:???
foreach($hoge as $out_key => $out_value){
foreach ($out_value as $in_key => $in_value) {
//ここで好きに処理汁。
}
}

array関連の関数を見るのも吉
0402nobodyさん2005/03/30(水) 20:27:14ID:???
>>399
foreach($array1 as $key1=>$value1){
 // 1. foreach ver.
 foreach($value1 as $key2=>$value2){ /* 処理内容 */ }
 // 2. for ver.
 for($i=0; $i<count($value1); $i++){ /* 処理内容 */ } // forの2重ループでも当然可
}
実際のコードを書く時には、配列要素のチェック等が必要。
0403nobodyさん2005/03/30(水) 20:45:00ID:???
PHPでMySQLの操作に関するのはこのスレで良い?
0404nobodyさん2005/03/30(水) 20:54:57ID:???
>>403
とりあえず、書いてみ。
話はそれからだ。
0405nobodyさん2005/03/30(水) 21:12:44ID:???
linuxでアップロードしたファイルがupload_tmp_dirに作成されないのですが
原因として何が考えられるでしょうか?
sleep()で止めてファイルを確認しても作られません。
file_uploadsOn
0406nobodyさん2005/03/30(水) 21:16:14ID:???
んじゃとりあえず聞いてみる。
table1に(テーブル名vendor_info)
vendor_name vendor_url
Abit http://abit.....
ASUS http://asus....

table2に(テーブル名mb_info)
mb_name mb_url vendor_kind その他諸々
AV8 http:// Abit
A8V http:// ASUS

から、リストを
Abit(リンクvendor_url) AV8(リンクmb_url) その他諸々データ
という風にmb_infoのベンダー名からvendor_infoのvendor_urlのデータを
持ってきたいんだけど、試行錯誤した結果思ったとおりに出力できたソースが
(続く)
04074062005/03/30(水) 21:19:08ID:???
$SQL = "SELECT * FROM mb_info GROUP BY mb_name ORDER BY vendor_kind";
$res = $conn->query($SQL);
if (! DB::isError($res)) {
// レコードの取得
while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
vendorurl ();
echo "<a href=\"" . $row['mb_url'] . "\">" .$row['mb_name'] . "</a> |\n";
echo "<br>\n";
}
}
echo $res->numRows();

// データベースの切断
$conn->disconnect();


function vendorurl(){
global $conn;
global $row;
$sqlurl = "SELECT vendor_url FROM vendor_info WHERE vendor_name='" . $row['vendor_kind'] . " '";
$resurl = $conn->query($sqlurl);
if (! DB::isError($resurl)) {
while ($rowurl = $resurl->fetchRow(DB_FETCHMODE_ASSOC)) {
echo "<a href=\"" . $rowurl['vendor_url'] . "\">" . $row['vendor_kind'] . "</a> |\n";
}
}
}//function vendorurl
こうなった。んで思ったとおりに表示されてるんだけど、リレーショナルデータベース
の使い方としてこれで良いのか、もっとスマートなやり方があるのかお聞きしたい。
04084052005/03/30(水) 21:36:19ID:???
自己解決・・切腹物だった・・・
0409nobodyさん2005/03/30(水) 22:23:17ID:???
>>406
SELECT * FROM mb_info,vendor_info
WHERE mb_info.vendor_kind = vendor_info.vendor_name
GROUP BY mb_info.mb_name
ORDER BY mb_info.vendor_kind;
0410nobodyさん2005/03/30(水) 22:50:33ID:???
>>408
切腹する前に何で悩んでたか教えてくれ
それで笑わせてくれ
0411nobodyさん2005/03/30(水) 23:14:01ID:???
>>409
なるほど、そうやって使うものなのね。
自分で>>407を書いててこれってリレーショナルな使い方じゃないよな・・・
って素人ながらに感じていたんだよ。
完全にSQLスレで聞いたほうが良い内容だったけど、お蔭様で先が見えてきました。
ありがとう。
0412nobodyさん皇紀2665/04/01(金) 00:38:54ID:6CcmQp6c
CGI版のphpで、エラーがでる場合、internal server errorになりますよね。
このエラー内容を、ブラウザに表示できないでしょうか?

Perlだと、
use CGI::Carp qw(carpout fatalsToBrowser);
とか、
Kcatch.pm
っていうものがあるのですが・・・

なんかライブラリなりコードでもいいので、
ご存じの方、教えていただければ幸いです。
0413nobodyさん皇紀2665/04/01(金) 01:25:04ID:???
ブラウザを綴じて一定期間中セッションを残したいんだが
どうすればいい?
0414nobodyさん皇紀2665/04/01(金) 01:33:55ID:???
>>413
マニュアル読めばいい。
0415nobodyさん皇紀2665/04/01(金) 01:55:33ID:???
有難うございます。
何ページですか。
0416nobodyさん皇紀2665/04/01(金) 01:59:08ID:6CcmQp6c
>>415 おいおいそれはたよりすぎ。
www.php.net いって、sessionで検索。
あとはまかせた。

session はある程度の知識がないうちに公開しちゃうと、
いろいろとセキュリティーホールになるので注意
0417nobodyさん皇紀2665/04/01(金) 02:02:03ID:???
SingleHTML版のマニュアルを落としてきて、1ページ目を読む。
0418nobodyさん皇紀2665/04/01(金) 02:02:12ID:???
おいおい
エイプリルフールですyo!
0419nobodyさん皇紀2665/04/01(金) 02:08:52ID:???
なるほど
0420nobodyさん皇紀2665/04/01(金) 08:16:41ID:???
おまいら、PHP 4.3.11と5.0.4がリリースされましたよ。
昨夜PHP4も5もコンパイルしたばっかりだというのに...orz
0421nobodyさん皇紀2665/04/01(金) 08:38:19ID:???
>>420
うそと思いながらも確認してしまった俺
0422nobodyさん皇紀2665/04/01(金) 11:08:27ID:???
だぁ〜っ、ネタかよっ!釣られた!
>>412
error_reporting
0423nobodyさん皇紀2665/04/01(金) 11:16:34ID:???
php4は昨年と変わらず(ナディア)、php5はウサギ(?)だった
0424nobodyさん皇紀2665/04/01(金) 12:21:42ID:???
たぶん>>420はここのネタにつられたんではないかと。
ttp://www.sitepoint.com/blog-post-view.php?id=248887
0425421皇紀2665/04/01(金) 12:41:40ID:???
今見たら本当にリリースされてるし
リリースの日付は3/31だからエイプリルフールじゃないよな
0426nobodyさん皇紀2665/04/01(金) 19:11:43ID:???
PHPのログが犬になってるのはイースターエッグだな
0427nobodyさん皇紀2665/04/01(金) 19:12:12ID:???
ログじゃねー ロゴだ
phpinfo() や公式に確認可
0428nobodyさん皇紀2665/04/02(土) 01:44:36ID:???
ショッピングカートのセッションについて教えてください。
2つのブラウザで同時にアクセスすると同一セッションになりますが、
1つ目のブラウザが決済のページに入ったら2つ目のブラウザは
決済ページを表示できないようにしたいです。
0429nobodyさん皇紀2665/04/02(土) 02:42:07ID:???
>>428
新しいセッション開始すれば?
0430nobodyさん2005/04/02(土) 05:01:43ID:4/Eqlz9k
PHP5はそろそろ乗り換えてもいい感じですかね。
0431nobodyさん2005/04/02(土) 05:02:31ID:???
PHP6になるまで待つのだ
0432nobodyさん2005/04/02(土) 11:45:09ID:???
5.0.4揚げ
0433nobodyさん2005/04/02(土) 18:06:21ID:55/k15cN
PHPサイトを立てようと思っているのですが、負荷テストを行いたいです。

知り合いにそういったツールがあると聞いたのですが、どんなものがあるのでしょうか?
0434nobodyさん2005/04/02(土) 18:37:44ID:???
2ちゃんで晒す
0435nobodyさん2005/04/02(土) 18:40:02ID:???
>>433
ab
0436nobodyさん2005/04/02(土) 20:25:51ID:A7D+JrLe
phpでパスワード付きzipを作成するコマンドを発行したいのですがどうしたらよいのでしょうか。 
0437nobodyさん2005/04/02(土) 23:15:02ID:???
>>436
PHPからコマンド発行するには
systemかexec関数を使えば良いよ
0438nobodyさん2005/04/02(土) 23:20:20ID:A7D+JrLe
パスワードを入力する対話型の部分はどうしたらよいのでしょう?
0439nobodyさん2005/04/02(土) 23:25:29ID:???
>>438
作ればいいんじゃない?
0440nobodyさん2005/04/02(土) 23:39:27ID:???
>>438

ここにLinuxでパスワード付きのzipファイル生成する話題が出てるんで
このコマンドをphpからsystem関数で発行すれば良いかも

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19632&forum=10&3
0441nobodyさん2005/04/03(日) 09:11:32ID:rv9qNWYe
単にファイルをダウンロードさせたいだけなのですが、
どうしてもファイルの中身がブラウザに表示されてしまいます。
(以下が、スクリプトまるごと全部です。)
//===========================================================
$sFilename = "seminar.csv";

$sUnixPathFile = $_SERVER["DOCUMENT_ROOT"] . "../data/" . "seminar_request.csv";
$fh = fopen ($sUnixPathFile, "r");
flock($fh,LOCK_EX) or die();
$buffer = fread ($fh, filesize ($sUnixPathFile));
flock($fh,LOCK_UN) or die();
fclose ($fh);

header("Content-disposition: attachment; filename={$sFilename}");
//dummyはIE対策
header("Content-type: application/octet-stream-dummy; name={$sFilename}");
print $buffer;
exit;
//===========================================================
どうすればダウンロードできるのでしょうか?
お助けいただければ幸いです。よろしくお願いします。
0442nobodyさん2005/04/03(日) 10:23:20ID:???
4.3.11 入れたのに phpinfo が 4.3.10 だ。なぜだ。
0443nobodyさん2005/04/03(日) 10:44:02ID:???
>>442
インストールミスか、再起動してないとかじゃないの?
ソースはきちんと4.3.11になってたよ。
0444nobodyさん2005/04/03(日) 13:35:14ID:???
>>433
OSSの性能・信頼性評価/障害解析ツール開発
ttp://www.ipa.go.jp/software/open/forum/DevInfraWG.html
0445nobodyさん2005/04/03(日) 13:42:01ID:QiTsRZ7F
当方PHPを学んでみようと思ってる者です。
みなさんはどのようにしてPHPを覚えられましたか?
本でしょうか、それともネット上で?
0446nobodyさん2005/04/03(日) 13:54:12ID:???
>>445
マニュアルを読めば十分。
マニュアルはネットで配布されている。

関数が豊富に用意されているので、
まったくのド素人でも、覚えることそんなに無いかと思う。

とは言っても、アルゴリズムの一つや二つ知ってるだけでも、
かなり違ってくると思うので、本を買うのも、また良し。
(本に書いてあるかどうかは不明)
0447nobodyさん2005/04/03(日) 14:00:57ID:QiTsRZ7F
即時の返答ありがとうございます!
マニュアルってこれのことですね。
ttp://php.s3.to/man/

早速トライしてみます。
0448nobodyさん2005/04/03(日) 14:47:13ID:IkqaEHUC
当方MacOSX、PHP5.0.4、POSTFIX2.?を使ってプログラムを組んでいます。
メールアドレスを登録してくれた人に、返信メールを送るシステムを作ったのですが、
携帯に返信できません。(実験したdomainは@t.vodafone.ne.jp)
Mb_Send_Mail($address, $subject, $text, $header)
で、$headerには自分のドメイン(DDNSで運営している)を入力しているのですが。

知ってる方いらっしゃいませんか?
04494412005/04/03(日) 16:00:01ID:rv9qNWYe
>>441 どなたかわからないでしょうか?
0450nobodyさん2005/04/03(日) 17:24:55ID:???
>>449
俺はPEARのHTTP_Downloadを使ってる。

$dl = &new HTTP_Download();
$dl->setData($fileData);
$dl->setLastModified(time());
$dl->setContentType("application/x-octetstream");
$dl->setContentDisposition(HTTP_DOWNLOAD_ATTACHMENT, $fileName);
$dl->send();

$fileData:ファイルの中身
$fileName:ファイル名
こんな感じでo.k.
0451nobodyさん2005/04/03(日) 18:06:18ID:???
全角カタカナと全角ナカグロ(・)と全角ハイフン(−)のみで構成されている文字列か否かは、
以下の正規表現ではだめなのでしょうか?
どうしてもfalseになってしまいます・・・

if (preg_match("/^[ア-ン・−]+$/",$aParam["company_name_kana"]))

お助け願えれば幸いです。
0452nobodyさん2005/04/03(日) 18:42:28ID:???
マルチバイト文字は
mb_eregiかmb_eregを使って正規表現できる
0453nobodyさん2005/04/03(日) 18:44:05ID:???
>>451
カタカナが違うっぽい。
chr()とord()を使って文字コードについて考えるよろし。
0454nobodyさん2005/04/03(日) 18:44:49ID:???
preg_*だとUTF8使えば可能
04554512005/04/03(日) 19:45:30ID:rv9qNWYe
>>452さん
んー、PHPのサイトみたらnmb_eregiかmb_eregは、まだ実験的ってあるので、避けたいところでして・・・

>>453さん
んー、しらべてみたところ、
if (preg_match("/^[ァ-ヶ・−]+$/"/",$aParam["company_name_kana"]))
かな、と思ったのですが、実行してみたら、だめでした・・・_| ̄|○

>>454さん
「preg_*だとUTF8使えば可能」ってのは、UTF8を使わないとダメってことでしょか?
あるいはEUCでも可能な方法はあるのでしょうか・・・

恐縮ですが、よろしくお願いします。
0456nobodyさん2005/04/03(日) 21:22:06ID:???
>>442
Windows版PHPでphp-ts.dll他を入れ替えてないというオチでは?

>>447
検索だとそのサイトがどうも上位に来るようなんだけど、マニュアルが古いから
ちゃんと本家のマニュアルをベースにした方が良いよ。
あと手元にアーカイブをコピーしてそっち見るとか。
http://jp.php.net/manual/ja/
0457nobodyさん2005/04/03(日) 21:47:00ID:wg0bg1Ve
hogehoge
2ch

という2つのフォルダが同じディレクトリ内にあるとして、
2chのindex.phpからhogehogeのindex.phpを指定する場合

<?php chdir("../hogehoge/"); include("index.php"); ?>

と記述するとエラーが出てしまうんですが、どこが間違っていますか?
0458nobodyさん2005/04/03(日) 21:55:15ID:???
なぜ
<? include("../hogehoge/index.php") ?>
と書かないの?
0459nobodyさん2005/04/03(日) 22:02:23ID:???
>>455
マニュアルの記述は古いので現在は実験的ステータスってのは英語版のマニュアルには無い。

preg_*はUTF8でないと正確に日本語を扱うことは出来ない。
04604572005/04/03(日) 22:08:12ID:???
>>458
以前その書き方をした時にエラーが出て、457のような書き方を知ったんですよ。。
でも今それを試してみたらできました。
よくわかんないけど解決しました。
ありがとうございました。
0461nobodyさん2005/04/03(日) 22:39:13ID:???
>>460
その環境のセーフモードに関わるあたりの設定か、
その当時の(PHPのセーフモード絡み)バグかと思われ。
# セーフモード絡みのバグは結構多い。
0462nobodyさん2005/04/04(月) 00:28:53ID:/X5zJ+6W
ITmedia エンタープライズ:PHP、DoS攻撃の脆弱性に対処
http://www.itmedia.co.jp/enterprise/articles/0504/03/news010.html
0463nobodyさん2005/04/04(月) 00:53:24ID:???
ob_start()っていみあんの?
マニュアル読んだけどポンとこないいだなぁ
どんなとき使うの?
0464nobodyさん2005/04/04(月) 01:25:35ID:???
>>463
ob_start();
curl_exec($ch);
$str = ob_get_contents();
ob_end_clean();
0465nobodyさん2005/04/04(月) 02:28:34ID:???
バッファリングする必要はある?
0466nobodyさん2005/04/04(月) 02:51:56ID:???
>>465
curl_exec()はphpinfo()等といっしょで、実行すると(通常は)標準出力に垂れ流しちゃうから、
こうやってバッファリングでキャッチするしか、その出力を変数として取得できないんよ。
■ このスレッドは過去ログ倉庫に格納されています