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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/09/29(土) 18:35:56ID:YlkpEUW6
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

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

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

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

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで


0412nobodyさん2007/10/05(金) 18:33:15ID:???
>>410
そりゃオブジェクトの代入だw
配列で参照なんて渡さねぇw
0413nobodyさん2007/10/05(金) 20:06:21ID:/jiD7c/g
ただ特定のipに対してping送りたいだけなんですが
phpだとどのようにしたらできますか?
0414nobodyさん2007/10/05(金) 20:08:38ID:/jiD7c/g
なんかIDが正規表現みたいだった
0415nobodyさん2007/10/05(金) 20:11:26ID:???
環境ぐらい書いたほうがええで
0416nobodyさん2007/10/05(金) 20:14:47ID:/jiD7c/g
すいません。OSはRedHat、phpのバージョンは4.4.6、apache使用です。
平たくいうとlolipopのレンタルサーバです。
0417nobodyさん2007/10/05(金) 20:20:31ID:???
`ping 127.0.0.1`;
0418nobodyさん2007/10/05(金) 20:26:08ID:???
ping回数ぐらい指定しないと
0419nobodyさん2007/10/05(金) 20:45:34ID:/jiD7c/g
pingの回数は特に決まってません。

>>417
それは何かの関数で使うんでしょうか?
0420nobodyさん2007/10/05(金) 20:46:28ID:???
exec()とかsystem()とおさないで直接``って書くものなの?
0421nobodyさん2007/10/05(金) 21:08:20ID:/jiD7c/g
$hostにipを入れるとして
system("ping $host");
こんな感じでしょうか?
0422nobodyさん2007/10/05(金) 21:13:31ID:???
>>419
実行演算子参照
0423nobodyさん2007/10/05(金) 22:36:46ID:???
pingの結果は特に参照しないならsystem()の方が速いかもだけどな。
0424nobodyさん2007/10/05(金) 22:43:03ID:???
>>421
/bin/pingとかフルパスにしといた方がいいかもな。
0425nobodyさん2007/10/05(金) 23:40:08ID:/jiD7c/g
ありがとうございました。解決しました。
0426nobodyさん2007/10/05(金) 23:49:03ID:???
ハッシュのキーを変更する方法ありますか?
例 array_key_rename($hash, $key, $rename);

配列の中から特定のキーを除いた配列を返す関数ありますか?
例 array_key_remove($hash, array('key1','key2','key3'));
0427nobodyさん2007/10/05(金) 23:52:18ID:???
>>426
つhttp://www.php.net/manual/ja/
04284262007/10/05(金) 23:56:35ID:???
>>427
あなた、そこちゃんと見ましたか?
見てからレスしてください。
0429nobodyさん2007/10/06(土) 00:03:41ID:???

物凄く頭のおかしい事を言ってるような気が
0430nobodyさん2007/10/06(土) 00:10:29ID:???
>>426
function
0431nobodyさん2007/10/06(土) 00:14:47ID:???
こりゃまた香ばしい
0432nobodyさん2007/10/06(土) 00:16:58ID:???
>>426
とりあえずID出せ
0433nobodyさん2007/10/06(土) 00:17:55ID:???
>>426,428
つhttp://item.rakuten.co.jp/book/1721279/
0434nobodyさん2007/10/06(土) 00:38:14ID:???
>>411
>>412
PHP5はオブジェクト型を暗黙で参照渡しするんじゃないか?
配列はオブジェクト型でしょ。

ただ>>403の答えにはまったく関係ないけど
0435nobodyさん2007/10/06(土) 00:39:09ID:???
>>433
わざわざ探してきたのかw
乙
0436nobodyさん2007/10/06(土) 00:43:10ID:???
>>435
「口のきき方」でググッただけ。
最初amazonのURL貼ったら長すぎと蹴られたので楽天のにした
0437nobodyさん2007/10/06(土) 00:48:25ID:???
>>434
> PHP5はオブジェクト型を暗黙で参照渡しするんじゃないか?
それはそうだが

> 配列はオブジェクト型でしょ。
そんな与太話をどっから拾ってきたんだ。
0438nobodyさん2007/10/06(土) 00:58:59ID:???
JavaScript辺りと混同してるんじゃないか?
0439nobodyさん2007/10/06(土) 01:06:24ID:???
クッキーを保存するプログラムで
保存されてないんだけどなんでだろう
ダウソした見本コードでも保存されてないし
0440nobodyさん2007/10/06(土) 01:09:41ID:???
>>439
IDとソース出せ
0441nobodyさん2007/10/06(土) 01:10:37ID:???
>>439
自作ソースか見本ソースを貼って質問して
0442nobodyさん2007/10/06(土) 01:11:30ID:???
>>439
見本が古いんじゃね
0443nobodyさん2007/10/06(土) 01:15:18ID:???
<html>
cookie.php
<head>
<title>クッキーでデータを記録する</title>
</head>
<body>
<form method="POST" action="cookie_rec.php">
E-Mailアドレス:
<input type="text" name="email" size="30" maxlength="50"
value="<?php print($_COOKIE['email']); ?>" />
<input type="submit" value="送信" />
</form>
</body>
</html>

cookie_rec.php
<html>
<head>
<title>クッキーでデータを記録する</title>
</head>
<body>
<?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?>
クッキー"email"を保存しました。
</body>
</html>
こんなんです・・・・
0444nobodyさん2007/10/06(土) 01:17:10ID:???
マニュアル読んでやったほうがいいね
本だから簡易化して説明するのは当然としてもひどすぎる
0445nobodyさん2007/10/06(土) 01:20:59ID:???
>>443
自信ないけどクッキーってhtml本体より前に発行しないといけなくなかったか?

setcookie
http://jp2.php.net/manual/ja/function.setcookie.php
etcookie() は、その他のヘッダ情報と共に 送信するクッキーを定義します。
ほかのヘッダ情報と同様に、 クッキーは、スクリプトによる他のあらゆる出力よりも前に 送信される必要があります(これはHTTPプロトコルの制約です)。
<html> や <head> タグはもちろん 空白も含め、あらゆる出力よりも前にこの関数をコールするようにしなければなりません。
0446nobodyさん2007/10/06(土) 01:21:29ID:???
>>437
>>438
$arr1 = array('a'=>2);
$arr1[] = $arr1;
var_dump($arr1);

参照になってないか?
0447nobodyさん2007/10/06(土) 01:22:06ID:???
ハッシュのキーを変更する方法ありますか?
例 array_key_rename($hash, $key, $rename);

配列の中から特定のキーを除いた配列を返す関数ありますか?
例 array_key_remove($hash, array('key1','key2','key3'));

質問に答える方は、>>1の内容をよく読んでから答えてください。
答えになっていないリンクはいりません。
0448nobodyさん2007/10/06(土) 01:22:53ID:???
まだいたの?お引取り下さい。
0449nobodyさん2007/10/06(土) 01:23:54ID:???
>>448
答えが出ていませんからね。

そりゃ、出るまでいますよ。
0450nobodyさん2007/10/06(土) 01:25:05ID:???
>>449
答えは判明してるけど君には誰も教えたくないんだよw
0451nobodyさん2007/10/06(土) 01:29:41ID:???
「ないから作るしかない」
その一言がいえないんですよね?w
0452nobodyさん2007/10/06(土) 01:30:29ID:???
>>447
スレ違い
http://pc11.2ch.net/test/read.cgi/php/1158647441/
0453nobodyさん2007/10/06(土) 01:32:09ID:???
>>447
質問する側もちゃんと>>1を読もうな。
0454nobodyさん2007/10/06(土) 01:32:48ID:???
>>452
すこし落ち着いたらどうですか?w

PHPが大好きなのはわかりますが、
ないものは素直にないといいましょうよ。
それだけでしょ?
0455nobodyさん2007/10/06(土) 01:34:20ID:???
>>446
なんだそのコード???
意味分かって書いてるのか。
0456nobodyさん2007/10/06(土) 01:34:57ID:???
>>455
>>1を読め
04574552007/10/06(土) 01:36:24ID:???
>>456
>>1のどこを読めって?
0458nobodyさん2007/10/06(土) 01:36:40ID:???
>>455
$arr1に$arr1のコピーを追加する。
だけど、var_dumpには参照として出てるよね?
0459nobodyさん2007/10/06(土) 01:41:11ID:???
>>443
解決できたのか?
0460nobodyさん2007/10/06(土) 01:44:53ID:???
>>434
厳密には
php5ではオブジェクトをハンドルで渡すんだよ
参照がデフォルトってわけじゃない
あとphpはリファレンスカウンタっていうのがあるから
スクリプト上でコピーしても、内部的には実際にデータが変更
されたタイミングでコピーしてる
0461nobodyさん2007/10/06(土) 01:52:56ID:???
>>458
<?php
$a = array(1,2,3);
$b = $a;
$b[0] = 9;
var_dump($a);
var_dump($b);
?>

結果
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
array(3) {
[0]=>
int(9)
[1]=>
int(2)
[2]=>
int(3)
}
どこが参照だって?
0462nobodyさん2007/10/06(土) 01:54:59ID:???
>>461
そのケースは知ってるからあえて>>458にしたんだけど?

>>460 おお、変更したら本当にコピーされた。勘違いしてた。
0463nobodyさん2007/10/06(土) 01:57:19ID:???
>>1を読めば参照かどうかなんてわかるだろ。
0464nobodyさん2007/10/06(土) 01:59:18ID:???
>>463
>>446みたいなケースのとき、
変更されるまで参照持ってるよ。なんてのは
マニュアルに書いてあったけ?
0465nobodyさん2007/10/06(土) 02:01:09ID:???
>>1を読めが流行ですか?
0466nobodyさん2007/10/06(土) 02:05:28ID:???
>>462
なに。その特殊ケースを指して「配列はオブジェクトである」なんて与太をばら撒いてたわけ?
0467nobodyさん2007/10/06(土) 02:06:32ID:???
>>463
だから>>1のどこ読めばそんなこと分かるんだよ。
0468nobodyさん2007/10/06(土) 02:22:34ID:???
答えられない質問が着たらとりあえず>>1よめ。だろw くやしいのぅくやしいのぅ
0469nobodyさん2007/10/06(土) 02:38:09ID:???
うるせーよ黙れ誰かTHE WORLD発動しろ
0470nobodyさん2007/10/06(土) 02:42:39ID:???
ID出さない質問が>>1嫁
態度がでかい質問が>>1嫁&誘導
ていうか>>1読めってわざわざご親切に誘導するのもあれだな
これからは徹底放置でいこうぜ
スレタイだけ読んで質問スレだから適当に質問すればいいじゃなくて
テンプレ読んで質問するのがここでのルール
ID出すのがなんで嫌がるのか理解できない
質問した後自作自演で回答者側に突っ込みいれたければsageればID出ないだろ?
それに同じIDで複数回質問したっていいじゃないか
0471nobodyさん2007/10/06(土) 02:44:56ID:???
根本的に>>410の解釈が間違い

代入の仕組みは以下参照
http://derickrethans.nl/files/phparch-php-variables-article.pdf

>>461の例だと
$b = $a; ← この時点では$bは$aを指している
$b[0] = 9; ← ここで初めて$bはデータの実体を持つ

PHPのスクリプト上で検証しようとしても無理
0472nobodyさん2007/10/06(土) 03:03:34ID:???
>>471
一瞬、グロ画像かと思ったwww
0473nobodyさん2007/10/06(土) 03:29:10ID:???
array()はオブジェクトではない
new StdClass() はオブジェクト
リファレンスカウントは
debug_zval_dumpでみれるよ

0474nobodyさん2007/10/06(土) 03:52:44ID:qCDvmkUY
基本的なことかもしれませんが、マニュアルを読んでもネットを検索しても
見つけられなかったので、こちらで質問させてください。
自分が使っているのはPHP4です。

$aに適当な整数が代入されているとき、その値が0、3、17のときだけ
共通の処理をしたいのですが、自分はif文で、
 if (($a===0) or ($a==3) or ($a==17)) 処理;
みたいに書いてます。
これって自分でも冗長だと思ってるのですが、
他にもっとシンプルに書ける方法ってありますか?
ただ、処理したい値が2,3通りしかないような場面でのことなので、
できれば配列やループは使いたくないんです。

我侭言って申し訳ないのですが、どなたかよろしくお願いします。
0475nobodyさん2007/10/06(土) 03:59:20ID:???
別に普通だと思うが
if (in_array($a,array(0,3,17))) {
echo 'ほげほげ';
}

で良いじゃないかと思ったら配列はダメって言うし
あえて言うなら囲まずに
if ($a === 0 || $a === 3 || $a === 17) {
echo 'とか?';
}

0476nobodyさん2007/10/06(土) 04:06:12ID:1HWd7HDN
>>474
preg_replace
0477nobodyさん2007/10/06(土) 04:13:04ID:???
>>474
switch ($a):
 case 0:
 case 3:
 case 17:
  ヒットした時の処理;
  break;
 default:
endswitch;
0478nobodyさん2007/10/06(土) 04:22:22ID:???
>>474
>これって自分でも冗長だと思ってるのですが、

それを冗長だと思ってるのはあなただけな気がします
04794032007/10/06(土) 04:28:27ID:???
それで結局、どういう結論になったのでしょうか?

>iif( ! is_array($hoge)){でhogeが配列でないことを調べているのに、
>$hoge = $tmpで配列に変換しているということは、
>左辺が変数で右辺が配列のとき値の代入すると、
>自動で左辺の変数が右辺の方の配列に変換されるのでしょうか?

?なんですけど。
0480nobodyさん2007/10/06(土) 04:36:04ID:???
>>474
ごく普通の書き方かと。
5つくらいまではその書き方で問題ないと思うよ。
0481nobodyさん2007/10/06(土) 04:37:29ID:???
>>479
>>409で結論
0482nobodyさん2007/10/06(土) 04:37:51ID:???
>>403
それのやってる事は

if( ! is_array($hoge)){   // 配列ジャナイ場合(これobjectとかがきたらどーすんだis_stringとかにしたらいいのに)
  $ tmp = array();          // 配列初期化
  for($ i = 0; $i<strlen($hoge); $i++){ // $hogeを文字列と仮定して文字の長さ文ループ
   $tmp[$i] = substr($hoge, $i, 1);     // 1バイトずつ文字を切り出して配列に格納
 }
$hoge = $tmp; // $hogeに格納
}

多分この後に何か$hogeを使った処理を使うためにしてるだけじゃないかな
0483nobodyさん2007/10/06(土) 04:40:11ID:???
>>482
そんなことは最初から403も分かってるよ。
スカラーの変数に配列の変数を代入なんて何故できるの?って話。
CかJavaみたいなガチガチ言語に頭が毒されてるんでしょ。
04844032007/10/06(土) 04:50:04ID:???
>>483
>CかJavaみたいなガチガチ言語に頭が毒されてるんでしょ。

ズバリそうなんです。
「もう、こんなもんだ」と無理矢理納得するしか無いのかな。
こんな事許されてたら、メンテナンス悪くなるし、可読性低くなるし、
危険じゃないのかしら?
とりあえず、有り難うございました。
04854742007/10/06(土) 04:51:11ID:qCDvmkUY
みなさんありがとうございます。
まさかこんなに早くお答えいただけると思ってませんでした。
お礼が遅くなって申し訳ありません。

自分の書き方でも特に冗長ではないというご意見をいただき安心しました。
でも、475さんや477さんのアドバイスはとても勉強になりました。
状況に合わせて使ってみたいと思います。

みなさん、本当にありがとうございました。
0486nobodyさん2007/10/06(土) 04:53:04ID:???
>>484
なんだそんな事か(´・ω・`)

俺は自分の中で型を意識した組み方してるけど
そこらへんは組み方次第でどーとでもなるんじゃないかなぁ・・・

意識するとメンドイ事多いけど・・・

04874742007/10/06(土) 04:56:47ID:qCDvmkUY
ひとつ書き忘れました。
476さんのご指摘の preg_replace を使う方法は
後で自分でも調べて確認してみます。
アドバイスありがとうございました。
0488nobodyさん2007/10/06(土) 05:11:58ID:1HWd7HDN
>>487
御免間違えた
preg_match
0489nobodyさん2007/10/06(土) 05:27:00ID:???
まぁ、PHPの型のいい加減さっぷりはBasicやPerl以上だからな。
ここまで適当なのは他にあまり無いよ。
0490nobodyさん2007/10/06(土) 07:01:28ID:???
Perlを元にしてるような旧式だからしゃーねえな
Perlはわざわざmyをつけないと歴史駆るスコープにならないような言語だし
0491nobodyさん2007/10/06(土) 09:46:45ID:hKjy3c4n
PHPはクラス変数、メソッドにアクセスするのに、わざわざ$thisをつけないといけない糞言語♪
0492nobodyさん2007/10/06(土) 09:53:27ID:???
アンチが付け上がるから流れを切ろうか
0493nobodyさん2007/10/06(土) 10:03:02ID:???
なんか勘違いしている人がいるけどPHPにも型はちゃんとある
内部変換しているかどうかの違いだけ
0494nobodyさん2007/10/06(土) 10:06:12ID:???
PHPはクラス変数、メソッドにアクセスするのに、わざわざ$thisをつけないといけない
のは可読性があがって俺は好きだ
0495nobodyさん2007/10/06(土) 11:01:19ID:???
DBから返ってくる数値を文字列扱いするのをどうにかしてクレヨン
0496nobodyさん2007/10/06(土) 11:02:25ID:???
後付けOOPだからじゃないかな?
$thisもだけど->がめんどくさい。「.」は文字列結合で使用済みだから仕方ないけど。
最近Ruby始めたら変数の$すら面倒になってきた。始めた頃は変数わかりやすいと思ってたのに。

チラシの裏スマソ
0497nobodyさん2007/10/06(土) 11:20:23ID:???
PHPのアルバイトだとどれくらいのレベルで使いものになりますか?
0498nobodyさん2007/10/06(土) 11:27:26ID:???
俺は日曜だから知らんが、アルバイトのプログラマに教育費用かける気はないと思うぞ
0499nobodyさん2007/10/06(土) 11:37:53ID:???
全くの業務未経験者がPHPは難しい
給料は安いくせにやたら条件が高いから困る
未経験歓迎なのは使い捨てのJavaだな
0500nobodyさん2007/10/06(土) 11:46:26ID:???
>>484
いやいや、そういう感覚は大事だと思うよ。
ただ、型に縛られる必要は無いと思う。
function hoge($val)
本来$valはarrayである。と決めきってしまうと
要素数が1のときもわざわざarrayにしてから関数よばなきゃいけない。
ところが、内部でarrayじゃないときは、arrayにしてやる
処理を入れておけば、関数の外部仕様的には
複数指定したいならarrayにしてちょ。
単数ならわざわざarrayにしなくてもいいよ。
という緩さが実現できる。

05015002007/10/06(土) 11:48:38ID:???
個人的には、
$year = 2001;
とかしてるのに変数を流用して
$year = 年とは無関係の何か;
とかされるとストレスかかるな。
0502nobodyさん2007/10/06(土) 12:00:34ID:???
>>500
一般的に自作関数ってすべて内部で型チェックさせるものなの?
0503nobodyさん2007/10/06(土) 12:20:35ID:???
>>502
500じゃないが
俺は外部で型変換するなー
内部で変換させたら関数内がどんどん見難くなるし。
変換する事が多いなら変換用の関数作ってその関数から呼ぶようにしてたりはするけど。
05045002007/10/06(土) 12:23:12ID:???
関数のパラメータとして期待した型が来てるか
内部であえてチェックするかってこと?
エラーになる要因は早めにつぶすべきだから、
チェックするのは良い習慣だと思う
ただ、すべてでチェックはオーバーヘッドになるし、書くのめんどくさいから
適度に手抜きしてるかな
パラメータに限らないが前提条件を満たしているか
チェックすることはよくある
05055002007/10/06(土) 12:25:56ID:???
あ、ミスったかな
>>503な意味だった?
なら>>503と同じ意見
0506nobodyさん2007/10/06(土) 12:41:37ID:???
漏れMTクローンのCMS作れるレベルだけどアルバイト採用されるかな?
0507nobodyさん2007/10/06(土) 12:42:46ID:???
>>506
自分で起業
0508nobodyさん2007/10/06(土) 12:44:39ID:???
起業はめんどくさくね?それにこれから何するってのさ
0509nobodyさん2007/10/06(土) 12:45:40ID:???
使い物になるかどうかチェックしてやるからソースを
0510nobodyさん2007/10/06(土) 12:46:49ID:???
作ったCMSを売るかWebアプリ化
0511nobodyさん2007/10/06(土) 12:48:28ID:???
>>509
もちGPLかBSDライセンスで
■ このスレッドは過去ログ倉庫に格納されています