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

【PHP】下らねぇ質問はID出して書き込みやがれ 82

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/03/09(月) 02:14:28ID:HyrthkeE
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 81
http://pc11.2ch.net/test/read.cgi/php/1234958956/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0200nobodyさん2009/03/14(土) 20:02:04ID:???
>>199
>>190に関しては?
0201nobodyさん2009/03/14(土) 20:37:03ID:qjtwBjoL
キーと値の組み合わせとしてではなく、
array('a','b','c')
のように値の羅列の形式で代入された配列の正式名称って何ですか?
0202nobodyさん2009/03/14(土) 20:44:32ID:???
>>201
そのまんま配列

キーと組み合わせたのは連想配列
0203nobodyさん2009/03/14(土) 20:48:34ID:???
>>199
file_get_contentsに設定するパラメータは以下だけです

filename
flags flags
context
offset
maxlen

よって君は何か勘違いをしている
マニュアルをよく読みましょう
0204nobodyさん2009/03/14(土) 21:06:31ID:???
君が勘違いしている
0205nobodyさん2009/03/14(土) 21:10:32ID:???
>199
111.phpのエンコードが事前に分かっているなら後者の書き方のほうが望ましい。
前者だと、間違ったエンコード判定がされた場合文字化けの原因になるしな。

Shift_JISからShift_JISに変換しているわけで、ヘンっちゃあヘン、というか無駄だな。
状況によっては100%無意味というわけでもないが…
echo file_get_contents("111.php");
とほぼ同じ意味だ、というのは理解してるのかな。
0206nobodyさん2009/03/14(土) 21:36:24ID:???
$hoge = "hoge";
var_dump($hoge);

echo "<br>";

function hogehoge(){
$hogehoge = "hogehoge";
echo $hogehoge;
}
var_dump(hogehoge());

echo "<br>";

function hogehogehoge(){
return "hogehogehoge";
}
var_dump(hogehogehoge());

の結果が、上から順に

string(4) "hoge"
hogehogeNULL
string(12) "hogehogehoge"

このNULLってどうしてでてくるんですか?><
0207nobodyさん2009/03/14(土) 21:41:55ID:???
値戻してないからだろ
0208nobodyさん2009/03/14(土) 21:44:54ID:???
>206
$a = hogehoge();
$b = hogehogehoge();

として、$aと$bの中身をvar_dumpで見てみろ。
0209nobodyさん2009/03/14(土) 22:01:33ID:fYsVSce/
>>207
hogehoge()の中にreturnをいれて、
function hogehoge(){
$hogehoge = "hogehoge";
echo $hogehoge;
return "ho";
}
にしたらNULLなくなりました><
ありがとうございました
>>208
こうでしょうか><
$a = hogehoge();
$b = hogehogehoge();
var_dump($a);
echo "<br>";
var_dump($b);

結果、
hogehogeNULL
string(12) "hogehogehoge"
になりました><
0210nobodyさん2009/03/14(土) 22:20:14ID:S24jNTMx
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>

<form method="post" action="<?php $_SERVER["PHP_SELF"]; ?>">
<input type="checkbox" name="bbb[]" value="かきくけこ">
あいうえお<br>


<input type="submit" value="選択">
</form>

<?PHP
if(isset($_POST['bbb'])){

foreach ($_POST['bbb'] as $a){
print ($a);
print "<br>";
}
}
?>

</body>
</html>

これで、ローカルで試すと問題なく動くのですが、
レンタルサーバーにアップロードして試すと
文字化けになります。なんででしょうか?
0211nobodyさん2009/03/14(土) 22:33:52ID:???
>>210
自己レス
サーバーのphp.ini の
mbstring.internal_encoding = UTF-8を設定して
上書きしてファイルを再読み込みしてリトライしたらできた。

サーバーのデフォルトではEUCになってた。氏ね。
0212質問させて下さい2009/03/14(土) 22:37:16ID:hOLVrRGN
>>203
そういうことについては全然勉強足りていないので頑張って覚えてみます。
アドバイス有り難うございます。

>>205
詳しい解説有り難うございます。
おかげでよく理解出来ました!
感謝しております。


>>200
意味がわかりませんでした。
失礼致しました。
0213nobodyさん2009/03/14(土) 23:02:29ID:???
>>210
php_selfは推奨されてないのに使うバカ発見
0214nobodyさん2009/03/14(土) 23:43:47ID:???
>>210
マルチ乙
0215nobodyさん2009/03/14(土) 23:52:54ID:da46lvzd
トラックバックの送受信の処理を書こうと思うのですが
もし既存のライブラリがございましたら教えてください
0216nobodyさん2009/03/14(土) 23:54:59ID:???
>>215
google
0217nobodyさん2009/03/14(土) 23:56:50ID:???
>>216
きも
0218nobodyさん2009/03/15(日) 00:05:25ID:yySd7NKe
cliでpg_connectを実行したらSegmentation faultが出るんだけど。

PHP 5.2.6-2ubuntu4.1 with Suhosin-Patch 0.9.6.2 (cli)

<?php
$DB = pg_connect("host=$DbIp dbname=$DbName user=$DbUser password=$DbPass");
?>

これはうちの環境の問題なのか、誰か教えて欲しい。
0219nobodyさん2009/03/15(日) 00:27:37ID:???
>>218
そりゃ変数に何も格納されてないなら無理だろ
0220nobodyさん2009/03/15(日) 06:06:20ID:???
PHP5.3使ってるんですが、メモリ不足を例外処理みたく捕まえることってできますか?
方法をご存じの方がいらっしゃいましたら教えてください。
0221nobodyさん2009/03/15(日) 06:06:51ID:+CIxhGml
>>220 sageちゃいました。すいません。
0222nobodyさん2009/03/15(日) 06:23:33ID:???
残念ながらそういうのは無い
02232202009/03/15(日) 06:27:45ID:???
>>222
やっぱそうですか。
踏ん切りがつきました。ありがとう。
0224nobodyさん2009/03/15(日) 08:14:23ID:yySd7NKe
>>219
書き方が悪かった。
実際の変数部分には正しい値が入る。

ちなみに接続も成功するしSQLの結果もかえってくる。
apacheで実行した時は何も問題ない。

でもcliの時だけfaultが最後に出るから悩んでる。

0225nobodyさん2009/03/15(日) 08:41:14ID:???
>>224
使ってるphp.iniが違うとかはないの?
それで落ちるかといえば疑問だけど。

とりあえずphpinfo() で使ってるphp.ini確認してみたら。
あとバージョンが違うライブラリにパスが通ってるとか。
0226nobodyさん2009/03/15(日) 08:44:40ID:???
実行ユーザーが違うので
・ログに書けないよエラー
・そのエラーログを書こうとしてエラー
・そのエラーログのエラーログを書こうとしてエラー
・その・・・・

とか。
0227nobodyさん2009/03/15(日) 09:24:05ID:???
http://pc11.2ch.net/test/read.cgi/tech/1232712334/350-
前の子が来てる
0228nobodyさん2009/03/15(日) 09:58:53ID:qN1+xeFs
foreachの中から、そのループが1回目か/最後か等を調べるいい方法を
教えてください
0229nobodyさん2009/03/15(日) 10:10:56ID:???
>>228
いい方法かはわからないけど、
$i = 0;
foreach(){
$i++;
}
みたいなやり方はだめなのかな

count()を使えば配列の要素の数も得られるから、それで最後かどうかもわかるのでは
0230nobodyさん2009/03/15(日) 10:44:14ID:???
>>225
ubuntuなんで、php.iniは別なんだけど設定は同じ。
ライブラリ系もまったく同じ。

今思ったけど、linux板で聞いたほうがいいのかも。
ちょっと移動してきます。

ありがとう。
0231nobodyさん2009/03/15(日) 11:14:01ID:???
>228
無い。
ループの何巡目かが処理に影響するような場合はforを使え。
0232nobodyさん2009/03/15(日) 11:18:55ID:Ok7zsTbr
セッションIDって基本的にはクッキーに保存されるじゃん

じゃあ、クッキーが無い時代はどうやってたの?
0233nobodyさん2009/03/15(日) 11:23:01ID:???
>>231
プログラミングに「ない」を考えるあなたの考えにナイワ
0234nobodyさん2009/03/15(日) 11:35:16ID:???
>>232
パン。
0235nobodyさん2009/03/15(日) 11:38:48ID:???
>>232
原初、最初にクッキーだけがあった
したがってクッキーのない時代などない
0236nobodyさん2009/03/15(日) 11:47:29ID:???
クッキー使えなくても埋め込みがある
どっちも平文で送信されるから似たようなもんだ
0237nobodyさん2009/03/15(日) 12:18:21ID:???
>>232
飛脚→伝書鳩→クッキー
0238nobodyさん2009/03/15(日) 14:33:41ID:???
本来、1つのクラスは、1つのファイルに分けるべきみたいなのを
よくみるんだけど、数行程度でも?
02392382009/03/15(日) 14:40:11ID:???
あ、そうか
エラー見つけやすいから分けるのか
とりあえず小分けにしておくわ
0240nobodyさん2009/03/15(日) 14:45:54ID:L+gdJUIE
>>238
数行程度のクラスがわんさかあってもウザイと思うが
0241nobodyさん2009/03/15(日) 14:46:54ID:L+gdJUIE
>>235
クッキーの無い時代もあったんじゃね?
それよか、フォームすらなかった時代もあったんじゃね?
ネットスケープ社が頑張って実装したんじゃね?
0242nobodyさん2009/03/15(日) 16:01:31ID:???
>>241
おまえ大丈夫?
0243nobodyさん2009/03/15(日) 16:35:04ID:L+gdJUIE
>>242
お前の方が大丈夫か?最初のHTMLは画像すら使えなかったって知ってるか?
0244nobodyさん2009/03/15(日) 18:44:14ID:???
これ以上ない「ゆとり」と発言したくなるシチュ
0245nobodyさん2009/03/15(日) 18:46:33ID:tXlRktlT
複数行入力できるtextareaを使って入力してもらい
それをmysqlのtext型としてinsertしました

それをselectクエリで取り出して表示してみた所、改行されずに
表示されてしまうんですが、入力の時と同じように表示させる
ためにはどうすればいいんですか?
0246nobodyさん2009/03/15(日) 19:00:19ID:???
>>245
改行するには何がいるか?
0247nobodyさん2009/03/15(日) 19:05:30ID:???
昔はクックーもフォームも使えなかったことを知らないとは
0248nobodyさん2009/03/15(日) 19:08:08ID:???
>>245
nl2br
0249nobodyさん2009/03/15(日) 19:25:38ID:tXlRktlT
>>246
>>248

できました! こんな便利なものがあるなんて知らなかったです
まだまだ勉強不足ですね がんばります

ありがとうございました!
0250nobodyさん2009/03/15(日) 19:29:36ID:???
PHPを使うにはサーバをレンタルすると思いますが、
無料のジオシティーズでもPHPが使えるみたいです。
金を払ってサーバをレンタルするとどういういいことがあるのですか?

ttp://help.yahoo.co.jp/help/jp/geo/perl/perl-02.html
0251nobodyさん2009/03/15(日) 19:32:02ID:???
>>249
独習PHPに載ってるよ
0252nobodyさん2009/03/15(日) 19:33:13ID:???
>>250
(1)
MySQLでPDOが使える(無料のところはPDO使えないことが多い)

(2)
強制挿入される広告が消える

(3)
場合によっては有料のところでは独自ドメインが使えるかも
(無料でも一部使えるところはある)
0253nobodyさん2009/03/15(日) 19:34:26ID:???
(4)
sendomailが使える
(無料のところではsendmailは無効化されていることがおおい)
sendmailが使えないとメールが送れない。

PHPのmail関数は、サーバーのsendmailに仕事を
丸投げしているだけなので、sendmailが動いていないと
何も起きない
0254nobodyさん2009/03/15(日) 19:36:53ID:???
>>250
使うってどういう状況で?
0255nobodyさん2009/03/15(日) 19:40:38ID:???
DBやメールなんかでいろいろ制限があるんですね。
ありがとうございました。
0256nobodyさん2009/03/15(日) 19:44:18ID:???
よく見たら、CGIを利用するには有料じゃないとダメですね。
0257nobodyさん2009/03/15(日) 19:50:20ID:???
無料/安価なサーバーはだいたい重い。
少数のサーバーに人を大量に詰め込むからな。
(そうしないと初期投資を回収できないので仕方ないが)
0258nobodyさん2009/03/15(日) 19:50:22ID:???
ifの代わりにswitchを使ってやろうとしたのですが、
<?php
$i = 3;
switch($i){
case 0:
case 1:
case 2:
case 3:
case 4:
echo "iは0〜4";
break;

default:
echo "iは不明";
break;
}
?>

これがもし、case 0:〜case 4:の部分で、
case 0:〜case 100:までを判断したいとき
どういう風に記述すればいいのでしょうか。
0259nobodyさん2009/03/15(日) 19:53:05ID:???
100行書くしかないのでは?
0260nobodyさん2009/03/15(日) 19:53:58ID:???
横に繋げれば1行で済むのでは?
0261nobodyさん2009/03/15(日) 20:19:50ID:???
なんでifにしないのか理解に苦しむ。
0262nobodyさん2009/03/15(日) 20:25:12ID:???
iが0〜100までかを調べたいなら
if ($i >= 0 && $i <= 100) {
 echo "iは0〜100";
} else {
 echo "iは不明";
}
でいいのでは?
0263nobodyさん2009/03/15(日) 20:30:46ID:???
>>251
宣伝乙
0264nobodyさん2009/03/15(日) 20:33:50ID:???
>>258
switchでcaseが大量になる場合は配列をうまく利用することをおすすめする

function func1() {
}




$case = array(func1(),func2(),func3(),・・・・・func999),


$case[0];
0265nobodyさん2009/03/15(日) 21:34:38ID:???
>>264
www
0266nobodyさん2009/03/15(日) 22:37:58ID:???
>>265
shosinsha otu
02672612009/03/15(日) 22:54:26ID:???
>264
せめて
$case = array('func1', 'func2', 'func3');
call_user_func($case[0]);   // $case[0]();でも多分動く
にしとけ。

とりあえずそのコードは実行効率、可読性、保守性などあらゆる観点で最低だ。
後者2つについてはこのコードも大差ないが。
0268nobodyさん2009/03/16(月) 01:35:07ID:???
ふと思ったんだけど、例えば見栄え良く
改行いっぱい使って、

$hoge    = "hoge1"
         . "hoge2"
         . "hoge3"
         ;

こうしたのと、単に
$hoge="hoge1hoge2hoge3";
ってしたのとでは、
上のような改行いっぱい使った場合のが
積み重なってくると、改行使ってないものよりも
読み込みが遅くなる?
改行やスペースは無視になるとはきくけどなんか不安なのです。
0269nobodyさん2009/03/16(月) 02:37:08ID:???
>268
文字列の結合の分遅くなるな、理論上は。
改行も、確かに理屈の上では遅くなる。人間に知覚できる差じゃないけどな。
仮に10000行空行があったとしても、目に見える応答速度差は出ない。
1MB分改行があっても気づかないと思う。

つうか、お前は、ペーパー代を惜しんでウンコした後ケツを拭かなかったりするのか?
ゴミみたいな高速化と可読性を天秤にかけるなら、どう考えても可読性を優先すべきだ。
0270nobodyさん2009/03/16(月) 06:04:33ID:???
javaだと文字列リテラル同士の結合はコンパイル時にオプティマイズされて
結合された文字列になるんだっけか。

スクリプト言語で拘ってもしょうがないとは思うが、気分的にはやってほしいところではあるな。
APCとかのキャッシュ環境なら差がでるかも知れんし。
0271nobodyさん2009/03/16(月) 11:58:48ID:???
「PHPでOOPで書く場合の、helloが出てくるまでの長い一日」

(1)さーって、、、まんず、helloって出すわけだから、
print "hello";
だろ、、、これはまず100%確実、、、

(2)そんで、クラスの宣言せんといかんな、、、

class {


}

、、、っと、、、
あ、、、クラス名、考えないといかんな、、、
はじめてのだから、firstでいいか?
class first {


}
0272nobodyさん2009/03/16(月) 12:00:24ID:???
(3)
そんで、さっきの
print "hello";
を、メソッドの中に入れないといかんのだよな、、、

あ!メソッド名も考えないといかんのだよな、、、
helloを出すメソッドだから、helloでいいか?


function hello(){
print "hello";
}
0273nobodyさん2009/03/16(月) 12:01:11ID:???
(4)
よしよし、、、作業は順調だな、、、
これで、このメソッドを、さっき作った
クラスの中に、放り込めばいいのだよな、、、

class first{


function hello(){
print "hello";
}
}
0274nobodyさん2009/03/16(月) 12:02:05ID:???
(5)

これでクラスは完成、、っと、、、

次は、このクラスをnewして、
オブジェクトに代入せなあかんのだよな、、、

$obj=new first();
0275nobodyさん2009/03/16(月) 12:03:00ID:???
(6)
よしよし、、、

これでインスタンスができたから、
このインスタンスから、->で、クラス内の
メソッドにアクセスすればええんだよな、、、

print $obj->hello();
0276nobodyさん2009/03/16(月) 12:03:51ID:???
>>274
括弧ついてるよ初心者クン
0277nobodyさん2009/03/16(月) 12:05:51ID:???
(7)
<?php
class first{


function hello(){
print "hello";
}
}

$obj=new first();
print $obj->hello();
?>

完成、、、と、、、。
カンタンに説明すると、
firstというクラスを定義しhello()というメソッドを定義し
そのメソッドの中でhelloを出力する命令を書きnewでfirstクラスの
インスタンスを作成しオブジェクト変数に代入しそのできてきた
インスタンスからhello()メソッドにアクセスして最終的にhelloを
画面に出すことに成功しました。
0278nobodyさん2009/03/16(月) 12:06:40ID:???
>>276
どちらでも実行できるんだけど、なんか問題あるなら
それを解説したページをプリーズ
0279nobodyさん2009/03/16(月) 12:08:53ID:???
ちなみに手続型でhelloを出すソースは以下の通り

<?php
print "hello";
?>
0280nobodyさん2009/03/16(月) 12:10:12ID:???
>>276
お前が初心者なのは分かった
0281nobodyさん2009/03/16(月) 12:19:32ID:???
>>276
普通はつけます
0282nobodyさん2009/03/16(月) 12:21:35ID:???
クラス使えばOOPってわけじゃないべ。
0283nobodyさん2009/03/16(月) 12:25:30ID:???
つか全然OOPじゃないわな
0284nobodyさん2009/03/16(月) 12:29:26ID:???
>>282
ものの考え方・概念のことだから本質的にはそうだね
ただOOPの核となる継承やらカプセル化をする為にはクラスを使わないといけない

helloを出力するだけにわざわざクラス使うのはPHPではただの冗長
0285nobodyさん2009/03/16(月) 13:00:26ID:???
hello出力するだけのただの形ではあるから参考にならないなあ
OOP勉強してる人いないの?
0286nobodyさん2009/03/16(月) 13:10:52ID:???
>>285
一応、スレはある。
が、もう死にかけの体。

PHPでOOP
ttp://pc11.2ch.net/test/read.cgi/php/1172205352/l50
0287nobodyさん2009/03/16(月) 13:11:01ID:???
>>279
おお、さすが最強PHPw。
ハーディ・ラマヌジャン数を出力するプログラムは、
Cで書いても、実行に数十秒かかる。
perlやpythonに至っては数分以上かかる。
だが、PHPなら、一瞬。むしろ、計算する必要すらない。
<?php
echo "1729";
?>


もちろん、パクリネタだ。
0288nobodyさん2009/03/16(月) 13:25:45ID:???
>>285
本気で勉強したいならJavaでやったほうがいいって散々言われてるだろ
オブジェクト指向という考え方を理解するためだけなら
わざわざPHPでやる必要はない
OOPに関するドキュメントの多いJavaでやったほうがいい
PHPでOOPなんてJavaやC#なんかをやってるやつの為にあると思っていい
0289nobodyさん2009/03/16(月) 15:26:16ID:zNDXWAna
くだらない質問ですがお願いします。
($a < $b) ? $key = $a : $key = $b;
これの意味がちょっとわからないのですがif文で表すことってできますか?
0290nobodyさん2009/03/16(月) 15:33:02ID:???
if ($a < $b) {
 $key = $a;
} else {
 $key = $b;
}
0291nobodyさん2009/03/16(月) 15:33:12ID:???
$key= ($a < $b) ? $a : $b;
普通はこう書く

if ($a < $b) $key= $a;
else $key= $b;
0292nobodyさん2009/03/16(月) 15:52:09ID:zNDXWAna
>>290>>291
なるほど!ありがとうございます。
ちなみに>>289の書き方とif使った書き方、どっちがいいとかあるのですか?
0293nobodyさん2009/03/16(月) 15:59:13ID:???
>>292
上記のような簡単なif文なら三項演算子でもいいと思うけど、複雑なものになると
可読性が落ちるので、その場合は素直にif文で済ませた方がよい
0294nobodyさん2009/03/16(月) 16:01:19ID:???
>>292
三項演算子は変数に入れることができる
なので結果を変数に入れたいときとかは便利だが
条件文をかくためだけに使うなら可読性を重視して
普通のif-else文を使ったほうがいい
三項演算子なんてなくてもコーディングできるので
他の人と共同開発なんかの場合は使わないほうがいい
0295nobodyさん2009/03/16(月) 16:34:41ID:zNDXWAna
>>293>>294
ありがとうとざいました。
使わないほうがよさそうですね。
0296nobodyさん2009/03/16(月) 16:46:33ID:TMtB/4sw
オープンな掲示板へのスパム投稿をブロックするにはどうしたらいいでしょうか?
メジャーな方法だとcaptchaを入れるんでしょうが、他に方法あったら教えてください。

たとえば、スパム業者(国内・国外問わず)のIPリストなんかはないんでしょうか?
よろしくお願いします
0297nobodyさん2009/03/16(月) 16:49:43ID:???
>>296
そのリストがあったら既に大手ブログサービス業者は導入して平和になってるはずだよな
0298nobodyさん2009/03/16(月) 17:14:59ID:???
>>296
基本的な対策として

本文中のhttp://文字列を禁止する
もしくは出てくる回数を制限する
(最近はttp://からはじめたりドメインからはじめたりするスパムもある)

文字がどういうもので構成されてるかを見る
日本語[あ-ん]が必ず入っていないと駄目とか
[\x00-\x7f]のみの文字列だったら駄目とか
(最近は文章の最後のほうに日本語を適当に入れてくるスパムもある)

スパムをあえて投稿させてパターンを分析し
自分でリストを作成する(IPなり禁止文字列なり)
(IPはできればサーバ側ではじく)

このほかによく見る方法としては

ひらがなに対応するカタカナを入力してもらうとか
(captchaはすでに効果がないので代替手段を)

他の閲覧者にスパムかどうかを判定してもらってJavaScriptで非表示にする
(youtubeなんかで見るパターン)

とかかな

いずれも限界があるので閲覧者に被害が出ないようにだけ配慮すればいいんじゃない?
そういう観点では誤クリ防止にhttp://のオートリンクをしないとかが一番効果的
0299nobodyさん2009/03/16(月) 17:19:04ID:???
どれもいまいちな方法だな
■ このスレッドは過去ログ倉庫に格納されています