【PHP】質問スレッドpart34【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/03/21(火) 10:19:14ID:???【ガイドライン】
質問の前にgoogleやマニュアルを検索してください。
http://www.php.net/manual/ja/
http://php.s3.to/namazu/
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄には何も記述しないでください)
2. ハードウェア、OSのバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。
5. 質問者としても態度をわきまえること。
◆質問後の注意
・質問者は必ずIDを表示させてください。
書き込む場合はメール欄に何も記述しないでください。
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
過去スレ、関連リンク、FAQ等>>2-10辺り
0611nobodyさん
2006/04/29(土) 02:49:50ID:cDiLaugnご丁寧にありがとうございます。
無事動作いたしました
解決してすぐの質問になり申し訳ないのですが、
[function]について詳しく書かれているwebページをお教えしていただませんでしょうか?
マニュアルにはあまり詳しい説明がないようです
0612nobodyさん
2006/04/29(土) 03:20:14ID:???functionて「関数」のこと?マニュアルでわかんないと難しいかもね
http://e-words.jp/w/E996A2E695B0.html
http://jp.php.net/manual/ja/language.functions.php
phpのマニュアルの各関数の下にUser Contributed Notesというとこに有用なサンプルがあったりする。
ユーザ定義関数をかいつまんで説明すると何か処理をさせる単位。
function hoge(引数) { 命令群; } で一つのユーザ定義関数
<?php
//これはユーザ定義関数まずは何も実行されない
function hoge($a, $b) {
return $a * $b;
}
//hogeを呼ぶと上の関数が処理されてreturnで指定した値が返ってくる
echo hoge(2, 3); // 6
// echoは関数ではない(言語構造)
// printfとかstrlenとかは内部関数
?>
こんな感じ
0613nobodyさん
2006/04/29(土) 10:28:54ID:???をインストールしたのですが、テストページ (test.php) が表示できません。やったことは、
1) ports でインストール
# cd /usr/ports/www/mod_php4
# make install clean
2) php.ini のコピー・編集
# cp /usr/local/etc/php.ini-dist /usr/local/lib/php.ini
# vi /usr/local/lib/php.in
error_reporting = E_ALL & ~E_NOTICE
display_startup_errors = Off
display_errors = Off
log_errors = On
error_log = /var/log/php
;error_log = syslog
3) httpd.conf の編集
LoadModule php4_module libexec/libphp4.so
AddModule mod_php4.c
AddType application/x-httpd-php .php .phtml
4) apache の再起動
# apachectl restart
続く
0614613
2006/04/29(土) 10:33:27ID:???/public_html/ に test.phtml というファイルを用意しました。
<html><body>
<?
phpinfo();
?>
</body></html>
しかし、ブラウザでは何も表示されません。
/var/log/httpd-error には以下のようにありました。
[notice] Apache/1.3.33 (Unix) PHP/4.3.10 configured -- resuming normal operations
まだ情報不足かもしれませんが、よろしくお願いします。
0615613
2006/04/29(土) 10:35:05ID:???# vi /usr/local/lib/php.in
は php.ini の間違い (タイプミス) です。
0616nobodyさん
2006/04/29(土) 14:38:21ID:???その/public_htmlに
<html>
OK
</html>
という内容のtest.htmlを置いたとき、それはOKと表示されるのか?
0617nobodyさん
2006/04/29(土) 18:43:39ID:???if(なんたら) {
return;
}
というのを見たのですが、この場合 return; は何を返すのでしょうか?
0619nobodyさん
2006/04/29(土) 19:02:23ID:???0620nobodyさん
2006/04/29(土) 21:16:42ID:???apacheは正常に動いているので、OKは表示されます。
0621nobodyさん
2006/04/29(土) 21:32:58ID:???何が問題なんでしょうか??
あとみなさん、willcomって振り分けてます?
0623nobodyさん
2006/04/29(土) 21:48:36ID:???【モバイル】携帯電話向け開発について語るスレ
http://pc8.2ch.net/test/read.cgi/php/1144504375/
0625nobodyさん
2006/04/29(土) 22:29:55ID:???何も返してないので受け取り側はNULLを受け取る。
これを「NULLを返してる」と受け取りたいならそう受け取れば?
0626613
2006/04/30(日) 01:47:17ID:???おそらく何のオプションもつけずに configure してしまったのが
原因だと思います。
# cd /usr/ports/lang/php4
# make configure --with-apxs=/usr/local/sbin/apxs --with-mysql
# make install clean
で、apache の再起動ではだめだったんで、OS 自体を再起動させたら
普通に php のテストページがみれました。
ご迷惑おかけしました。m(__ __)m
0627nobodyさん
2006/04/30(日) 20:43:34ID:VjCRbLRm現在、以下のような想定をしています。
1:フォームのそれぞれの項目に対して値を与える
2:submitボタンを押すと、SESSION["price"]に値が入る
3:買い物カゴのページでその内容が表示(session_start();をする)
4:前に戻って再度2をする
5:SESSIONに値が追加される
6:購入処理(メールフォーム)
SESSIONに値を入れる辺りがどうも違う気がします。1つしかはいらないし・・。
0629nobodyさん
2006/05/01(月) 03:46:18ID:YO7NPy3zencodeURIComponentを使い
UTF-8にして送信
→phpでmb_convert_encodingを使い、SJISに変換して表示
というプログラムを書きましたが、
「_」を送ると「?」になってしまいます。
ちゃんと_として表示するためには
どこを直せばいいのでしょうか?
0630nobodyさん
2006/05/01(月) 03:47:09ID:???0631629
2006/05/01(月) 04:13:03ID:???>>630
_だけを記述してUTF-8で保存したテキストファイルも作れるので
あるようですね
0632nobodyさん
2006/05/01(月) 06:53:09ID:???EF BB BF E3 8D 89
らしい
0633nobodyさん
2006/05/01(月) 15:51:20ID:???0636nobodyさん
2006/05/01(月) 18:28:00ID:fXCmLkU00637nobodyさん
2006/05/01(月) 22:16:04ID:???開くと「取り消されたアクション」と出てしまいます。
他のページを見ると「ページを表示できません」と出ます。
何故でしょう?ちなみにウイルスソフトなどオフにしてもダメでした。
OSはXPです。
0638nobodyさん
2006/05/02(火) 10:14:22ID:???>>4
【簡易FAQ】
略
2. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
→ できません
のincludeについて下記URLのPHPマニュアルの「例 16-7. HTTP経由のinclude()」を
みるとできそうなこと書いてるんですよね。しかし実行すると変数がセットされずに
〜.phpが実行されるだけなんですよ。やはり無理と言うことなんでしょうか。
http://www.php.net/manual/ja/function.include.php
0639nobodyさん
2006/05/02(火) 10:17:34ID:HxbVnoAW関数を定義して、include/requireで読み込んで、関数を引数つきで呼び出すのが筋だろって思う
0640nobodyさん
2006/05/02(火) 10:20:03ID:???のようにHTTP経由 ("http://")でしてる?ローカルファイルではできないとかいてあるよ。
0641nobodyさん
2006/05/02(火) 12:10:48ID:???実現の仕方が多少違うけど、似たような事は出来るやり方は色々ある。
0642nobodyさん
2006/05/02(火) 14:28:24ID:CS7Fc+RR$_SERVER['DOCUMENT_ROOT']
をすると、借りているサーバのディレクトリパスになってしまいます
自分の借りているのは
http://www.example.jp/~hoge/
という感じでホームディレクトリ貰っています
調べたら、/usr/home/hogeなのですが
これをPHPで取得する方法はないでしょうか?
0644638
2006/05/02(火) 15:00:39ID:???他の方法を検討します。
0645nobodyさん
2006/05/02(火) 15:19:44ID:???ありがとうございます
/usr/home/hoge
この値がほしいです。
毎回これを書くと移動させるとややこしくなるので
なにか取得する方法があるのなら知りたいです。
0646nobodyさん
2006/05/02(火) 15:20:42ID:???お好きなものをどうぞ。
[1]print_r($_SERVER) の中から使えそうな奴を使う。
[2]__FILE__
[3]あと連想配列で色々返す関数あった気がするがど忘れした。
0649nobodyさん
2006/05/02(火) 17:17:48ID:???「自分のディレクトリパス」と「借りているサーバのディレクトリパス」の意味が分からん。
$_SERVER['DOCUMENT_ROOT']で何が返ってきてるんだ?
/usr/home/hogeってのはどうやって調べたんだ?
0650nobodyさん
2006/05/02(火) 17:28:50ID:???http://054.info/054_44749.zip.html
このヘルプなら見れると思う。パスはphp
0653nobodyさん
2006/05/02(火) 21:32:05ID:1egQQzgHPEAR::DBで、
$sql = "SELECT * FROM category WHERE id = '1'";
$rs = $db->query($sql);
は成功するのですが、
$sql = "UPDATE category SET hoge = 'huge' WHERE id = '2'";
$rs = $db->query($sql);
は、エラーは出ないもののUPDATEされません。
おなじSQL文をPHPMyAdminで実行させると、うまくいきます。
queryじゃない別の関数があるのかなとも思ったもののなさそうです。
こういう場合どうすればいいのでしょうか?
0654nobodyさん
2006/05/02(火) 22:21:39ID:???西暦から書式の異なる西暦(20060502→2006/05/02,2006/05/02→2006年5月2日など)
への変換などのクラスモジュールってありますか?
あったら教えて下さい
0656nobodyさん
2006/05/03(水) 00:16:50ID:???とか書いてますけど
strpos()にはバイナリセーフとかまったく書いてないのにバイナリ文字列使えます。
てことは最初からバイナリセーフだったってことですよね
最初から使える、今も使えないという関数の見分けはどうすればいいですか?
(使って調べるとかいうのは無しでお願いします)
0658653
2006/05/03(水) 01:51:04ID:RT4qdpx10659nobodyさん
2006/05/03(水) 04:20:12ID:???和暦変換は明治〜平成だけならPEAR::JpCalendarとかいうのがあるみたい。
ttp://pear.php.net/pepr/pepr-proposal-show.php?id=345
今年できたばっかで大して練られてないっぽい気もするが。
西暦書式変換は普通はstrtotime+dateの組み合わせでやっちゃうと思う。
0661nobodyさん
2006/05/03(水) 10:57:39ID:???西暦+660
0663nobodyさん
2006/05/03(水) 12:53:18ID:???正規表現じゃなくて、sscanf→strtotime→date or trftime
あたりがベターかと思う。
0665nobodyさん
2006/05/03(水) 16:26:01ID:???http://up.viploader.net/src/viploader23190.zip.html
はい。エロ広告が出てくるので注意
0666nobodyさん
2006/05/03(水) 17:02:04ID:???PHP Notice: Only variable references should be returned by reference in
なのですが、どういうことをしなければこのnoticeが出ないコーディングができますか?
0668nobodyさん
2006/05/03(水) 17:29:48ID:???参照返しの関数でnewで作成したオブジェクトを直接returnに指定している場合や
値を返しているのに参照代入にした場合に出る・・と思ふ
XOOPSなら
システム管理>一般設定(サイト一般設定)>一般設定>デバッグモードを有効にする>オフ
それ以外はパッチ当てるか、ソースでerror_reportingがあれば
error_reporting(E_ALL & ~E_NOTICE);とでもすれば
とりあえずエラーは消える
0669nobodyさん
2006/05/03(水) 17:32:58ID:???0670nobodyさん
2006/05/03(水) 17:39:22ID:???function & foo(){ return "value"; } ってのが典型的な例だな。
notice絡みでは、もう一つ
"Only variables should be assigned by reference" ってのもある。
違いが分っかるかなー?
0671666
2006/05/03(水) 17:49:27ID:???ありがとうございます。でもちょっと難しいですねぇ。
XOOPSの問題でなく自分でプログラムを組んで勉強中です。
参照返しの関数ってreturn $hoge の$hogeが参照って理解でいいですか?
それとも function &foo() ってことでしょうか?
もう一つの方も分からないです…
0672nobodyさん
2006/05/03(水) 18:46:58ID:???多分下だろう
0673666
2006/05/03(水) 19:45:40ID:???「参照返しの関数」の意味がわからなかったもので…
>>670さんの言う
"Only variables should be assigned by reference" の場合は、どうするべきなのですか?
0675666
2006/05/03(水) 21:23:50ID:???function & removeAttribute ($name) {
if (isset($this->attributes[$name]))
{
$value =& $this->attributes[$name];
unset($this->attributes[$name]);
return $value;
}
}
0676nobodyさん
2006/05/03(水) 21:53:24ID:???この場合だとissetでfalseになる場合はreturnを実行しないので何も返さないが、
関数は&付きなのでリファレンスを返すことになっていてNoticeになると思われ。
条件に該当しない場合でもダミーのデータのリファレンスを返しちゃえばNoticeは出なくなると思うが
それではたして誤動作しないかは、戻り値の受け取り側を確認しないと不明。
0677666
2006/05/03(水) 22:00:11ID:???$value =& NULL;
return $value;
でよろしいですか?
あと、function removeAttribute
と値渡しにするという解決方法があるかなぁと思ったのですが、まずいですか?
0678nobodyさん
2006/05/03(水) 22:21:42ID:???2.クラス内のメソッドのstaticはどういう利点があるの?
インスタンス作らないで呼べるってことくらいしかよくわからない。$this使えないし。
どういう場合に使い分けるものなの?
0679nobodyさん
2006/05/03(水) 22:33:51ID:???> Fixed "incorrect" reference passing for PHP 4.4.0 compatibility.
ってことで、それの修正がされている。
svnの導入が面倒かも知れないけど、まぁ他でも使うかも知れんしsvn入れて取得してみれ。
具体的にはこんな感じに修正されている。
function & removeAttribute ($name)
{
if (isset($this->attributes[$name]))
{
$value = $this->attributes[$name];
unset($this->attributes[$name]);
return $value;
}
$null = NULL;
return $null;
}
0680nobodyさん
2006/05/03(水) 22:35:50ID:???一個あれば充分
0682だいすけ
2006/05/04(木) 03:24:23ID:NNjSW7+f昔は余裕でできた、たんじゅんなメールフォームを、
一年ぶりにつくろうとしたら、動かなくなってしまいました。
ブラウザでは送信できているように見えるのですが、メールが到着しません。
なお、下記contactからmiyagawaへエイリアスしてるのですが、
ふつうのメーラでcontact@example.comへ送信したら、miyagawa@example.com へ転送されました。
以下コードです。
$body = "●お名前:{$_REQUEST['name']}\n";
$body .= "●メールアドレス:{$_REQUEST['email']}\n";
$body .= "●コメント:\n";
$body .= "{$_REQUEST["comment"]}\n";
$body .= "●UserAgent:{$_SERVER['HTTP_USER_AGENT']}";
$headers = 'From: webmaster@example.com';
mb_language("Japanese");
$rt = mb_send_mail("contact@example.com", "contact@example.com/お問い合わせ", $body, $headers);
print "***" . $rt . ***;
最終行の$rtは空白です(******)となってしまう。
解決方法おわかりの方、いらっしゃったら、教えていただければ幸いです。
なお、内部エンコーディングをutf8にしてるのですが、これは関係あるでしょうか?
0683nobodyさん
2006/05/04(木) 09:49:37ID:???あとは、MTAのログをみてみるとか。
0684nobodyさん
2006/05/04(木) 15:49:10ID:???--- var.php
<?php
$home_dir = "/home";
$root_dir = "/";
?>
のようなファイルをWebサイト上に置いておき
--- index.php
<?php include "http://www.example.jp/var.php"; ?>
<?php echo $home_dir; ?>
のようにして、読み込んで利用したいのですが
echoがうまく表示されません、こういう使い方はできないのでしょうか?
0685nobodyさん
2006/05/04(木) 16:12:32ID:???allow_url_fopen off とか?
よれよりネットからとってこないでローカルから取れ
0686684
2006/05/04(木) 16:21:30ID:???allow_url_fopenはonにしています
--- var.php
<?php
$home_dir = "/home";
$root_dir = "/";
echo $home_dir;
?>
とやったとき、
--- index.php
<?php include "http://www.example.jp/var.php"; ?>
とすると、$home_dirは表示されます。
0687nobodyさん
2006/05/04(木) 16:38:55ID:???0688nobodyさん
2006/05/04(木) 18:09:57ID:???リモートファイルはApacheでPHPとして実行された後のが呼び出されてるから
多分そのincludeの中身は空っぽ。
.incなり.txtなり、中身をそのまま表示する拡張子にしとけばおっけー
0689nobodyさん
2006/05/04(木) 19:53:50ID:???$limit = strpos(getenv("QUERY_STRING"), "/");
}
もうちょっとスマートに書く方法無い?
0690nobodyさん
2006/05/04(木) 19:58:03ID:???if(($l = strpos(getenv("QUERY_STRING"), "/")) !== False) $limit = $l;
0691nobodyさん
2006/05/04(木) 20:00:16ID:???list($limit) = explode('/', getenv('QUERY_STRING'), 2);
0692691
2006/05/04(木) 20:01:27ID:???忘れて。
0693682
2006/05/04(木) 23:34:23ID:NNjSW7+fひょっとして的なヒントでもいいので。。。
よろしくお願いします。
0694nobodyさん
2006/05/04(木) 23:51:44ID:???とりあえずそのスクリプト置いてるサーバで
mail("contact@example.com", "test", "test");
して届くかやってみたら
0696682
2006/05/05(金) 01:20:45ID:+fwaxrpTすいません。>>683をみすごしてました。
エラー表示はonにしても、エラー表示はウェブブラウザにでませんでした。
で、/var/log/maillogをみたら、
May 5 01:10:04 www sendmail[5775]: NOQUEUE: SYSERR(www): can not chdir(/var/spool/clientmqueue/): Permission denied
と言われました。
で、/var/spool/clientmqueue/ のパーミッションを755にしたら
May 5 01:18:37 www sendmail[8616]: k44GIbxh008616: SYSERR(www): queueup: cannot create queue file ./qfk44GIbxh008616, euid=80, fd=-1, fp=0x0: Permission denied
と言われてしまいました。sendmailの知識は詳しくないのですが、
このキューが入るのはどこのディレクトリで、パーミッションはいくつにすればよいのでしょうか?
0697682
2006/05/05(金) 01:57:05ID:???パーミッションについて、
/var/spool/clientmqueue/ については、
dangerous permissions=40755 on queue directory /var/spool/clientmqueue/
と言われてしまいました。
つけたしまでにて
0698nobodyさん
2006/05/05(金) 02:06:18ID:???SendmailのInstallation and Operation Guide に、
The directory /var/spool/clientmqueue should be created to hold the mail queue.
This directory should be mode 0770 and owned by user smmsp, group smmsp.
とあるよ。オーナーも確認が必要
0699682
2006/05/05(金) 02:18:59ID:???ありがとうございます。
>>698さんんの書き込みをもとに、
#chown smmsp:smmsp /var/spool/clientmqueue
# chmod 770 /var/spool/clientmqueue
# chmod 700 /var/spool/mqueue
したらエラーがMTAでなくなり、メールも正常にとどきました。
ありがとうございました。
0700nobodyさん
2006/05/05(金) 19:40:53ID:???これはどういう感じで作っていったらいいんですか?
皆目検討がつきません
0701nobodyさん
2006/05/05(金) 19:50:38ID:???kakasiやchasenで単語に切り分け、インデックス化しておき、抽出はインデックスからする。
…って、namazuそのものじゃん。
0702nobodyさん
2006/05/05(金) 23:39:40ID:???「形態素解析」っつー考え方があって、その処理によって日本語を単語分解する。
ttp://ja.wikipedia.org/wiki/%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90
ttp://www.unixuser.org/~euske/doc/nlpintro/
分解さえできればあとはキーワードごとにカウントするだけでしょ。
問題はこの形態素解析で、日本語の解析は真面目にやると極めて難しいよ。
この辺は何十年も昔から研究が続けられてる分野なので、その辺を勉強してみるとよろし。
具体的な実装例としては「自然言語による検索」や「日本語構文を意識した漢字変換」など。
0703nobodyさん
2006/05/06(土) 02:06:14ID:???0704nobodyさん
2006/05/06(土) 02:55:08ID:???0705nobodyさん
2006/05/06(土) 16:15:13ID:Lx+KF6I8いまswitchで条件分岐をするものを書いてます。
単純に
switch($_POST['type']) {
case '1' :
/*処理*/
break;
case '2' :
/*処理*/
break;
default :
/*処理*/
break;
}
といったものですが、どうやらcase 2 :に何か問題があるのか、このファイルを実行すると、
ブラウザいっぱいに意味のない文字列が並んでしまいます。
この現象は「/*case 2 : ・・・・ break;*/」といった感じにcase 2の部分を
コメントアウトしてもなおらず、完全に削除するとなおります。
どういう事なんでしょうか??
どなたか思い当たる事がある方いらっしゃったら、教えてください。
ちなみにphp-5.1.4を使用してます。5.1.4のバグでしょうか??
0706nobodyさん
2006/05/06(土) 16:53:58ID:???0708nobodyさん
2006/05/06(土) 17:48:02ID:???てかPDO mysqlのドライバもロード出来なくなった。こっちはちゃんとインストールされているのに・・・
0709nobodyさん
2006/05/06(土) 19:37:27ID:o9+nMx/2中身よりも自分としては/*〜*/でコメントアウトしてもおかしな動き(意味不明な文字群を表示する)
ことに驚きを覚えてます。
なんでコメントアウトしてもそいつが影響するの?
そしてその部分を削除すると、なぜ正常に動くの?
こういったケースって、皆さん経験ありますか?
0710nobodyさん
2006/05/06(土) 19:40:03ID:???■ このスレッドは過去ログ倉庫に格納されています