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

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

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

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

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0133nobodyさん2011/08/01(月) 23:08:39.50ID:???
ブラウザ三国志ってPHPじゃなかったかな
0134nobodyさん2011/08/01(月) 23:11:25.13ID:???
ブラウザゲーム PHPでぐぐれ
0135nobodyさん2011/08/01(月) 23:12:54.63ID:???
>>130
ソートすれば何番目でも取り出し放題
0136nobodyさん2011/08/01(月) 23:14:11.90ID:???
>>130
<?php
$array = range(0, 10);
shuffle($array);
echo var_export($array, true), PHP_EOL;

$values = array_values($array);
$keys = array_keys($array);
array_multisort($values, SORT_DESC, SORT_NUMERIC, $keys);
echo implode(' > ', $keys), PHP_EOL;
0137nobodyさん2011/08/01(月) 23:17:21.62ID:???
PHPでゲーム作ったとしてもゲームってよべる代物じゃないんじゃね?
送信→結果返ってくる→送信って物凄い退屈になりそうだ
ドラクエの動作する度に読み込みしなきゃならんという
0138nobodyさん2011/08/01(月) 23:19:07.16ID:???
>>137
いつの時代のゲームだよ。
PHP+JavaScriptで結構いい感じのができるよ。
0139nobodyさん2011/08/02(火) 00:38:18.62ID:HmxmiA4/
クラス内の関数をcall_user_funcで呼ぶにはどう指定したらいいでしょうか?
call_user_func($this->'hoge'); // ?

private function hoge()
{

}
0140nobodyさん2011/08/02(火) 00:39:56.79ID:???
PHP+AJAXを利用してチャットの仕組みを応用すれば、
それほど難しくないでしょ。
0141nobodyさん2011/08/02(火) 00:42:42.94ID:???
>>139
http://php.net/manual/ja/function.call-user-func.php
>さらに、オブジェクトのインスタンスのクラスメソッドをコールするには、 array($objectinstance, $methodname) をこのパラメータに渡します。
書いてあるまんま

privateを呼ぶならリフレクション使わないと無理だと思うよ
0142nobodyさん2011/08/02(火) 00:45:02.22ID:???
>>139
ttp://php.net/manual/en/function.call-user-func.php#example-4339
0143nobodyさん2011/08/02(火) 00:50:29.97ID:HmxmiA4/
>>141-142
ありがとうこざいますm(__)m
0144nobodyさん2011/08/02(火) 01:15:53.15ID:???
call_user_funcを使うのは設計が悪い証拠
0145nobodyさん2011/08/02(火) 01:21:48.12ID:???
>>144
禿同
0146nobodyさん2011/08/02(火) 04:13:18.97ID:???

$matches = array();
preg_match($regex, $url, $matches);

最初の初期化って必要?
0147nobodyさん2011/08/02(火) 04:20:20.72ID:???
上書きされるので必要ない
0148nobodyさん2011/08/02(火) 05:57:50.94ID:pX4Rbkp4
前スレでSMTP認証ができずメール送れないって書き込んんだのですが、
mb_send_mailをsendmailまねーるでSMTP認証すると送れました。
質問します。画像やpdfを添付ってどうやってやるのですか?
0149nobodyさん2011/08/02(火) 09:08:19.40ID:???
sendmailまねーるって何だよ
PHPに関係あんのかそれ
0150nobodyさん2011/08/02(火) 09:12:30.68ID:???
>>148
その時にされたレスにあるクラス使えば出来るよ
0151nobodyさん2011/08/02(火) 18:18:20.03ID:pX4Rbkp4
>>149
sendまね〜る(sendmane.exe)の使い方
http://homepage1.nifty.com/yito/anhttpd/faq/sendmane.html
>>150
やってみます

0152nobodyさん2011/08/02(火) 21:10:35.32ID:???
てst
0153nobodyさん2011/08/02(火) 21:11:39.21ID:???
sendmailまねーるは使うな
どうしてもWindowsでやりたいならxmailにしろ
0154nobodyさん2011/08/02(火) 23:07:29.75ID:pX4Rbkp4
>>153
sendまね〜るを非推奨は何か理由があるのですか?
0155nobodyさん2011/08/02(火) 23:47:13.83ID:???
sendmailまねーるって何だよ
PHPに関係あんのかそれ
0156nobodyさん2011/08/02(火) 23:48:59.76ID:???
またいつものどっかの記事を鵜呑みにしちゃった使うな厨か
0157nobodyさん2011/08/03(水) 00:51:46.47ID:???
そんなに使いたいなら使えばいい
0158nobodyさん2011/08/03(水) 01:59:01.60ID:???
PHPは使うな
どうしてもWindowsでやりたいならAjaxにしろ
0159nobodyさん2011/08/03(水) 10:48:11.05ID:???
PEAR入れりゃ済むことをわざわざ別の何かを入れるのは
どうなんだ。それが本当に必要ならともかく、
よくわかってないから入れてみました、じゃあなあ
0160nobodyさん2011/08/03(水) 10:51:49.49ID:???
解決方法は別になんでも良いだろ
回答もらっておきながら結果なりを報告せずに別の質問しに来るあたりクズだと思うけど
0161nobodyさん2011/08/03(水) 12:15:08.13ID:???
なんでこんなスレにいちいち報告に来なきゃならないんだ
お前はお礼を言ってもらいたくて回答してんのか
0162nobodyさん2011/08/03(水) 12:16:18.34ID:???
「〜は使うな
どうしても〜で使いたいなら〜にしろ」
はコピペか
0163nobodyさん2011/08/03(水) 12:19:36.66ID:???
なんでこんなスレにいちいち回答しなくちゃならないんだ
おまえは回答が欲しくて質問してんのか
0164nobodyさん2011/08/03(水) 12:26:57.45ID:???
>>161
そんな風だからお前はこのスレでしか質問させてもらえないんだよ?
0165nobodyさん2011/08/03(水) 12:47:56.43ID:???
まあどうせパスが通って無くてインストールできなかったんだろうけど
その程度の事もわからなくて見当違いの方向に進んで
見当違いの質問をするやつもどうかと
0166nobodyさん2011/08/03(水) 17:21:28.04ID:???
>>164
このスレだけで質問できれば充分なんだけど?
0167nobodyさん2011/08/03(水) 17:23:13.01ID:???
PEARの使い方わからないからってそんなイライラすんなよ
0168nobodyさん2011/08/03(水) 17:33:34.82ID:???
>>160
同意
0169nobodyさん2011/08/03(水) 18:55:00.77ID:???
>>161
同意
0170nobodyさん2011/08/03(水) 21:30:38.04ID:???
>>168
不同意
0171nobodyさん2011/08/03(水) 23:48:52.38ID:???
不同意ね…
0172nobodyさん2011/08/04(木) 05:35:26.09ID:lnwKvGgA
なんかまともに機能してないのかこのスレ
0173nobodyさん2011/08/04(木) 08:51:10.70ID:???
粘着君が荒らしてるようだな
0174nobodyさん2011/08/04(木) 09:03:04.88ID:???
まともな質問者にはまともな回答がついてるじゃない
0175nobodyさん2011/08/04(木) 10:24:57.92ID:x+2SSW45
配列の初期化について教えて下さい。

error_reporting(E_ALL);
$a = array();
for($i=0;$i<=10;$i++) {
print "a($i) = $a[$i]\n";
}

上記のようなスクリプトを書くと、
Notice: Undefined offset: 0 in /home/name/tmp/a.php on line 5
a(0) =

Notice: Undefined offset: 10 in /home/name/tmp/a.php on line 5
a(10) =
という警告が出ます。

$配列=array(); で、空の配列で初期化できるとググって調べたサイトには
書かれてるのですが、これは正しいのでしょうか?
ちなみに $a = array(); を$a = NULL; で置き換えると警告が出ず、意図した通り動作します。
どちらが正しいのでしょうか?
0176nobodyさん2011/08/04(木) 10:44:12.39ID:???
>>175
$a[0] や $a[10] は初期化されてないでしょ?
0177nobodyさん2011/08/04(木) 10:48:58.81ID:???
>>175
> $a = NULL; で置き換えると警告が出ず、意図した通り動作します

意図したとおりに動作するならそれでいいじゃん
0178nobodyさん2011/08/04(木) 10:53:32.66ID:???
揚げ足取りはスルーしてね
0179nobodyさん2011/08/04(木) 10:59:25.37ID:???
空の配列へ初期化ですから Notice: Undefined offsetが出るのが正しいですよね?。
nullの場合は nullへの配列アクセスがnull返してるだけですので、意味が違います。
どちらが正しいということではありません。

01801752011/08/04(木) 11:21:24.21ID:???
>>176
>>178-179

回答ありがとうございます。
array()で「未定義の状態に」初期化されるということだったんですね。

借りてるサーバーでphp.iniの設定が変わったのか、やたらこの警告が
出るようになったので、error_reporting等でエラー制御してもいいんですが、
放置しておくのも気持ち悪いので、配列を空白または0として認識するよう初期化する
方法を検証してたんですよね。
配列のサイズは可変なので、array_fill等を使わずに検証してますが、
>>179さんの説明見る限りでは、= NULL; では意図した初期化になってない気がしますね。
0181nobodyさん2011/08/04(木) 11:31:18.07ID:???
気持ち悪いのなら、その部分を直すべき。
print "a($i) = ". (isset($a[$i])?:"") ."\n"; とか
0182nobodyさん2011/08/04(木) 11:34:10.08ID:???
クラスにしちゃうのも良いかもね
0183nobodyさん2011/08/04(木) 11:35:39.13ID:???
なんでもかんでもクラスといえばいいと思ってんの?
0184nobodyさん2011/08/04(木) 11:38:25.15ID:???
そうだねAjaxだね
0185nobodyさん2011/08/04(木) 12:42:21.82ID:???
自分も日曜鯖管・プログラマーで、Noticeエラーで悩まされて
error_reportingでとりあえず対処してる。
PHPで食べてるプロの方々は、どう対処してるんでしょ?
鯖の設定もクライアントによって様々だろうし・・・
error_reporting(1)にしてるけど、問題ないのか自分としても自信がないし
0186nobodyさん2011/08/04(木) 12:44:08.88ID:???
Noticeの対処するだけ。
とりあえずって自分で言ってるから、分かってるんだとは思うけど。
01871752011/08/04(木) 13:20:29.10ID:???
>>181

うーん。サイズが可変である以上は、やはりスクリプト中で毎回
変数をチェックするしかないですかね。

>>182
クラスでできるもんなんですか?

>>185
私も同じです。
error_reportingでの対処で問題ないか自信がないので初期化を検討してます。
0188nobodyさん2011/08/04(木) 13:28:13.82ID:???
少なくとも今からコード書くんであればerror_reportingで対処するのはどうかと思う
0189nobodyさん2011/08/04(木) 13:28:17.87ID:???
Noticeなら別にerror_reportingでも問題はない
0190nobodyさん2011/08/04(木) 13:39:30.10ID:???
>>187
http://php.net/manual/ja/class.arrayaccess.php
この辺使えばできるんじゃない?使った事ないけど
0191nobodyさん2011/08/04(木) 13:41:46.56ID:???
結局「Notice: Undefined offset」が出るようなプログラムに問題があるのは明らかだけど、
既存のプログラムを手直ししてられないならerror_reportingしかないんじゃない?
Noticeが出る場所が少ないんなら手直しすべきだなぁ
0192nobodyさん2011/08/04(木) 13:49:13.03ID:???
開発以外でエラー表示してんの?
てか定数で指定しろよ
E_ERROR=1ってWARNINGまで抑制してるんじゃないの
0193nobodyさん2011/08/04(木) 13:54:00.62ID:???
http://midilin.sakura.ne.jp/midilin/php/ppblog/?UID=1170059219
「また、PHPなどで、実行する場合は、SETと、本SQLの2本を同時実行できないっぽい・・」
とありますが出来る方法をご存知の方いらっしゃいましたら教えてください・・・
0194nobodyさん2011/08/04(木) 13:57:16.06ID:???
>>193
>>1
0195nobodyさん2011/08/04(木) 14:11:49.21ID:???
Noticeエラーについてググると、確かに出ないようにプログラムを組むべきとあるのですが、
方法論というか考え方がわかっていなくて・・・
>>175はエラーがでるのは明らかでわかるのですが、
たとえば条件分岐していて、値が入っている時と入っていない時がある場合に
issetで判定しようとするときにもでてたような記憶があるのですが、
そうした場合の初期化はあらかじめ全て0などの値をいれて初期化しておくべきなのでしょうか?
0196nobodyさん2011/08/04(木) 14:13:43.33ID:???
試してから言えよ
0197nobodyさん2011/08/04(木) 14:18:13.81ID:???
isset、is_null、array_key_exists辺りをよく読みなおした方が良い気がする
01981752011/08/04(木) 15:05:45.99ID:???
>>188-189,>>191

ありがとうございます。
一応、地道に警告出ないように書きなおします。

>>190

ありがとうございます。
こちらも試してみます。

>>195-197

試してみたところ、issetでは警告でないようですね。
is_nullでは警告が出ました。
0199nobodyさん2011/08/04(木) 19:14:55.20ID:???
preg_replace ()の $pattern句は普通の正規表現は受付ないのか?
バカヤロー
0200nobodyさん2011/08/04(木) 19:21:22.05ID:???
>>199
「普通の」の定義は何?
0201nobodyさん2011/08/04(木) 19:29:17.08ID:???
>>199
POSIXじゃないってことか?これでも読め
http://www.php.net/manual/ja/pcre.pattern.php
0202nobodyさん2011/08/04(木) 21:09:11.26ID:???
POSIXが通常だとでも思ってたんだろうか?w
0203nobodyさん2011/08/04(木) 23:49:49.51ID:???
PHPをWindowsでやるメリットってなんかあるかな。
0204nobodyさん2011/08/04(木) 23:59:19.75ID:???
>>203
・Windows PCしか持っていない
・Linuxを知らない、覚える気が無い
こういう人でもPHPを利用できるということだろう
そもそもOSに依存しないのが理想的とも言える
0205nobodyさん2011/08/05(金) 00:05:56.98ID:???
逆にPHPをLinuxでやるメリットってあるのかな?
0206nobodyさん2011/08/05(金) 00:30:42.60ID:???
>>205
・Linux PCしか持っていない
・Windowsを知らない、覚える気が無い
・複数台のPCに入れるWindowsの金がない > 俺
こういう人でもPHPを利用できるということだろう
0207nobodyさん2011/08/05(金) 01:10:24.19ID:???
ちょっとアレなんだがPCの仮想化ってのはみんなしないもんなの?
0208nobodyさん2011/08/05(金) 01:52:58.08ID:i/Iug6bT
WinXp、PHP5.2、Operaで
echo preg_replace("/([も])/","$1あ","まみむめも");
とすると「?あ???あ???あ?あ??あ?あ??あ?あ?あ」と出ました。

「まみむめもあ」に置き換えるつもりですが、どうしてこうなるのでしょう?
簡単なことかもしれませんが調べても分かりません。
0209nobodyさん2011/08/05(金) 01:53:37.67ID:???
ここのみなさん優秀そうだけど、元々他の言語とかでプログラミングしてたの?
phpを最初に勉強するとき参考にしたサイトとか
あれば教えて下さい。公式マニュアルサイト以外で
0210nobodyさん2011/08/05(金) 01:55:06.64ID:???
>>209
「PHP 入門」でぐぐれ
プログラムが初めてならプログラムでぐぐれ
あとはPHPの絵本やCの絵本読め
0211nobodyさん2011/08/05(金) 02:09:31.47ID:???
>>210
ググッてきました、リファレンス本買わなくてもいいくらい
解説サイトありますね。自分がわかりやすいところ使います

PHPの絵本はわかるけど、何故にCの絵本まで
読む必要があるのでしょうか?
参考書は最低1冊は必要なのかな
0212nobodyさん2011/08/05(金) 02:46:50.50ID:???
うん、初心者ということで大目に見ていたけど、まずはスレタイと>>1を読もうな
0213nobodyさん2011/08/05(金) 03:37:14.74ID:???
>>211
「PHPマニュアル」という本家の解説本がネット上にあるぞ。

多くのスクリプト言語(perl,PHP,ruby,Python等)の書式や制御式はCをルーツとしているから言ってるのじゃないか。
しかし、英語のルーツがラテン語だからといって、ラテン語を知る必要はないわな。
0214nobodyさん2011/08/05(金) 04:03:35.52ID:???
>>211
超初歩の段階を最も丁寧に教えているのは、C関連の書籍に多い。
他の言語は、超初歩の段階は知ってて当然だろw ばーかw だったり、
酷いものになると、Cの基礎を知っている前提で書かれていたりする。
0215nobodyさん2011/08/05(金) 05:33:01.90ID:???
PHPからシェルスクリプトを実行したいのですが
想定通りの動作をしません。

PHPスクリプトindex.phpとシェルスクリプトtest.shは同じディレクトリ内
に配置しており、
index.phpには以下のように記述してあります。
<?php
$cmd = "./test.sh";
$ret = shell_exec( escapeshellcmd($cmd) );
print $ret;
?>

test.shには以下のように記述してあり、アクセス権限は711になっています。
#!/bin/bash
echo "AAA"


上記がうまく行かなかったので
C++で生成した以下のようなプログラムをindex.htmlと同じディレクトリに配置し、
test.shと同じ方法でPHPから実行したら、想定通りにBBBが出力されました。
#include <iostream>
using namespace std;

int main( )
{
cout << "BBB" << endl;
}


問題点はどこでしょうか?
よろしくお願いいたします。
PHPのバージョンは 5.1.6 です。
02162152011/08/05(金) 05:50:50.80ID:???
>>215
肝心なことを書き忘れていました。
「index.phpからtest.shを実行しても、AAAが表示されない」
というのが現在の問題点です。

シェルスクリプトもC++も同じように標準出力に出力しているのに
違いが出てしまうので困惑しています。
0217nobodyさん2011/08/05(金) 07:32:46.91ID:bQIZhMIz
http://blogs.yahoo.co.jp/nonpipo/3382183.html
↑のように、設定して
DB側の構造はutf8_general_ciにしてるんですが、
phpファイルで呼んだときに
一部日本語の文字が化けてしまいます。
おおまかな原因がありそうだったら教えてもらえますか?
文字化けも
ほむらちゃ→ほ(読み込めない文字)?らち
みたく、一部が見れるんですよね... こういう文字化けの仕方は経験が
無かったので、質問させていただきました
0218nobodyさん2011/08/05(金) 07:40:59.16ID:???
>>215
>>1
0219nobodyさん2011/08/05(金) 09:06:24.32ID:???
>>217
原因絞り込む為にとりあえずhttp_outputをpassとかにしてみたらば?
0220nobodyさん2011/08/05(金) 09:52:41.07ID:bQIZhMIz
>>219さんレスありがとう
モバイル対応にスクリプトを弄っていて
絵文字対策の部分でSJISコードがあったのを見落としていました。
解決です
0221nobodyさん2011/08/05(金) 15:02:26.75ID:???
????●
0222nobodyさん2011/08/05(金) 18:02:05.75ID:kOt9+/Uj
WindowsXP PHP5.3 SQLiteをPDOを使って操作しています。
コーディングミスで、
トランザクション中に無限ループしてしまいました。
それ以降select文以外のいかなる動作も受け付けなくなってしまったのですが、
どうしたらいいでしょうか?
updateやinsertを行うとmax_execution_timeの60秒まで砂時計が回っています。
0223nobodyさん2011/08/05(金) 18:22:24.61ID:???
>>222
砂時計を止める
02242222011/08/05(金) 18:57:24.85ID:kOt9+/Uj
Apacheを再起動したら解放されました。
そしてもう1度実行してみたら正常に実行されました。
無限ループにはなっていなかったようです。
一体なんだったんでしょう・・・
02252222011/08/05(金) 19:04:32.45ID:kOt9+/Uj
すみません。原因はコード戻していったところわかりました。
PDOStatement::executeメソッドをexecとしてトランザクション中に実行してそんなメソッドないとFetal Errorが出てました。
どっちみちエラーでトランザクションを正常終了できなかったために起きた現象のようですが、
Apache再起動以外に何か解決方法はあるのでしょうか?
詳しい方教えてください。
0226nobodyさん2011/08/05(金) 19:13:46.02ID:???
なんか書き込めない
0227nobodyさん2011/08/05(金) 19:16:05.07ID:???
***.php?url=
g4z5s4m453w2p22636r4r2n4x5j4u5e5l5k4l414l4r5f4r5m274s5v5w2o5q
5i4d43466r5q3t4t483y224v3e484r47404q4d4h4f406

http://とあるサイトのドメイン.com/ から始まるURLなんですけど
何形式の暗号かわかりますか?
今までbase64だったんですが変えたみたいで・・
0228nobodyさん2011/08/05(金) 19:16:32.52ID:hKMJhK9s
ID忘れました
すみません。。
0229nobodyさん2011/08/05(金) 19:52:35.53ID:???
>>225
デッドロックは書いたコードに原因がある可能性が高いので
それを出さなきゃ誰も答えられない

> PDOStatement::executeメソッドをexecとしてトランザクション中に実行してそんなメソッドないとFetal Errorが出てました。
PDO#query辺りでfalseが返ってきてるんだろうが
そこは自分でチェックしなさいよって話
http://www.php.net/manual/ja/pdo.error-handling.php

>>228
スレ違い
02302222011/08/05(金) 20:24:33.75ID:kOt9+/Uj
>>229
try {
$db = new PDO('sqlite:test.db');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$stmt = $db->prepare('insert into hoge (foo, bar) values (?, ?)');
$stmt->exec(array('aaa', 'bbb'));
$db->commit();
} catch (PDOException $e) {
$db->rollBack();
}

$stmt->execute();と書くべきところを、
$stmt->exec();という存在しないメソッドを呼び出すことにより、fetal errorが出ます。
ちなみにsetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
を指定してるにもかかわらず例外ブロックには行きませんでした。
これによりロールバックが出来ないため正常な終了ができないということだと思います。
0231nobodyさん2011/08/05(金) 20:31:48.81ID:???
>>225
try catchしなよ。
DB操作に失敗したときの処理を入れとかないと、アクセス過多な時サーバー道連れになっちゃうよ!
0232nobodyさん2011/08/05(金) 20:32:30.87ID:???
してるじゃん
■ このスレッドは過去ログ倉庫に格納されています