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

【PHP】下らねぇ質問はここに書き込みやがれpart18

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/03/15(水) 19:18:21ID:yiOrS10N
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

本スレ【PHP】質問スレッドpart33【php】
http://pc8.2ch.net/test/read.cgi/php/1140027592/

前スレ【PHP】下らねぇ質問はここに書き込みやがれpart17
http://pc8.2ch.net/test/read.cgi/php/1140786348/

過去スレは>>2-3あたり
0237652006/03/20(月) 14:35:22ID:???
>>233
if (! preg_match('/^[0-9\/]+$/', $val)) {
print 'エラーっす';
}
0238237+2342006/03/20(月) 14:36:18ID:???
>>237
スマソ。間違えました。

>>236
よかとです。
02392382006/03/20(月) 14:38:13ID:???
>>238
さらに間違えました。文字クラスのなかも/はエスケープです。
02402392006/03/20(月) 14:42:51ID:???
>>239
あせりすぎました。デリミタが|なので/はエスケープ不要です。
今日だけで、何回間違えたのだろうか…?
0241nobodyさん2006/03/20(月) 14:44:03ID:???
if (preg_match('/[^\/0-9]+/', $val)) {
print 'エラーっす';
}

のほうが早くは無いか
0242nobodyさん2006/03/20(月) 14:45:10ID:???
激しく外出かもしれませんが教えてください。

一般的に、パラメータがn桁以下の数値かどうかを判断するのに、
正規表現で /^\d{1, n}$/
とするのと、
strlen + is_numeric
を使うのと、どちらがパフォーマンスよいでしょうか?

桁数は、極端に大きな桁数はなく、せいぜい6桁〜10桁程度です。
0243nobodyさん2006/03/20(月) 14:54:22ID:???
数値(整数)であるなら

if ($var < pow(10 , $n)) {
print 'ちいせーよ';
}

でいいのでは
0244nobodyさん2006/03/20(月) 14:55:08ID:???
ああ、数値かどうか分からないのか。すまん
0245nobodyさん2006/03/20(月) 15:16:31ID:???
>>242
strlen+is_numeric
0246nobodyさん2006/03/20(月) 15:42:59ID:CAF8GnmO
2005/12/12 の感じで日付が変数に格納されているのですが、これを年、月、日とarrayに格納するにはどうすればいいのでしょうか?

よろしくお願いします。
0247nobodyさん2006/03/20(月) 15:43:34ID:???
>>246
list($y, $m, $d) = explode("/", $date);
0248nobodyさん2006/03/20(月) 15:59:07ID:CAF8GnmO
>>247

ありがとうございます。
0249nobodyさん2006/03/20(月) 16:04:45ID:???
phpを使った他人のサイトでphpのソースを取得することはできますか?
0250nobodyさん2006/03/20(月) 16:08:25ID:???
>>249
頼めばできるかもしれません。
それから、ソースを無料で配布しているサイトもありますよ。
http://php.s3.to/
とか。
0251nobodyさん2006/03/20(月) 16:41:27ID:???
くだらない質問ですが
sql select結果を取得して、結果があれば処理をする場合
if(mysql_num_rows($result)>0)
{ $hoge=mysql_result($result,0,0); }
とするのと
if($list=mysql_fetch_array($result))
{ $hoge=$list[0]; }
とするのとどちらがよいと思われますか?
0252nobodyさん2006/03/20(月) 16:42:17ID:???
>>251
カラム1個しか使わないならresultかな
0253nobodyさん2006/03/20(月) 17:36:24ID:???
mailでヘッダを指定せずに
mail ( $to, $subject, $message)
でメールを送信した際に表示されるFromはどこで設定されているのでしょうか?
0254nobodyさん2006/03/20(月) 18:01:13ID:???
マニュアル

http://jp.php.net/manual/ja/function.mail.php
注意: メールを送信する際には、必ず From ヘッダが含まれていなければなりません。 additional_headers パラメータで指定するか、
あるいは php.ini にデフォルト値を指定します。

指定しなかった場合は、以下のようなエラーメッセージが返ります
Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing 。

http://jp.php.net/manual/ja/ref.mail.php#ini.sendmail-from
0255nobodyさん2006/03/20(月) 18:55:35ID:???
>>253
自分でやってみたら?
0256nobodyさん2006/03/20(月) 19:26:35ID:???
$htm = '<a><p><b>test</b></a></p>';
$htm = strip_tags($html, '<script><style><a><p>');
print htmlspecialchars($htm);

ってやるとまともに動かないのは仕様?
strip_tagsは使うなって言われてるしねよく
0257nobodyさん2006/03/20(月) 19:32:33ID:???
>>256
> strip_tagsは使うなって言われてるしねよく

どこでこんなこと言われてるの?
0258nobodyさん2006/03/20(月) 19:35:05ID:???
>>257
言われているかは定かではないけど、Manualの警告を見る限り
あまり使わないほうが無難かもしれない。
02592562006/03/20(月) 19:42:03ID:???
2chの質問スレでよく言われてる
くだ質じゃなかったかな・・、どっちも見てるんで混乱してるかも
02602422006/03/20(月) 19:55:54ID:???
>>245
やはり正規表現処理はそれなりにリソースを食うのですね。
0261nobodyさん2006/03/20(月) 19:57:30ID:???
マニュアルにもstrip_tagsに関しては

警告
現在、strip_tags()はHTMLの検証を行わないため、
不完全または壊れたタグにより予想以上に
多くのテキスト/データが削除される 可能性があります。

警告
この関数は、allowable_tagsで許可した全てのタグ の属性を修整しません。
これには、style お よび onmouseover属性が含まれており、
悪意のあ るユーザが他のユーザに見せるようなテキストを
投稿する際に危険な行 為を行う可能性があります。

と書かれてるからね。

>>250
そこを参考にするのは微妙。
02622612006/03/20(月) 19:59:57ID:???
>>258がマニュアルのことについて既に書いてた(ノ∀`)
0263nobodyさん2006/03/21(火) 01:38:19ID:???
本文の中のメールアドレスを自動リンク(mailto:[email protected])したいのですが、
やり方がちょっと分からなくて困っています
どなたかご教授下さい
0264nobodyさん2006/03/21(火) 01:40:16ID:???
エスパーさん、出番ですよ
0265nobodyさん2006/03/21(火) 01:59:31ID:???
>>263
こういうこと?
echo preg_replace("/[\\d\\w\\.\\-_]+@[\\d\\w\\-_\\.]+?\\.[\\w]{2,3}(\\.[\\w]{2,3})?/i","<a href=\"mailto:$0\">$0</a>",
"[email protected]ご教授じゃなくてご教示");
0266nobodyさん2006/03/21(火) 02:51:52ID:???
mailto:[A-Za-z0-9_.]+@[A-Za-z0-9_.]+

これじゃダメかな
0267nobodyさん2006/03/21(火) 04:03:31ID:???
質問です

もし文中にAと言う単語を含むならC、Bと言う単語を含むならD、と言った風に条件分岐させるにはどうすればいいのでしょうか

function test($var) {
if($var == a) {
return c;
}else{
0268切れちゃいましたすみません2006/03/21(火) 04:04:39ID:???
return d;
}
}

こんな感じにしてみたいんですが、if($var == a)この部分をどう表現すれば良いのかわかりません
0269nobodyさん2006/03/21(火) 04:08:34ID:???
見ただけでウイルスに感染してしまうサイトを携帯で見てしまった場合、どうやってウイルス駆除するんでしょうか?
0270nobodyさん2006/03/21(火) 04:11:16ID:0DB4pSWb
2005/3/4 や 2006/11/23 のように日付が変数に格納されているのですが、これを 20050304 や 20061124 のように数値化するにはどうすればいいのでしょうか?

よろしくお願いします。

0271nobodyさん2006/03/21(火) 04:56:08ID:???
>>267
$q = preg_quote($A);
if (preg_match("/^$q\$|^$q\\W|\\W$q\$|\\W$q\\W/i", $var))
// もっといいやり方あるかも・・・

>>270
(int) date('Ymd', strtotime($str));
0272nobodyさん2006/03/21(火) 04:56:27ID:???
>>267
よし、正規表現を勉強してきなさい。
難しくないからさ。簡単にで良いから。
ちなみにそのif分では、$varの中身がaかどうか、になってしまうよ。

>>269
よし!スレタイを百回読み直して来い!

>>270
俺ならsplitして文字列結合しちゃう。
0273nobodyさん2006/03/21(火) 05:19:42ID:???
>>270
>2005/3/4 や 2006/11/23
1桁があるなら俺は>>271だな
0274nobodyさん2006/03/21(火) 08:37:01ID:FCNG8e7g
MySQLを使えるようになろうと思っているのですが
レンタルサーバーでの利用のため、少し利用に制限があります

ID名でデータベース名が与えられているのですが、実際にこの中に数値云々をいれて
それを閲覧するにはどのようにすればいいんでしょうか?
また、テーブルって複数の独立したものをいくつも作れるんでしょうか?
いったん作ったものって消えないんですか?どうやって確認すれば?

疑問がいっぱいです。webで調べてもあまり納得のいく説明がなかったもので・・・・
0275nobodyさん2006/03/21(火) 08:49:24ID:???
君はまずDBスレあたりで勉強しなさい
ここはPHPスレです
0276nobodyさん2006/03/21(火) 08:53:09ID:FCNG8e7g
phpでユーザーリスト管理しようとおもってたのですが・・・・残念です
0277nobodyさん2006/03/21(火) 09:19:13ID:???
>>276
見てないとは思うけど
275はphp以前の問題だと言いたいんだと
まず、MySQLやSQLを知ってからphpをやれと。一度になんでもかんでも理解できるのか?
まわり道のようで一直線。
0278nobodyさん2006/03/21(火) 09:40:16ID:???
phpじゃなくてDBで管理すべき。
何でもエクセルで処理しようとしてるようなもの。適材適所で使い分けるべき。
0279nobodyさん2006/03/21(火) 09:44:24ID:???
>>278
は流れが分かって無いような気がする・・
0280nobodyさん2006/03/21(火) 10:21:01ID:???
>>228
BOMがつく
0281nobodyさん2006/03/21(火) 10:32:31ID:???
>>274
>疑問がいっぱいです。webで調べてもあまり納得のいく説明がなかったもので・・・・
PHPとMySQLって単語の両方が書名に入ってる本を数冊本屋で買って来い。
0282nobodyさん2006/03/21(火) 11:33:21ID:???
数冊も買わすのかw
0283nobodyさん2006/03/21(火) 13:36:26ID:???
$aにAが含まれていたらの場合のif分はどうなるのでしょうか。

if ($a == "A") {
echo "Aが含まれています。";
}

条件の設定方法がよくわかりません。
教えてください。
0284nobodyさん2006/03/21(火) 13:53:46ID:FDfwTN3i
>>283
if(ereg("A", $a))
0285nobodyさん2006/03/21(火) 14:00:15ID:???
>>283
それは、$aが"A"に一致する場合の条件式。
やりたい事は「文字列の中に含まれているかどうか」なので、
マニュアルの関数の分類で、文字列に対するものを探してみる。
ttp://www.php.net/manual/ja/

そのまんま、「Strings(文字列関数)」って分類がある。
それをクリックすると文字列に関係する関数の一覧表が表示される。
で、説明文を読みながら使えそうなものが無いか探していくわけだ。

・strcmp -- バイナリでも使える文字列比較 、ってのが使えそうだなと思ったら、
さらにクリックして詳しい内容を見ていく。
するってーと、$a == "A"と同じように一致するかどうかを調べる関数だと分かる。使エネ。

・stripos -- 大文字小文字を区別せずに文字列が最初に現れる位置を探す
今度はこいつが目に付く。読んでみると、falseじゃなきゃ指定した文字が含まれると判断してよさそうだ。
更に他の関数にも使えそうなものはあるが、大体こういう感じで探していくことになる。
0286nobodyさん2006/03/21(火) 14:01:54ID:???
>>284
ありがとうございます。できました。
>>285
なるほど。マニュアルの使い方も大事ですね…。
0287nobodyさん2006/03/21(火) 15:43:06ID:???
一つの関数で二つの値を返す場合って、

function A {
return a;
return b;
}

で良いのでしょうか?

これでやってみたんですが出来なくて……
0288nobodyさん2006/03/21(火) 15:50:28ID:???
>>287
二つも返せません
0289nobodyさん2006/03/21(火) 15:55:00ID:???
>>287
マニュアルのreturnのページを見ると、
> 関数内で呼び出されると、return()文は即座にその関数の実行を停止し、引数を関数の値として返します
とある。読んだ通りだな。

で、複数の値を返す場合はどうすりゃいいのかってーと、
・配列を返す
・リファレンスを返す
つーやり方がある。
0290nobodyさん2006/03/21(火) 15:57:27ID:???
>>288
やっぱり無理なんですか……
文中のURIとメアドを抜き出して自動リンクする関数を作りたかったのですが、
個々を作ることが出来てもそれを一つに纏めることが出来なくて困っているんです

function autolink($A) {
return preg_replace(URIの自動リンク);
return preg_replace(メアドの自動リンク);
}

みたいに出来ないかなーと思っていたのですが、
もしこうする場合はどうすれば良いのでしょうか?
0291nobodyさん2006/03/21(火) 16:11:00ID:???
$DATA[1]のなかのALT="aあ"をpreg_replaceで空白に変換しようとしたら変換できません。
preg_replace("/ALT=\"([^^]*)\"/","",$DATA[1]);
これでやっても無理だったんですがどこが間違っているでしょうか!?
0292nobodyさん2006/03/21(火) 16:11:40ID:???
([^^]*)
0293nobodyさん2006/03/21(火) 16:15:21ID:???
何その顔、ふざけてるの?
0294nobodyさん2006/03/21(火) 16:18:20ID:???
自分で分かりやすく^以外をヒットにしようと思いまして。
0295nobodyさん2006/03/21(火) 16:18:42ID:???
>>293
(@�u@ .:;)ノシ
0296nobodyさん2006/03/21(火) 16:28:04ID:???
'/ALT=\"[^^]*?\"/',' '
ALT="aあ"なのかALT="任意の文字"なのかわからんがな。
0297nobodyさん2006/03/21(火) 16:30:21ID:???
>>290
preg_replaceは配列で正規表現を使える
マニュアル参照しる
0298nobodyさん2006/03/21(火) 16:38:56ID:???
>>296
アルファベットと漢字が混じってるんです。
漢字が入るとpreg_replaceで置換できないとかはあるのでしょうか!?
0299nobodyさん2006/03/21(火) 16:45:57ID:???
PHPで配布しているRSSを表示させる事は出来るのでしょうか?
出来たらやり方を教えて欲しいです。(検索語句など)
0300nobodyさん2006/03/21(火) 17:30:39ID:???
日本語でおk
0301nobodyさん2006/03/21(火) 17:33:30ID:???
>>297
配列出来たんですか、知りませんでした
おかげで何とかやりたいことが出来るようになりました
ありがとうございました
0302nobodyさん2006/03/21(火) 18:11:13ID:???
>>299
ごめん。日本語として解釈できません。
PHPで配布しているRSSってなんだ?
0303nobodyさん2006/03/21(火) 18:29:51ID:???
>>299
http://pear.php.net/manual/ja/package.xml.xml-rss.php
なんかPEAR重いな…
0304nobodyさん2006/03/21(火) 19:29:59ID:???
>302
特定(じゃないかもしれないが)のサイトで配信している
RSSを読み込んで出力するものを作りたいって事じゃないか?
0305nobodyさん2006/03/22(水) 00:35:33ID:E+eV7vwA
>>299
つ
http://pear.php.net/manual/en/package.xml.xml-rss.example.php
0306nobodyさん2006/03/22(水) 00:47:21ID:w0U7WoXt
MySQLを利用する際にPHPからテーブルを作成することってできるんですか?
0307nobodyさん2006/03/22(水) 01:12:41ID:???
>306
全ての SQL は mysql_query で出来る
0308nobodyさん2006/03/22(水) 01:59:18ID:???
>>306 == >>274
と粘着してみる

やっと具体的な質問が出来たなGJ
PHPからMySQLのテーブルを作成できるし、操作出来る。
0309nobodyさん2006/03/22(水) 04:52:32ID:???
とても↓のような感じのシンプルな掲示板を作ろうと思っています。

---
21.名前:管理人
こちらこそよろしくお願いします

20.名前:ななし
はじめまして。よろしくお願いします
---

DBでなくテキスト管理の場合において、記事の投稿・表示に関してもっとも効率が良い
と思われる処理の流れ(ごく一般的なものでも構いません)はどのようなものでしょうか?
ソースである必要はないので、処理の流れを書いていただけませんか?
日本語が下手なのでうまく伝わらないかもしれませんが、よろしくお願いしたします。m(_ _)m
0310nobodyさん2006/03/22(水) 04:58:39ID:???
すいません、>>290で質問した者で、>>297のおかげで解決したんですが、
何故かまた出来なくなってしまいました。

>>301の時点では確かに出来ていて確認したのですが、
今になってもう一度確認してみるとなんか変なことになってしまっているんです。

function autolink($url){
return preg_replace(
array(
"/((https?|ftp|news):\/\/|www\.)([\w\.\~\-\/\?\&\+\=\;\@\%\:\#\%]+)/e",
"/[\\d\\w\\.\\-_]+@[\\d\\w\\-_\\.]+?\\.[\\w]{2,3}(\\.[\\w]{2,3})?/i"
),
array(
"'<a href=\"'.('$1' === 'www.' ? 'http://' : '').'$1$3\" title=\"$1$3\">$1$3</a>'",
"<a href=\"mailto:$0\" title=\"send a mail to $0\">$0</a>"
),
"$url"
);
}

作ってみたのはこんなのなんですが、何故だか$1$3'", "$0" ), "$url" ); } ?>と表示されて、$0の部分にアンカー張られちゃってます。
何かを弄った覚えは全く無いのですが、何か問題があるのでしょうか?
ちなみにこの後にもいくつか試しに書いてみたんですが、全て何も処理されません……。
0311nobodyさん2006/03/22(水) 05:30:49ID:???
>>310
なんていうか凄い正規表現ですね・・・。
0312nobodyさん2006/03/22(水) 05:48:00ID:uySCvhL9
>>310
$1$3'", "$0" ), "$url" ); } ?>と表示されて、$0の部分にアンカー張られちゃってます。

ってスクリプトの一部が表示されているということ?
$0の部分にアンカー張られちゃってます。というのがよくわからん
一部分だけを説明すると人に伝わらない場合が多い。てか俺にはわからんです。
0313nobodyさん2006/03/22(水) 06:37:28ID:???
>>312
そうです、スクリプトの一部がそのまま表示されてしまっているんです。
$0の部分は<a href="mailto:$0" title="send a mail to $0">$0</a>となっています。
0314nobodyさん2006/03/22(水) 06:42:56ID:???
で、それはどういう文字列を渡した時にそんな風になったの?
0315nobodyさん2006/03/22(水) 06:50:12ID:???
チェックするために適当なURLとメールアドレスをやってみました。
die(autolink("http://www.google.comあああああああああ[email protected]"));
こんな感じです。
0316nobodyさん2006/03/22(水) 07:04:12ID:???
>>315

310の関数の上に
die(autolink("http://www.google.comあああああああああ[email protected]"));

結果
<a href="http://www.google.com" title="http://www.google.com">http://www.google.
com</a>あああああああああ<a href="mailto:[email protected]" title="send a mail
to [email protected]">[email protected]</a>

問題は何?
0317nobodyさん2006/03/22(水) 07:23:06ID:???
>>316
いや、その何が問題なのかが解らなくて。
>>301でやったときには正常に何も問題はなかったのですが、
>>310のときにもう一度開いてみたらスクリプトがそのまま表示されていたとしか。
0318nobodyさん2006/03/22(水) 07:30:05ID:???
いやだからさ
310の関数の上にdieをコピペしてるわけだよ。
でCLIだけど走らせたらという結果なわけ。
316の結果ならいいわけでしょ?

一度単純化して自分でやってみれ。↑のように
多分本番用のスクリプトは他に色々書いてあるだろうけど、とりあえず
何が問題かを「切り分ける」ために単純化して確認するのは定石だと思うけどな。
0319nobodyさん2006/03/22(水) 07:38:21ID:???
いや、書いてあるスクリプトは>>310と>>315だけです。単なる練習用としてなので。
配列をなくしてシンプルにURLの自動リンクだけでやってみたりもしたんですが無理でした。
0320nobodyさん2006/03/22(水) 07:49:19ID:???
とりあえずさ、だめとか無理とか言う前に以下コピペ、なんかファイル作って
$php hoge.php
やってみれ。

<?php
die(autolink("http://www.google.comあああああああああ[email protected]"));
function autolink($url){
return preg_replace(
array(
"/((https?|ftp|news):\/\/|www\.)([\w\.\~\-\/\?\&\+\=\;\@\%\:\#\%]+)/e",
"/[\\d\\w\\.\\-_]+@[\\d\\w\\-_\\.]+?\\.[\\w]{2,3}(\\.[\\w]{2,3})?/i"
),
array(
"'<a href=\"'.('$1' === 'www.' ? 'http://' : '').'$1$3\" title=\"$1$3\">$1$3</a>'",
"<a href=\"mailto:$0\" title=\"send a mail to $0\">$0</a>"
),
"$url"
);
}
?>

俺はこれで316の結果が出てるが?
デバッグの方法というかアイデアも考えてバグを無くすということを含めて「プログラムを作る」ってことだぞ
0321nobodyさん2006/03/22(水) 07:54:13ID:???
>>320
新しいファイル作ってコピペしてみましたが、

結果:
$1$3'", "$0" ), "$url" ); } ?>

>>310と全く同じです……。
0322nobodyさん2006/03/22(水) 08:07:10ID:???
まさか結果は「ブラウザの表示」じゃねえだろうな?

まぁ俺は優しいから怒らないが、ブラウザの表示をコピーしてるなら
ブラウザでソースを見てみろ。
0323nobodyさん2006/03/22(水) 08:14:38ID:???
ソースを見てみましたが、スクリプトがそのまま表示されてました。
0324nobodyさん2006/03/22(水) 08:22:14ID:???
LinuxでPHPとpostfixインストールしました。
PHP.iniの設定で、sendmailのパスは記入しました。
気になったのですが
; For Win32 only.
SMTP = localhost ←
smtp_port = 25   ←
             の2行はコメントアウトしておけばよいのでしょうか?

0325nobodyさん2006/03/22(水) 08:37:14ID:???
>>324
添付の基になるiniファイルでは最初からコメントアウトされてない?
Windows以外では意味がない値なので、別にそのままでも良いけど
不要なものはコメントアウトしとくのが正しい。
03263242006/03/22(水) 08:43:13ID:???
>>325
sendmail_from = [email protected]
の方はコメントアウトしてあったのですが
先の2行については何故かコメントアウトされてませんでした。

どうもありがとうございました、すっきりしました。
0327nobodyさん2006/03/22(水) 09:15:02ID:???
>>321
あああ とかの2byteを止めて AAA とかで試してみ
0328nobodyさん2006/03/22(水) 09:26:57ID:???
いいいいいいぃ
0329nobodyさん2006/03/22(水) 11:32:48ID:???
>>280
爆弾つきか…
0330nobodyさん2006/03/22(水) 11:40:53ID:???
>>323
phpが動いてないだけじゃんw
0331nobodyさん2006/03/22(水) 12:20:10ID:???
最後に
?>
がくっ付いているのを見た時点で気付くべきだったか
0332nobodyさん2006/03/22(水) 13:29:16ID:???
phpが動いてないって・・
0333nobodyさん2006/03/22(水) 15:20:34ID:???
おまいらエスパーだな。
漏れにはさっぱりだよ。
0334nobodyさん2006/03/22(水) 15:32:28ID:???
ttp://www.nintendo-inside.jp/review/

こういうスクリプトどっか配ってねーかな?ねーよな。
やっぱ自分で書かないとダメか。マンドクセ('A`)・・・
0335nobodyさん2006/03/22(水) 15:44:27ID:???
>>334
独り言はチラシの裏にでも書いてろ
03363342006/03/22(水) 15:46:11ID:???
>>335
よし、じゃあ言い直すぞ!

質問させて下さい。
ttp://www.nintendo-inside.jp/review/
上記サイトのような評価スクリプトに似たようなものを
どこか配布してないですか?教えてください!

どうだ、これでいいだろう。
■ このスレッドは過去ログ倉庫に格納されています