【PHP】下らねぇ質問はID出して書き込みやがれ 82 at PHP
[2ch|▼Menu]
[前50を表示]
150:nobodyさん
09/03/12 22:12:31 w9p/Xb/s
classの継承についてちょとよく分からないので質問です。

class Main{
function dbList(){
// MySQLから特定のテーブルリスト一覧を取得する
}
}

class Sub extends Main{
function output(){
$list = $this->dbList(); // Mainからテーブルリストを取得
}
function output2(){
$list = $this->dbList();
}
}

こういうclassがあったとして、Sub内のoutput()を実行すると
MainのdbList()を実行することになりますよね?
そしてoutput2でdbList()を使いたい場合、再度実行する事になりますよね?
そうではなくて、Mainで設定した内容を使い回しするような事って出来ないのでしょうか?

151:nobodyさん
09/03/12 22:29:49
>150
function dbList(){
 if(false === isset($this->dbList){
  $this->dbList = mysql_fetch_なんとか(); 
 }
 return $this->dbList;
}
遅延初期化とか呼ばれるテクニックで、割と定石。
使いすぎるとカオスになるので、どの値をどのクラス/インスタンスで保持するかは慎重に検討したほうがいい。

152:nobodyさん
09/03/12 23:11:07 Y3aY0Tvp
>>149
まずint mysql_insert_id ([ resource $link_identifier ] )
について調べてみます。
助言本当にありがとうございます。

153:nobodyさん
09/03/12 23:53:49 ZuCT+g0F
file.txtにcsvで以下のように記録しました
これからファイルからデータベースにデータを移し替えたいと思ってます

id,name,age
1,木村,10
2,佐藤,20
3,木下,30
4,山田,40
5,坂本,50



mysqlを使用した場合でダイレクトにid2の佐藤さんのデータのみを取得するにはどうしたらよろしいでしょうか?
ファイルですとforeachでまわしてexplodeで区切る感じで、データを全部読み込んで処理させてるのですが
データベース使ってもデータは全部読み込んでまわして取得するのでしょうか?

154:nobodyさん
09/03/12 23:59:52 qegdPp88
タブ区切りのbbs.cfgからexplodeで設定値を取り出す
このとき、配列の要素が100個ぐらいだとして、
こういう場合はいちいち使うものに変数名をつけるか、
それとも配列の[数字]でつかうのか、
どっちが一般的なんでしょ?
こういう場合に限らず、一般的に他の言語とかでも
たくさんの値を使う場合はどういう管理をしてるんでしょう??

155:nobodyさん
09/03/13 00:15:24
>>153
データーベースの場合は、
WHERE id=2
とかって指定すれば、id=2のデーターだけ
読み込める。

156:nobodyさん
09/03/13 00:27:47
>154
個数はあんま関係ないな。
論理的に「同じようなものが100個」ならば、100要素の配列を使う、というだけ。
例えば>153のデータが100行ならば、人間が100人なわけで、100要素の配列に格納するのは理にかなっているわけだ。

だが、列が3列だからといって、各行を3要素の配列で表現したりはしない。idと年齢は別の概念だからな。
たとえスリーサイズとか干支とか住所とかで各行の要素が何十とあったとしても、数字添字の配列にはしない。
$person[0] = array( 'id' => 1, 'name => '木村', 'age' => 10);
$person[1] = array( 'id' => 2, 'name => '佐藤', 'age' => 20);
みたいな連想配列に格納する。もしくはクラスを使う。

1行ずつ処理する場合も
list($id, $name, $age) = explode(',', $line);
みたいにやった方が、コードが読みやすいはず。

157:nobodyさん
09/03/13 00:43:01
>>154 >>156
俺は100も200もあって意味とか型とかが同一のデータなら(試験の点数など)、
いちいち列名なんてつけずに数字で扱うけどな。まあどっちもでいいんじゃね

158:nobodyさん
09/03/13 11:07:13 eI4NlDZU
classの中で変数を宣言するときvarにしようと思ったのですが
どこかのサイトで、php5はvarは使うな的なことを書いてありました
そのサイトどこか忘れてしまったのですが、varの他に何を使うのが適当なのでしょうか

159:nobodyさん
09/03/13 11:28:27
>>158
URLリンク(www.php.net)
> 注意: キーワード var で変数を宣言する PHP 4 の方法は、
> 互換性を保つために今でもサポートされています (これは public と同じ扱いになります)。
> PHP 5.1.3 より前では、 これを使用すると E_STRICT 警告が発生します。

160:nobodyさん
09/03/13 13:37:40
PHPである程度の量の文(300KBぐらい)を処理するために
ヒアードキュメントを使っています。
フォームで処理すればコピペの時のスクロールが省けると思いフォームの
POST経由で変数を処理しましたが100KBぐらいしか処理できません。
これはフォームの入力制限等があるからでしょうか?

161:nobodyさん
09/03/13 14:01:14
>>160
そんなことはないと思うぞ。ブログとか文章が長くて容量がでかいだろ。
おそらく、設計にミスがあるんじゃないか?

162:nobodyさん
09/03/13 14:14:40
>>153
DBの場合、主にSQL文を使う。その場合なら
SELECT id,name,age FROM テーブル名 WHERE id = 2;
こんな感じのSQLをデータベースに投げることによって、idが2のやつのデータを返してくる。

ファイルよりも細かい検索ができるからいろいろやってみると面白いよ。
詳しくはMySQLのオンラインマニュアルとかSQLの入門サイトを参照のこと。

163:nobodyさん
09/03/13 14:17:06
>>153
URLリンク(ufcpp.net)

164:nobodyさん
09/03/13 15:02:30 6EGCx2Tu
PHPで痴漢、いやっ置換する関数などはありますか?

165:nobodyさん
09/03/13 15:04:59
str_replace
preg_replace

166:nobodyさん
09/03/13 15:05:04 OOgBCn1Z
Cache_Liteを使って、
一つのフォルダに50万以上のページのキャッシュを保存してます。
今後も+1万/日のペースで増加します。

やはり、キャッシュを保存するフォルダは適度に分散した方がいいのでしょうか?
動作が遅くなる可能性はありますか。

167:nobodyさん
09/03/13 15:19:24 DZKgFtDb
classの中でevalを使う方法を教えていただけませんか
使えなかったらすみません

class hoge{
var $hoge = eval("a");
}

このようなエラーが返ってきます。Parse error: syntax error, unexpected T_EVAL

168:nobodyさん
09/03/13 15:32:23
eval(笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑

169:nobodyさん
09/03/13 15:42:15
class hoge{
var $a;

function hoge(){
$this->a = eval...
}
}

こうしてみたら?
eval使ったことないけど。

170:nobodyさん
09/03/13 16:00:26 XJCetXbH
自動で、毎日ある時間になったら、スクリプトを実行させたいのですが、
ループ文で四六時中、time()関数を実行して、設定した時間になったら、ループを抜け出しスクリプトを実行する、
というやり方はありですか?

171:nobodyさん
09/03/13 16:06:22
>>170
おぉ、その手があったか。是非、max_execution_timeの限界ってどのくらいか試してくれ。
でもそのスクリプト、ずーっと実行し続けられる保証がないよね?
そしたらそれを定期的に監視するするスクリプトもそれで動かせばいいね。うんうん。

172:nobodyさん
09/03/13 16:07:30
現実的には cron だな。

173:nobodyさん
09/03/13 16:13:19 DZKgFtDb
>>169
なるほど!
思いつきませんでした。ありがとうございます

>>170
ものすごく負荷がかかると思います。
レンタルサーバーなら、コンパネからcron使えないですかね

174:nobodyさん
09/03/13 16:19:46
>>170
クライアントPCつけっぱなしか。電気代もったいないな

175:170
09/03/13 16:21:18 XJCetXbH
レスありがとうございます。
まったくの入門者でwinで自鯖をやる予定です。
max_execution_timeというので、負荷がわかるわけですね、勉強になりました。
まだ、試してないんですが、cronだと細かい設定が出来ないですよね?

176:nobodyさん
09/03/13 16:37:25
>>174
ignore_user_abortがある

>>175
工夫すれば負荷なんてそんなにかかんないよ。
1クライアント分消費するだけ。
max_execution_timeを無限設定して
ignore_user_abortで起動して、forループにSleepを巨大な秒数でセットしてやれば。
あとは、プロセスを一つに絞るのに、どっかにPIDファイル作るとか



177:質問させて下さい
09/03/13 21:45:58 75Yme90V
php5.25です。


phpで下記を書いてます。

<?php
$mainrss = array (
'URLリンク(www.123.net) ○○',

'URLリンク(456.net) ○○'
);
?>

URLは取得できるようになるんですが、URLの後ろに短い紹介文を書きたいのですが、
カンマじゃなくて何を使ってあげるといいのでしょうか?
○○に短い紹介文を記入したいです
アドバイスをお願いします。

178:nobodyさん
09/03/13 21:48:38
意味が分からんけど=>でキーにでもすれば?

179:質問させて下さい
09/03/13 21:50:51 75Yme90V
>>178

レスありがとうございます。
下記のような感じで記入できたと思うんですが、思い出せなくて。

'URLリンク(www.123.net)','あいうえお',

180:nobodyさん
09/03/13 21:56:15
.

181:質問させて下さい
09/03/13 22:06:25 75Yme90V
>>180
レス有り難うございます!
それでも無理でした

'URLリンク(www.123.net) '123',

でもだめでした。
難しいですね。

182:nobodyさん
09/03/13 22:09:21
カンマじゃなくてドットだって

183:質問させて下さい
09/03/13 22:15:49 75Yme90V
それでもだめでした。
レスを有り難うございます。
本を買ってきて勉強したいと思います。


184:nobodyさん
09/03/13 22:25:13
いや、つか何をしたかったの?

185:nobodyさん
09/03/13 23:25:30
>175
Unix/Linuxならcronだが、同じ事はWindowsではタスクスケジューラで実現する。
(Windows上で動くcronも存在するが)
無限ループを回すよりはこちらのほうがスマート。

「cronだと細かい設定が出来ない」の意味が良く分からんな。
1分以下の精度で実行タイミングを指定したい(12時30分15秒じゃないとダメなんだ!とか)とか言う意味ならcronの仕様上無理だが。
曜日指定とか時刻指定とかなら余裕で可能。cron覚えるのがダルいならスクリプト側で制御してもいいしな。
任意のスクリプトを動作させられるのだから、そのPC上で可能な事はなんだって出来る。

186:nobodyさん
09/03/13 23:57:37
>>176

>max_execution_timeを無限設定して

笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑

187:nobodyさん
09/03/14 00:00:05
>>177
$ary = array(
array("url"=>"127.0.0.1","shoukai"=>"しょうかい1"),
array("url"=>"URLリンク(yahoo.co.jp)","shoukai"=>"しょうかい2"),
array("url"=>"URLリンク(2ch.net)","shoukai"=>"しょうかい3")
);

188:170
09/03/14 01:07:17 u9lyCe1c
170です。レスくれた方ありがとうございます。
いまいちよくわからないので、もう少し勉強してからもう一度質問させて頂きます。

189:質問させて下さい
09/03/14 07:04:33 hOLVrRGN
>>187
わああああああ!
レスありがとうございました。
このようにやりたかったです。
無事に出来ました!本当にありがとうございます。
phpの本は買って勉強をしておきます。


190:nobodyさん
09/03/14 07:21:36
>>189
>>178
勉強する前に人の話を聞け


191:nobodyさん
09/03/14 11:14:07
>>187に超図解シリーズで本を出してもらうしかないな
って、超図解の出版元って倒産してるのかよ!w

192:nobodyさん
09/03/14 11:44:37 sxFlkHR4
phpって一つの.phpに何行くらい書いても大丈夫なんでしょう
5000行くらいなら平気ですかね?もちろん文字数や処理にもよると思うのですが、
(適度に改行したとして)大体何行くらいに納めるみたいなのがあればよろしくおねがいします

193:nobodyさん
09/03/14 11:51:38
特にないよ

194:nobodyさん
09/03/14 13:20:33
>192
俺の場合、1ファイル1クラスは死守。
1クラス500行上限が目安で、1メソッドは基本的にスクロールせずに全部見える分量に収める。
1ファイルが大きくなると、当然その分パフォーマンスに影響するし、保守もしづらい。

195:nobodyさん
09/03/14 13:25:01
同サイズだったらファイル数が多い方がパフォーマンス悪くなるわ

196:nobodyさん
09/03/14 13:43:06
>>195
クラスローダーを書いて、頻繁に使うクラスはパッキングしてキャッシュすればOK

197:194
09/03/14 13:56:17
>195
毎回毎回すべての処理を呼び出すならその通り。
だが、呼び出しの9割は参照系へのアクセスで、そのうち8割はトップページだ。

つうか、パフォーマンスなんぞどうでもいいんだけどな。管理しづらい、読みづらいというのが最大の問題点。

198:nobodyさん
09/03/14 14:35:42
自分で書いたくせに何言ってんだお前www

199:質問させて下さい
09/03/14 19:52:27 hOLVrRGN
2度目の質問失礼します。

file_getについてアドバイスをお願いします。

下記にするとエラーが出ます。
<?php
echo mb_convert_encoding(file_get_contents("111.php"), "shift-jis", "auto");
?>

エラー内容
Warning: mb_convert_encoding() [function.mb-convert-encoding]:
Unable to detect character encoding in 111.php on line 59


下記にするとエラーは出ません。
<?php
echo mb_convert_encoding(file_get_contents("111.php"), "shift-jis", "shift-jis");
?>

"shift-jis", "shift-jis"と2重にしたんですが、おかしな書き方になるのでしょうか?
別の書き方がありましたら教えて下さい。


200:nobodyさん
09/03/14 20:02:04
>>199
>>190に関しては?

201:nobodyさん
09/03/14 20:37:03 qjtwBjoL
キーと値の組み合わせとしてではなく、
array('a','b','c')
のように値の羅列の形式で代入された配列の正式名称って何ですか?

202:nobodyさん
09/03/14 20:44:32
>>201
そのまんま配列

キーと組み合わせたのは連想配列

203:nobodyさん
09/03/14 20:48:34
>>199
file_get_contentsに設定するパラメータは以下だけです

filename
flags flags
context
offset
maxlen

よって君は何か勘違いをしている
マニュアルをよく読みましょう

204:nobodyさん
09/03/14 21:06:31
君が勘違いしている

205:nobodyさん
09/03/14 21:10:32
>199
111.phpのエンコードが事前に分かっているなら後者の書き方のほうが望ましい。
前者だと、間違ったエンコード判定がされた場合文字化けの原因になるしな。

Shift_JISからShift_JISに変換しているわけで、ヘンっちゃあヘン、というか無駄だな。
状況によっては100%無意味というわけでもないが…
echo file_get_contents("111.php");
とほぼ同じ意味だ、というのは理解してるのかな。

206:nobodyさん
09/03/14 21:36:24
$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ってどうしてでてくるんですか?><

207:nobodyさん
09/03/14 21:41:55
値戻してないからだろ

208:nobodyさん
09/03/14 21:44:54
>206
$a = hogehoge();
$b = hogehogehoge();

として、$aと$bの中身をvar_dumpで見てみろ。

209:nobodyさん
09/03/14 22:01:33 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"
になりました><

210:nobodyさん
09/03/14 22:20:14 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>

これで、ローカルで試すと問題なく動くのですが、
レンタルサーバーにアップロードして試すと
文字化けになります。なんででしょうか?

211:nobodyさん
09/03/14 22:33:52
>>210
自己レス
サーバーのphp.ini の
mbstring.internal_encoding = UTF-8を設定して
上書きしてファイルを再読み込みしてリトライしたらできた。

サーバーのデフォルトではEUCになってた。氏ね。

212:質問させて下さい
09/03/14 22:37:16 hOLVrRGN
>>203
そういうことについては全然勉強足りていないので頑張って覚えてみます。
アドバイス有り難うございます。

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


>>200
意味がわかりませんでした。
失礼致しました。

213:nobodyさん
09/03/14 23:02:29
>>210
php_selfは推奨されてないのに使うバカ発見

214:nobodyさん
09/03/14 23:43:47
>>210
マルチ乙

215:nobodyさん
09/03/14 23:52:54 da46lvzd
トラックバックの送受信の処理を書こうと思うのですが
もし既存のライブラリがございましたら教えてください

216:nobodyさん
09/03/14 23:54:59
>>215
google

217:nobodyさん
09/03/14 23:56:50
>>216
きも

218:nobodyさん
09/03/15 00:05:25 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");
?>

これはうちの環境の問題なのか、誰か教えて欲しい。


219:nobodyさん
09/03/15 00:27:37
>>218
そりゃ変数に何も格納されてないなら無理だろ

220:nobodyさん
09/03/15 06:06:20
PHP5.3使ってるんですが、メモリ不足を例外処理みたく捕まえることってできますか?
方法をご存じの方がいらっしゃいましたら教えてください。


221:nobodyさん
09/03/15 06:06:51 +CIxhGml
>>220 sageちゃいました。すいません。

222:nobodyさん
09/03/15 06:23:33
残念ながらそういうのは無い

223:220
09/03/15 06:27:45
>>222
やっぱそうですか。
踏ん切りがつきました。ありがとう。

224:nobodyさん
09/03/15 08:14:23 yySd7NKe
>>219
書き方が悪かった。
実際の変数部分には正しい値が入る。

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

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



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

とりあえずphpinfo() で使ってるphp.ini確認してみたら。
あとバージョンが違うライブラリにパスが通ってるとか。

226:nobodyさん
09/03/15 08:44:40
実行ユーザーが違うので
・ログに書けないよエラー
・そのエラーログを書こうとしてエラー
・そのエラーログのエラーログを書こうとしてエラー
・その・・・・

とか。

227:nobodyさん
09/03/15 09:24:05
スレリンク(tech板:350-番)
前の子が来てる

228:nobodyさん
09/03/15 09:58:53 qN1+xeFs
foreachの中から、そのループが1回目か/最後か等を調べるいい方法を
教えてください

229:nobodyさん
09/03/15 10:10:56
>>228
いい方法かはわからないけど、
$i = 0;
foreach(){
$i++;
}
みたいなやり方はだめなのかな

count()を使えば配列の要素の数も得られるから、それで最後かどうかもわかるのでは

230:nobodyさん
09/03/15 10:44:14
>>225
ubuntuなんで、php.iniは別なんだけど設定は同じ。
ライブラリ系もまったく同じ。

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

ありがとう。


231:nobodyさん
09/03/15 11:14:01
>228
無い。
ループの何巡目かが処理に影響するような場合はforを使え。

232:nobodyさん
09/03/15 11:18:55 Ok7zsTbr
セッションIDって基本的にはクッキーに保存されるじゃん

じゃあ、クッキーが無い時代はどうやってたの?

233:nobodyさん
09/03/15 11:23:01
>>231
プログラミングに「ない」を考えるあなたの考えにナイワ

234:nobodyさん
09/03/15 11:35:16
>>232
パン。

235:nobodyさん
09/03/15 11:38:48
>>232
原初、最初にクッキーだけがあった
したがってクッキーのない時代などない

236:nobodyさん
09/03/15 11:47:29
クッキー使えなくても埋め込みがある
どっちも平文で送信されるから似たようなもんだ

237:nobodyさん
09/03/15 12:18:21
>>232
飛脚→伝書鳩→クッキー

238:nobodyさん
09/03/15 14:33:41
本来、1つのクラスは、1つのファイルに分けるべきみたいなのを
よくみるんだけど、数行程度でも?

239:238
09/03/15 14:40:11
あ、そうか
エラー見つけやすいから分けるのか
とりあえず小分けにしておくわ

240:nobodyさん
09/03/15 14:45:54 L+gdJUIE
>>238
数行程度のクラスがわんさかあってもウザイと思うが

241:nobodyさん
09/03/15 14:46:54 L+gdJUIE
>>235
クッキーの無い時代もあったんじゃね?
それよか、フォームすらなかった時代もあったんじゃね?
ネットスケープ社が頑張って実装したんじゃね?

242:nobodyさん
09/03/15 16:01:31
>>241
おまえ大丈夫?

243:nobodyさん
09/03/15 16:35:04 L+gdJUIE
>>242
お前の方が大丈夫か?最初のHTMLは画像すら使えなかったって知ってるか?

244:nobodyさん
09/03/15 18:44:14
これ以上ない「ゆとり」と発言したくなるシチュ

245:nobodyさん
09/03/15 18:46:33 tXlRktlT
複数行入力できるtextareaを使って入力してもらい
それをmysqlのtext型としてinsertしました

それをselectクエリで取り出して表示してみた所、改行されずに
表示されてしまうんですが、入力の時と同じように表示させる
ためにはどうすればいいんですか?

246:nobodyさん
09/03/15 19:00:19
>>245
改行するには何がいるか?

247:nobodyさん
09/03/15 19:05:30
昔はクックーもフォームも使えなかったことを知らないとは

248:nobodyさん
09/03/15 19:08:08
>>245
nl2br

249:nobodyさん
09/03/15 19:25:38 tXlRktlT
>>246
>>248

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

ありがとうございました!

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

URLリンク(help.yahoo.co.jp)

251:nobodyさん
09/03/15 19:32:02
>>249
独習PHPに載ってるよ

252:nobodyさん
09/03/15 19:33:13
>>250
(1)
MySQLでPDOが使える(無料のところはPDO使えないことが多い)

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

(3)
場合によっては有料のところでは独自ドメインが使えるかも
(無料でも一部使えるところはある)

253:nobodyさん
09/03/15 19:34:26
(4)
sendomailが使える
(無料のところではsendmailは無効化されていることがおおい)
sendmailが使えないとメールが送れない。

PHPのmail関数は、サーバーのsendmailに仕事を
丸投げしているだけなので、sendmailが動いていないと
何も起きない

254:nobodyさん
09/03/15 19:36:53
>>250
使うってどういう状況で?

255:nobodyさん
09/03/15 19:40:38
DBやメールなんかでいろいろ制限があるんですね。
ありがとうございました。

256:nobodyさん
09/03/15 19:44:18
よく見たら、CGIを利用するには有料じゃないとダメですね。

257:nobodyさん
09/03/15 19:50:20
無料/安価なサーバーはだいたい重い。
少数のサーバーに人を大量に詰め込むからな。
(そうしないと初期投資を回収できないので仕方ないが)

258:nobodyさん
09/03/15 19:50:22
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:までを判断したいとき
どういう風に記述すればいいのでしょうか。

259:nobodyさん
09/03/15 19:53:05
100行書くしかないのでは?

260:nobodyさん
09/03/15 19:53:58
横に繋げれば1行で済むのでは?

261:nobodyさん
09/03/15 20:19:50
なんでifにしないのか理解に苦しむ。

262:nobodyさん
09/03/15 20:25:12
iが0〜100までかを調べたいなら
if ($i >= 0 && $i <= 100) {
 echo "iは0〜100";
} else {
 echo "iは不明";
}
でいいのでは?

263:nobodyさん
09/03/15 20:30:46
>>251
宣伝乙

264:nobodyさん
09/03/15 20:33:50
>>258
switchでcaseが大量になる場合は配列をうまく利用することをおすすめする

function func1() {
}




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


$case[0];

265:nobodyさん
09/03/15 21:34:38
>>264
www

266:nobodyさん
09/03/15 22:37:58
>>265
shosinsha otu

267:261
09/03/15 22:54:26
>264
せめて
$case = array('func1', 'func2', 'func3');
call_user_func($case[0]);   // $case[0]();でも多分動く
にしとけ。

とりあえずそのコードは実行効率、可読性、保守性などあらゆる観点で最低だ。
後者2つについてはこのコードも大差ないが。

268:nobodyさん
09/03/16 01:35:07
ふと思ったんだけど、例えば見栄え良く
改行いっぱい使って、

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

こうしたのと、単に
$hoge="hoge1hoge2hoge3";
ってしたのとでは、
上のような改行いっぱい使った場合のが
積み重なってくると、改行使ってないものよりも
読み込みが遅くなる?
改行やスペースは無視になるとはきくけどなんか不安なのです。


269:nobodyさん
09/03/16 02:37:08
>268
文字列の結合の分遅くなるな、理論上は。
改行も、確かに理屈の上では遅くなる。人間に知覚できる差じゃないけどな。
仮に10000行空行があったとしても、目に見える応答速度差は出ない。
1MB分改行があっても気づかないと思う。

つうか、お前は、ペーパー代を惜しんでウンコした後ケツを拭かなかったりするのか?
ゴミみたいな高速化と可読性を天秤にかけるなら、どう考えても可読性を優先すべきだ。

270:nobodyさん
09/03/16 06:04:33
javaだと文字列リテラル同士の結合はコンパイル時にオプティマイズされて
結合された文字列になるんだっけか。

スクリプト言語で拘ってもしょうがないとは思うが、気分的にはやってほしいところではあるな。
APCとかのキャッシュ環境なら差がでるかも知れんし。

271:nobodyさん
09/03/16 11:58:48
「PHPでOOPで書く場合の、helloが出てくるまでの長い一日」

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

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

class {


}

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


}

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

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


function hello(){
print "hello";
}

273:nobodyさん
09/03/16 12:01:11
(4)
よしよし、、、作業は順調だな、、、
これで、このメソッドを、さっき作った
クラスの中に、放り込めばいいのだよな、、、

class first{


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

274:nobodyさん
09/03/16 12:02:05
(5)

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

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

$obj=new first();

275:nobodyさん
09/03/16 12:03:00
(6)
よしよし、、、

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

print $obj->hello();

276:nobodyさん
09/03/16 12:03:51
>>274
括弧ついてるよ初心者クン

277:nobodyさん
09/03/16 12:05:51
(7)
<?php
class first{


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

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

完成、、、と、、、。
カンタンに説明すると、
firstというクラスを定義しhello()というメソッドを定義し
そのメソッドの中でhelloを出力する命令を書きnewでfirstクラスの
インスタンスを作成しオブジェクト変数に代入しそのできてきた
インスタンスからhello()メソッドにアクセスして最終的にhelloを
画面に出すことに成功しました。

278:nobodyさん
09/03/16 12:06:40
>>276
どちらでも実行できるんだけど、なんか問題あるなら
それを解説したページをプリーズ

279:nobodyさん
09/03/16 12:08:53
ちなみに手続型でhelloを出すソースは以下の通り

<?php
print "hello";
?>

280:nobodyさん
09/03/16 12:10:12
>>276
お前が初心者なのは分かった

281:nobodyさん
09/03/16 12:19:32
>>276
普通はつけます

282:nobodyさん
09/03/16 12:21:35
クラス使えばOOPってわけじゃないべ。

283:nobodyさん
09/03/16 12:25:30
つか全然OOPじゃないわな

284:nobodyさん
09/03/16 12:29:26
>>282
ものの考え方・概念のことだから本質的にはそうだね
ただOOPの核となる継承やらカプセル化をする為にはクラスを使わないといけない

helloを出力するだけにわざわざクラス使うのはPHPではただの冗長

285:nobodyさん
09/03/16 13:00:26
hello出力するだけのただの形ではあるから参考にならないなあ
OOP勉強してる人いないの?

286:nobodyさん
09/03/16 13:10:52
>>285
一応、スレはある。
が、もう死にかけの体。

PHPでOOP
スレリンク(php板)l50

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


もちろん、パクリネタだ。

288:nobodyさん
09/03/16 13:25:45
>>285
本気で勉強したいならJavaでやったほうがいいって散々言われてるだろ
オブジェクト指向という考え方を理解するためだけなら
わざわざPHPでやる必要はない
OOPに関するドキュメントの多いJavaでやったほうがいい
PHPでOOPなんてJavaやC#なんかをやってるやつの為にあると思っていい

289:nobodyさん
09/03/16 15:26:16 zNDXWAna
くだらない質問ですがお願いします。
($a < $b) ? $key = $a : $key = $b;
これの意味がちょっとわからないのですがif文で表すことってできますか?

290:nobodyさん
09/03/16 15:33:02
if ($a < $b) {
 $key = $a;
} else {
 $key = $b;
}

291:nobodyさん
09/03/16 15:33:12
$key= ($a < $b) ? $a : $b;
普通はこう書く

if ($a < $b) $key= $a;
else $key= $b;

292:nobodyさん
09/03/16 15:52:09 zNDXWAna
>>290>>291
なるほど!ありがとうございます。
ちなみに>>289の書き方とif使った書き方、どっちがいいとかあるのですか?


293:nobodyさん
09/03/16 15:59:13
>>292
上記のような簡単なif文なら三項演算子でもいいと思うけど、複雑なものになると
可読性が落ちるので、その場合は素直にif文で済ませた方がよい

294:nobodyさん
09/03/16 16:01:19
>>292
三項演算子は変数に入れることができる
なので結果を変数に入れたいときとかは便利だが
条件文をかくためだけに使うなら可読性を重視して
普通のif-else文を使ったほうがいい
三項演算子なんてなくてもコーディングできるので
他の人と共同開発なんかの場合は使わないほうがいい

295:nobodyさん
09/03/16 16:34:41 zNDXWAna
>>293>>294
ありがとうとざいました。
使わないほうがよさそうですね。

296:nobodyさん
09/03/16 16:46:33 TMtB/4sw
オープンな掲示板へのスパム投稿をブロックするにはどうしたらいいでしょうか?
メジャーな方法だとcaptchaを入れるんでしょうが、他に方法あったら教えてください。

たとえば、スパム業者(国内・国外問わず)のIPリストなんかはないんでしょうか?
よろしくお願いします

297:nobodyさん
09/03/16 16:49:43
>>296
そのリストがあったら既に大手ブログサービス業者は導入して平和になってるはずだよな


298:nobodyさん
09/03/16 17:14:59
>>296
基本的な対策として

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

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

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

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

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

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

とかかな

いずれも限界があるので閲覧者に被害が出ないようにだけ配慮すればいいんじゃない?
そういう観点では誤クリ防止にhttp://のオートリンクをしないとかが一番効果的

299:nobodyさん
09/03/16 17:19:04
どれもいまいちな方法だな

300:nobodyさん
09/03/16 17:21:48
>>299
いまいちでない方法をどうぞ

301:nobodyさん
09/03/16 17:28:15
あなたはスパム業者ですか?

はい いいえ

↑これを入力させればいい

302:nobodyさん
09/03/16 17:30:34
>>301
天才

303:nobodyさん
09/03/16 17:55:37
2chはどうやってんだろ?

304:nobodyさん
09/03/16 18:04:29 GOOX8xiJ
PHPで効率化を突き詰めていくと、
MVCを考えた、フレームワークのような形になるのですが、
やっぱり皆さんもそうですか?それとも最初からフレームワーク使いますか?

305:nobodyさん
09/03/16 18:06:47
>>298
日本語が入ってないとダメってのはもう古い
日本語スパムははじけないよ

306:nobodyさん
09/03/16 18:10:14
やっぱり、画像認証(ランダムの数字を入力するやつ)
しか対処できないんじゃないか?
ライブラリも多いし、作るのも難しくないだろ。

307:nobodyさん
09/03/16 18:21:17
>>303
2chは管理に協力してる人間がいっぱいいるから
手動でどうにかなるレベルなんだよ

308:nobodyさん
09/03/16 18:49:09
PHPの初心者用参考書をちょっと読んだだけの初心者です

register_globalsをonにするとセキュリティ上よくなく
また、PHP6からはonにすることができなくなると聞きました
そこで質問なのですが、ハイパーリンクにごとにページの内容を変えたり
処理の内容を変えたりしたい場合は他にどのような方法があるのでしょうか

質問とは関係ないのですがスパム対策で 1 + 2 = [ ] といのを見たことがありますね
(数値は画像でランダムでした

309:nobodyさん
09/03/16 19:11:39
>>308
基本的には POST あるいは GET メソッドでクエリを渡して、その値に応じて処理を分ける。
ハイパーリンクでなら GET 。

310:nobodyさん
09/03/16 19:21:10 TMtB/4sw
>>298
たくさんの意見ありがとうございます
カタカナをひらがなにっていうのはいいですね!
キャプチャの文字列をカタカナにするってのは無理なんでしょうか?

311:nobodyさん
09/03/16 19:25:46
スクリプトでは理解できない&日本人にしかわからないような
質問をランダムに生成できればいいんだが
質問と答えがあらかじめ決まってるようなものだとそのうち解析されるし
画像のひらがなをみてカタカナにしろぐらいだとCaptcha解析技術応用すれば
解析したひらがなに対応するカタカナに置き換えればできちゃうし
完全な対策なんてないからどこかで妥協するしかない
いろんなことやった上でなんとかして投稿してやろうなんて考える
海外のスパマーなんてそうはいないよ
仮にいろんな対策をした上で変なのが投稿されたらそれは日本人の愉快犯だ
というわけでそんな神経とがらせてスパマー対策しなくてもいいんじゃないだろうか

312:nobodyさん
09/03/16 19:32:15
>>310
できますよ
そういうライブラリは探せばあるんじゃないかな?
単に文字を画像に出力するだけなら簡単なんですけどね
画像をゆがめたりする処理が難しいんじゃないかな

313:nobodyさん
09/03/16 21:48:57
普通にCAPTYAいれとけば?

314:nobodyさん
09/03/16 21:50:47
ちなみに2ちゃんがやってるのは、、、

(1)書き込みをしようとしてきたら、クッキーを
受け入れてるかどうかを確認する。クッキーないやつは
書き込みできない

(2)書き込みしてきようとしたサーバーに簡易ポートスキャンをかけ、
オープンプロキシでないことを確認する。もしオープンプロキシだったら拒否

(3)
プロキシからの書き込みについては、手動で
リストを作成して、そのリストにIPが載っていたら、拒否。

こんな感じ。一部だけど。

315:nobodyさん
09/03/16 23:05:32 l8gT672P
セッションを使って、
ログインしないと見れないページを作ったんだが、
画像はどうやって守ればいいんだ?

316:nobodyさん
09/03/16 23:07:02
>296 >297
DNSBL(DNSブラックリスト)でぐぐれ
スパムちゃんぷるーが手軽

317:nobodyさん
09/03/16 23:21:56
>>315
そこでPHPですよ

318:nobodyさん
09/03/16 23:35:54 l8gT672P
>>317
PHPで画像を送出するってことかな?
ぐぐったけど具体的なコードがわからない

319:nobodyさん
09/03/16 23:51:20
2行でおk
ヘッダ送信
readfile()で出力

320:nobodyさん
09/03/16 23:53:20
セッションも処理しないとwwwwwwwwww

321:nobodyさん
09/03/17 00:28:16 PIugUbr/
$sql = "SELECT name FROM address";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
echo $row["name"];

こうしたらMySQLから1行取得出来ますが、もっと簡略化する方法は無いでしょうか?
特に、結果が1行・1フィールドだと分かっている場合、
mysql_fetch_arrayをして一旦配列に入れるのは不効率な気がしています。

322:nobodyさん
09/03/17 00:35:15
echo (mysql_fetch_array(mysql_query("SELECT name FROM address")))["name"];

323:nobodyさん
09/03/17 00:38:22
>321
SELECT name FROM address LIMIT 1

配列に代入云々は数マイクロ秒とかのゴミみたいな差しかつかない。
こいつは測定可能なレベルで実行性能に影響する。

324:321
09/03/17 01:11:49
>>323
>>321のようなテーブルにアクセスして、指定値を取得する関数を
作っているのですが、 321のソースでフィールド「name」が異なる場合、
echo $row["name2"];
というように名称を指定して出力しなければいけません。

まぁ、関数を
function dbSelect($fld_name){
echo $row[$fld_name];
}

とすれば良いだけの気がしますが、
何か良い関数があるのかと思い、質問しました。

325:nobodyさん
09/03/17 02:58:59
1からCMS作ろうと思います。
応援よろしくお願いします

326:nobodyさん
09/03/17 03:15:35
がんば〜

327:nobodyさん
09/03/17 07:54:44
>>324
PDOが使用可能であれば…
URLリンク(jp.php.net)

328:nobodyさん
09/03/17 08:04:24
実はおれもCMS自作してるけど
ネックなのは一度もCMSを使ったことがないことだ・・

329:nobodyさん
09/03/17 09:18:29
CMSを使ったことがない人がCMS作っても劣化品にしかならない

330:nobodyさん
09/03/17 10:44:32 Ib1RB6YL
キーワード自動リンクの仕組みを作っています。
データベースなどに以下のようなデータがあるとします。

id,word
1,日本
2,日本海
3,日本海溝
4,太平洋

これらを辞書として、

・日本海溝は太平洋側にあります。

という文章に最長で一致するものからリンクを張っていくのですが、

<a href="word/3"><a href="word/2"><a href="word/1">日本</a>海</a>溝</a>は<a href="word/4">太平洋</a>側にあります。

のように、重複してリンクが張られてしまいます。
すでにリンクが張られている言葉の内側にはリンクを張らないようにしたいのですが、
どのような対処法が考えられますでしょうか?
PHPで処理する場合の対処法を教えてください。

331:nobodyさん
09/03/17 11:14:15
マッチさせてるコードは?

332:nobodyさん
09/03/17 11:32:03
$words = array(
array(
'id' => 1,
'term' => '日本'
)
);

辞書がこんなかんじの配列にあって、

foreach ($words as $word) {
str_replace($word['term'], '<a href="word/' . $word['id'] . '">' . $word['term'] . '</a>', $body);
}

辞書は単語の文字数の長い順にソートさせてあります。
実際のコードとは違うのでどこか変かもしれませんが、流れはこんな感じです。

単純に、辞書の配列をforeachさせて、
str_replaceでアンカータグをつけたものに置き換えているだけです。
なので、重複して置き換えられてしまうのは当然なのですが、
対処法が思い浮かばなくて;

よろしくお願いします。


333:nobodyさん
09/03/17 11:33:23
すみません、訂正です;

×
str_replace($word['term'], '<a href="word/' . $word['id'] . '">' . $word['term'] . '</a>', $body);


$body = str_replace($word['term'], '<a href="word/' . $word['id'] . '">' . $word['term'] . '</a>', $body);


334:330
09/03/17 11:34:31 Ib1RB6YL
>>332
>>333
ID出し忘れました・・・スレ汚してすみません;

335:nobodyさん
09/03/17 11:45:00 PBdJ+iXh
宜しくお願いします。
【OS名】Windows XP
【PHPのバージョン】php4.4.4
【質問内容】
『−』を含んだ文字列を preg_match で検索するとエラーが発生するのでキーワードを preg_quote で処理すると
『ホームページ』が『ホ―[ムペ―[ジ』となってしまいます。
お知恵を貸して下さい。お願いします。

336:nobodyさん
09/03/17 11:48:44 Vq5xUXrn
>>335
mb_internal_encoding('utf8');
mb_regex_encoding('utf8');

337:nobodyさん
09/03/17 11:49:06 qY/TJCjN
たまにGDでjpeg画像を処理した時にエラーが出て何も描かれてないjpeg画像がブラウザに出る時があるんだけど
そのエラーを表示しない方法はphp.iniで指定するってのは分かった。

これでエラーは出なくなったわけだが、画像はやっぱり出ない。
どうやらいつも同じファイルを処理した時にエラーになるので
画像ファイル側の問題だと思うけど
これをうまく処理する事はできるの?
そもそも何でこんなエラーがでるの?

知ってる人 教えてYO!

338:nobodyさん
09/03/17 11:53:27
その画像をうpれ

339:nobodyさん
09/03/17 12:02:31
>>335
はやく5に移行しろよ

340:nobodyさん
09/03/17 13:22:05 PBdJ+iXh
>>336さん。
有難う御座います。
mb_regex_encodingでUTF-8にしてもやはりホ―[ムペ―[ジとなってしまいます。

>>339さん。
まだ勉強中の為に5への以降は難しいです…

341:nobodyさん
09/03/17 13:33:39
まず検索する対象とキーワードの文字コードを把握できてないと解決できんぞ

342:nobodyさん
09/03/17 14:22:48
4で勉強してから5にうつるより、最初から5で勉強しちゃったほうがいいような気もするんだけど。

343:nobodyさん
09/03/17 14:23:55
4とか過去の汚物なんだから使う価値0

344:nobodyさん
09/03/17 15:16:01
移行ってほど変わらんだろ。さっさと5使え

345:nobodyさん
09/03/17 15:52:24 s4aiV5Ak
質問です。
このサイト(みんなのキャンパス:URLリンク(campus.nikki.ne.jp)
のように掲示板の情報を一部だけ閲覧することができ、
登録・ログイン後に情報をある程度投稿すると全ての情報が閲覧できるような
会員制サイトを作成したいと思っています。

WordPressやOpenPNEで色々試したのですがいまいちうまくいきません。
こういうものは、どうやったら実現できるのでしょうか?
よろしくお願いします。

346:nobodyさん
09/03/17 15:55:22
if (未ログイン) {
一部表示処理
} else {
全表示処理
}

347:nobodyさん
09/03/17 16:03:10
CMSで駄目なら何をやっても駄目な気がする
とりあえず Wordpress の方なら is_user_logged_in() でログインしてるかどうか調べられるよ

348:nobodyさん
09/03/17 16:22:38
>>345
フレームワークで作るという手もある。


349:nobodyさん
09/03/17 16:56:04
フレームワーク使っているかもしれないけど、
各プラグインは自作しなければいけないからな。

俺も自作システムを作る時にWordpressやらOpenPNEやらを見たけど、
やっぱり「目的の仕様に合った作り方」をしているので、
それらを改造してオリジナルのシステムを作るのは無理があるよ。

350:345
09/03/17 17:04:11 s4aiV5Ak
みなさんご回答有難うございます。
質問の仕方が悪くて申し訳ありません。

みんなのキャンパス:URLリンク(campus.nikki.ne.jp)
というサイトは登録後ログインしても、
大学の講義情報を3件書き込まないと全ての情報を見ることができません。

このように書き込まないと掲示板の他のページが見れない、といったように
するにはどういった処理が必要なのでしょうか?
よろしくお願いします。




次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4732日前に更新/244 KB
担当:undef