【PHP】下らねぇ質問はID出して書き込みやがれ 111
レス数が950を超えています。1000を超えると書き込みができなくなります。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 110
http://hibari.2ch.net/test/read.cgi/php/1314692611/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0879nobodyさん
2011/10/27(木) 01:35:53.03ID:hA0CpkPWB(A($hoge));
という書き方で速度的に差異が出てくることはあり得るのでしょうか?
0881nobodyさん
2011/10/27(木) 01:50:25.05ID:???あるかもしれないけど、誤差の範囲内
「速度」が気になる程度なら、最適化してますよってのが、中の人の言葉
0883nobodyさん
2011/10/27(木) 06:24:13.65ID:Ep9kwV/yvar_dump();すると以下のようになるオブジェクト($obj)があります
object(__PHP_Incomplete_Class)#127 (2) { ["__PHP_Incomplete_Class_Name"]=> string(23) "Zend_Oauth_Token_Access"
["_params":protected]=> array(4) { ["oauth_token"]=> string(5) "aaaaa" ["oauth_token_secret"]=> string(4) "bbbb"
["id"]=> string(3) "ccc" ["name"]=> string(4) "taro" } }
このオブジェクトからoauth_tokenなどの各要素を取り出すにはどうしたらいいですか?
$obj->oauth_tokenだと思ってやっても何も出力しません
var_dump($obj->oauth_token);の結果がNULLになります
0884nobodyさん
2011/10/27(木) 07:08:20.87ID:???0885nobodyさん
2011/10/27(木) 07:34:34.51ID:Ep9kwV/yすみません、こういうことですか?
$obj->_params["oauth_token"];
var_dump()するとNULLが返るのですが…。var_dump($obj->_params);もNULLです
勘違いしてたらすみません
0886nobodyさん
2011/10/27(木) 08:17:31.59ID:???それともそれを強引に取得したいの?
0887nobodyさん
2011/10/27(木) 08:30:09.78ID:???>session_start()の前にそのobjectのクラスの定義がされてないとかそういうこと?
今ようやく解決しました! その問題でした
objectをserialize()してセッションに入れ、別ページでunserializeして->方式で引き出そうとして
失敗していたのでした。
unserializeするページでも、objectを生成したclassをincludeしなきゃいけなかったんですね
全然知りませんでした…
予想外で最初の質問じゃ状況の情報不足になっていたと思います。すみませんでした
ありがとうございました
0888nobodyさん
2011/10/27(木) 14:24:23.89ID:Ruj7eSu+error_reporting(E_ALL);
ini_set( 'display_errors', 1 );
$url = "http://www.example.com";
try{
$client = new HTTP_Client();
$res = $client->get($url);
$response = $client->currentResponse();
$response_body = $response['body'];
}catch(Exception $e){
var_dump($e);
}
echo $response_body
例外をcatchする方法が分かりません。
上のソースで例えばurlが間違っていたなどで、getが失敗している場合に
catch節で例外の内容を出力しようとしても何も表示されないです。
pearのHTTP_Client::get()のドキュメントを見てみたのですが
(http://pear.php.net/manual/ja/package.http.http-client.http-client.get.php)
PEAR_Errorという例外を投げるとの事だったので、
catch(PEAR_Error $e)ともしてみたのですが、ダメでした。
現在はPEAR::isError()という関数を見つけたので、try catchを使わずにエラーハンドリングは一応出来ていますが、
結局なぜ上記のコードで例外が捕まえられなかったのか分かりません。
phpの例外処理の問題というより、pearの例外処理方法が異なるためにうまくいかなかったということなのでしょうか?
0889nobodyさん
2011/10/27(木) 16:21:32.01ID:???そこに何が書いてあるかだな
0890nobodyさん
2011/10/27(木) 16:34:53.87ID:HSowDPampreg_replace_callbackの場合はどのように渡せばいいのでしょうか?
preg_replace(array("/foo/", "/bar/"), array("hoge", "piyo"), $str);
preg_replace_callback(array("/foo/", "/bar/"), "callback_func", $str);
function callback_func($matches) {
switch ($maches[1]) {
case "foo":
return "hoge";
case "bar":
return "piyo";
}
}
今のところこんなのしか思い浮かばないのですが、おかしいと思うので、
どうすればいいのでしょうか?
0891nobodyさん
2011/10/27(木) 17:18:28.26ID:???マニュアルに文字列か配列で渡せるって書いてあるんだからおかしくないだろ
0892nobodyさん
2011/10/27(木) 17:31:26.65ID:HSowDPam期待している動作としては、
array("/foo/", "/bar/")という第一引数patternにたいして、
fooはhoge、barはpiyoに置き換えたいのですが、
これをpreg_replace_callbackで行うにはどうしたらいいのかという質問です。
0893nobodyさん
2011/10/27(木) 17:34:21.90ID:???preg_replace(array("/foo/", "/bar/"), array("hoge", "piyo"), $str);
preg_replace_callbackを使いたくてしょうがない年頃かな。
0894nobodyさん
2011/10/27(木) 17:36:14.24ID:HSowDPamもちろん実際の動作は違いますよ。
質問のために簡素化しただけです。
0895nobodyさん
2011/10/27(木) 17:39:44.96ID:???もっと伝える努力をしてほしいわ
0896nobodyさん
2011/10/27(木) 17:42:33.19ID:Ruj7eSu+urlを存在しないものに変更して$resをechoしたところ
php_network_getaddresses: getaddrinfo failed: Name or service not known
とだけ表示されました。
ログを見てもこの部分のエラーは一切表示されていなかったので
pearが独自にあげた例外なのかと思いました。
http://pear.php.net/manual/ja/standards.errors.php
こういうページを発見したので、これに沿ってエラー処理を行おうかと思います
0897nobodyさん
2011/10/27(木) 18:05:22.01ID:???<?php
$subject = '1foo2bar3';
$patterns = array('/foo/', '/bar/');
$callback_args = array('foo' => 'hoge', 'bar' => 'piyo');
# PHP >= 5.3
echo preg_replace_callback($patterns, function ($matches) use ($callback_args) { return $callback_args[$matches[0]]; }, $subject), PHP_EOL;
# PHP < 5.3
function my_callback_args($args = null) {
static $store;
return func_num_args() ? ($store = $args) : $store;
}
function my_callback($matches) {
$args = my_callback_args();
return $args[$matches[0]];
}
my_callback_args($callback_args);
echo preg_replace_callback($patterns, 'my_callback', $subject);
0898nobodyさん
2011/10/27(木) 19:22:31.61ID:???0899nobodyさん
2011/10/27(木) 20:27:12.05ID:???0900nobodyさん
2011/10/28(金) 00:25:57.08ID:???0901nobodyさん
2011/10/28(金) 02:50:47.24ID:OTqbk3HF一番最初のデータと一番最後のデータで特定の処理をするとき
$length=count($array);
for($i=0;$i<$length;$i++){
if($i==0){
最初の処理
}
if($i==$length-1){
最後の処理
}
}
って今やってるんですが
これってループするたびに中でifが2回実行されることになりますよね?
あいにく処理内容が
for(){
処理A
最初の処理
最後の処理
処理B
}
のようになってるので
最初の処理
for(){]
最後の処理
には出来ません
何かいい方法ないでしょうか?
0902nobodyさん
2011/10/28(金) 03:07:05.10ID:???処理A
最初の処理
処理B
for(){
処理A
処理B
}
処理A
最後の処理
処理B
0903nobodyさん
2011/10/28(金) 03:08:10.88ID:???0904nobodyさん
2011/10/28(金) 03:09:28.56ID:???配列の最初と最後をとって、別の配列をforeachしたら?
で、処理Aと処理Bは関数化とか
おわったら、結合じゃだめかねぇ
0905nobodyさん
2011/10/28(金) 03:55:38.26ID:???PHPプログラマ〜のお姉さんだよぉ〜
今日はどんな質問が残ってるのかな?
徹夜仕事も終わって、まったりしているから、
どんな質問でも応えるよぉ〜
0909nobodyさん
2011/10/28(金) 13:03:21.27ID:???0910nobodyさん
2011/10/28(金) 13:07:31.14ID:???0911nobodyさん
2011/10/28(金) 13:17:39.10ID:???0912nobodyさん
2011/10/28(金) 13:22:27.11ID:???0913nobodyさん
2011/10/28(金) 13:23:55.16ID:???0914nobodyさん
2011/10/28(金) 13:31:57.63ID:???0915nobodyさん
2011/10/28(金) 13:37:26.18ID:GC2HTreFSRPMを見ると、かなりのpatchが同梱されていますが
これらのpatchはどこで公開されているのでしょうか?
0916nobodyさん
2011/10/28(金) 17:40:31.05ID:ZIFDplY1ローカルサーバーでphpを書いてテストして、完成したらそのphpをオンラインサーバーにアップロードするのが普通かと思いますが
そのphpが大量のデータを作成し、それを読み込むスクリプトの場合
実行しているオンラインサーバーには大量のデータが作成されますが
テストでしか使っていないローカルサーバーにはにはそれが無く、テスト時と実行時に環境の差が生じてしまいますよね
その場合、開発はどのように行えば良いのでしょうか。
開発時に毎回オンラインのサーバーのデータを全部ダウンロードして、ローカルサーバーとオンラインサーバーを完全に一致させる必要があるのでしょうか。
0917nobodyさん
2011/10/28(金) 17:54:12.25ID:???0918nobodyさん
2011/10/28(金) 18:09:08.66ID:???サーバ上に同じようなテスト環境つくってもいい
テスト用のデータをあらかじめ作っておくってのもよくつかわれる
0919nobodyさん
2011/10/28(金) 18:19:34.11ID:???マ板で聞けよ
0920nobodyさん
2011/10/28(金) 18:31:30.87ID:X9Y4GnfIだいたいあなたねーもう
windowsで動いていてもlinuxで動かない場合もあるんだから。
バージョンをかえただけでもうごかない可能性もあるし、
javaだってonce write any whereとかかっこいいこと言っているけど
実際バージョンを変えたらうごかなかったりして、先輩がtomcatで
エラーが出て真っ青になって、帰ってこなかったこともあるんだから
0921nobodyさん
2011/10/28(金) 19:13:59.75ID:Y9S4pT3o(
[hoge] => Array
(
[0] => Array
(
[0] => 10
[1] => 20
)
[1] => Array
(
[0] => 11
[1] => 21
)
[2] => Array
(
[0] => 12
[1] => 22
)
)
)
こんな感じの配列から、
hoge[n][0]を配列としてまとめたいのですが、
$new_array = array();
foreach ($array['hoge'] as $value) {
$new_array[] = $value[0];
}
より効率のいいやり方ないでしょうか?
0923nobodyさん
2011/10/28(金) 19:48:59.01ID:NR/rAN+Gデータベースへの登録はPDOにてprepare()->bindParam()->execute()の流れで登録、
出力はSmartyにてdefault_modifiers = array('escape:"htmlall"')を設定した場合、
勝手にエスケープ処理してくれると思うのですが、
この場合、個別にaddslashes()やhtmlspecialchars()などを使用する必要があるのでしょうか?
0926nobodyさん
2011/10/28(金) 20:52:16.01ID:9b9GvFAK$a = "dog";//string型
$b = "/var/path/hoge.jpg";//string型
$objX->act($a, $b);
class objX{
function act($a, $b){
//$a $bを使った処理
}}
とすると、処理が正常に行われず、以下のようにすると正常に処理されます
$objX->act($a);
class objX{
function act($a){
$b = "/var/path/hoge.jpg";//もしくは $b = $sessionFile;//セッションに入れておいた画像のパス
//$a $bを使った処理
}}
処理はtwitterに画像を投稿するものです
どちらもmethod内部まで引数の値をただしく持ち込めています
なぜ上は失敗して下は成功するのかわかりません
上が失敗するといっても、apacheのerrorログにfatal errorが出たりはしません
apiの操作部分(tmhOAuth利用)は全く同じです
オブジェクトの操作でルール違反のようなことをしてしまってるのでしょうか?
引数にパスを持たせられないなんてことないですよね…?
ソース全部のせるのは長過ぎるのでまとめました。わかりにくかったらすみません
よろしくお願いします
0927nobodyさん
2011/10/28(金) 21:02:37.52ID:GPFppW98ここのページの
PDOStatementの主なメソッド(1/2)
のexampleのコードなんですが
$stmt = null;
という記述は必要なのでしょうか?
最初のinsertのあとには使ってなかったり
一番最後にも使ってなかったり
この$stmt = null;が何をしてるのかわかりません
どなたか解説していただけませんか?
0928nobodyさん
2011/10/28(金) 21:08:12.52ID:???そのgdgdっぷりはただのミスだと思うよ
0930nobodyさん
2011/10/28(金) 21:11:53.51ID:???Smartyスレで
>>926
そのコードに問題らしい部分はないので
再現する最小のコードを用意してくれ
>>927
GCを働かせて結果セットに使っているリソースを開放している
0931927
2011/10/28(金) 21:22:17.97ID:GPFppW98$stmtを上書き(表現が悪かったらすみません)した段階で
GCは勝手にやってくれると思ってたのですが
こんな感じに入れないとだめなんですね
最初のはミスだとして
最後のはスクリプト終了でそこでGCが働いてくれるので入れてない感じでしょうか?
0933nobodyさん
2011/10/28(金) 21:32:10.54ID:???0934931
2011/10/28(金) 21:40:15.22ID:GPFppW98ありがとうございます
ということは明示したい時に使う感じですかね
参考になりました
0935nobodyさん
2011/10/29(土) 00:27:34.93ID:hOXCKMki送信するデータのkey=valueのvalue(文字列)が@で始まってる場合はどうしたらいいのかわかりません
$params = array("status"=>"@john hello!");
curl_setopt($c, CURLOPT_POSTFIELDS, $params);
というパターンです
このままやるとエラーを起こしてしまい送信できません
$params = array("status"=>"\@john hello!");
とすると、そのまま\@と送信されてしまいます
すみません、どなたか教えてください。よろしくお願いします
0937nobodyさん
2011/10/29(土) 01:15:05.74ID:qiLS6tIXxdebug2.1.2
で
xdebug.auto_trace = 1
にしてphpMyAdminを表示しようとすると、
child pid xxxx exit signal Segmentation fault (11)
が出ます。
これ俺だけですか?
0938nobodyさん
2011/10/29(土) 03:50:33.41ID:B55r+SR2function GetHoge(){
$hoge = &$_SESSION['hoge'];
return $hoge;
}
$hoge = GetHoge();
$hoge['count']++;
print $_SESSION['hoge']['count']; // 増えない
0939nobodyさん
2011/10/29(土) 08:03:29.31ID:wKzusWO5$a = 1;
}
function b(){
global $a;
print $a;
}
この時$aに値が入っておらず表示されません。この場合function bの中で一度a()を実行するしかないのでしょうか?
0943nobodyさん
2011/10/29(土) 09:26:54.59ID:hOXCKMkiありがとうございます
urlencode()はどのタイミングでしたら良いんですか?
$params = array("status"=>urlencode("@john hello!")); ってことですか?
cURLで他のサーバに転送するのが目的なんですが、urlencode()すればエラーが起きない代わりに
転送先のwebアプリにも %40john+hello で登録されます
つまり文章が日本語だったらそれもurlencode()された状態で登録されてとんでもないことに…
curlのオプションも見てるんですがさっぱりわかりません…
0944nobodyさん
2011/10/29(土) 09:46:30.79ID:???それか 5.2.0以後なら 配列じゃなくて "status=@john hello!" って渡すか。
0945nobodyさん
2011/10/29(土) 10:29:58.47ID:???class T
{
private function a() {
static $a = 1;
return $a++;
}
public function b(){
echo $this->a(), PHP_EOL;
}
}
$t = new T();
echo $t->b();
echo $t->b();
echo $t->b();
0946nobodyさん
2011/10/29(土) 10:45:37.89ID:???0947nobodyさん
2011/10/29(土) 10:53:45.80ID:???0948nobodyさん
2011/10/29(土) 11:01:05.43ID:???0949nobodyさん
2011/10/29(土) 11:11:41.92ID:???0950nobodyさん
2011/10/29(土) 12:39:05.38ID:???0951nobodyさん
2011/10/29(土) 12:47:12.97ID:???話をややこしくしてるだけなのに擁護する理由がわからない
質問者が何を求めてるのか理解できないなら回答すべきでない
0952nobodyさん
2011/10/29(土) 13:35:53.55ID:???0954nobodyさん
2011/10/29(土) 14:16:19.35ID:???0957nobodyさん
2011/10/29(土) 16:14:14.78ID:???function & f() { return $_SESSION['hoge']; }
$hoge =& f();
0958nobodyさん
2011/10/29(土) 18:42:22.61ID:hOXCKMki@だけエンコードというのも駄目でした。アプリにわたす時点で@が%40になったままです
status=@john hello!というのはURLの最後につけてget方式でわたすわけですよね?
それもダメでした
curl_setopt($c, CURLOPT_POSTFIELDS, $params);
curlにパラメータをセットしてるので、これから先はPHPそのものをいじらなきゃいけなくなり
自分にはとても無理です
オプションの設定で解決できる、もしくは解決法がある問題なんでしょうか
curlのマニュアルを読んでると、コマンドラインから操作する場合はパラメータ1つ一つに
パラメータのテキスト;type=text/plain という形でデータ型を明示できるみたいですが
"@john hello!;type=text/plain"としたらくっつけたタイプ部分まで本文として送信してしまいました
何か良いアイディアないでしょうか…
0960nobodyさん
2011/10/29(土) 19:44:44.39ID:???これで試してみ
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
0961nobodyさん
2011/10/29(土) 20:07:18.84ID:hOXCKMkiありがとうございます
これはGETで対象サーバに送信することになるんですよね?
エラーを起こしたので調べてみたら相手側がPOSTのデータしか受け付けない仕様になってるようで
無理っぽいです
しょうがないですね…
残念ですが諦めます。他の人たちもありがとうございました
0962nobodyさん
2011/10/29(土) 20:26:10.60ID:TSLcC47t1から2は共通処理の重複をなくして、
2から3はif文より早いとされるswitch文でかいてみました。
$hoge&&$piyoの状態では何もしません。
こんな感じでだんだんいい感じになってますでしょうか?
だめだしあればお願いします。
1.
if($hoge && !$piyo) 共通処理 処理 共通処理
elseif($piyo && !$hoge) 共通処理 処理 共通処理
2.
$a=0; $b=0;
if($hoge) $a=1;
if($piyo) $b=1;
if(($a+$b)==1)
共通処理
if ($a) 処理
if ($b) 処理
共通処理
3.
$todo=0; $count=0;
if($hoge) $todo=1; $count++;
if($piyo) $todo=2; $count++;
if($count==1)
共通処理
switch($todo)
case 1: 処理 break;
case 2: 処理 break;
共通処理
0964nobodyさん
2011/10/29(土) 20:42:56.15ID:???こっちじゃ出来るけど CURLOPT_POST = true と併せて試したか?
そもそもCURLを諦めてストリームコンテキストを使う手もある
http://www.php.net/manual/ja/function.stream-context-create.php
0966nobodyさん
2011/10/29(土) 20:57:47.47ID:UZeloiLz設計に無理があるといったらそうなのですが
あるフォームでsubmitボタンを複数配置して
押されたボタンのname値によって処理を分けています
ようするにvalueは飾りなのですが
こういう設計ってありですか?
あと普通はブラウザから1つのボタンを押してnameが1つ送られてくるわけですが
例えば上の人みたいにcurl使って複数のnameをPOSTしてきた場合困るのですが
想定外の普通のブラウザからの操作以外も考慮してコーディングすべきでしょうか?
0967962
2011/10/29(土) 21:02:16.86ID:???確かこんな書き方があったなぁと・・・32行に収めるために無理して書きました。
意味はだいたい分かって頂けると思ったのですが、
コードの意味が分からなかったらすみません。
0969nobodyさん
2011/10/29(土) 21:23:02.90ID:???操作対象1つにつき1ボタン
if ($_POST['post']) {
} else if ($_POST['edit']) {
} else if ($_POST['delete']) {
}
上から重症になりにくい順で実行してた
セレクトボックス+ラジオボックスにして
操作選んで操作対象選んで
if ($_POST['mode'] == 'post') {
} else if ($_POST['mode'] == 'edit') {
} else if ($_POST['mode'] == 'delete') {
}
にしたほうがよかったのはわかってても
ワンクリの魅力があるから難しいね
0970nobodyさん
2011/10/29(土) 21:44:33.98ID:???0971nobodyさん
2011/10/29(土) 21:53:47.02ID:???うう、ご親切にすみません
上で書いた箇所だけの問題だと思ったので書かなかったんですが
tmhOAuthを使ったOAuth認証とあわせてtmhOAuthの中で実行されるcURLの処理なんです
>>960さんのやり方だとパラメータの送信リクエスト自体はOKなようですが
oAuth認証が通らないといわれてしまい、大前提で失敗してました
しかし、PearのHTTP_request2とHTTP_OAuthを組み合わせたらいけるかも!
頑張ってみます
ありがとうございました
0973nobodyさん
2011/10/30(日) 01:58:47.46ID:???if (!!$hoge ^ !!$piyo) {
共通処理
if ($hoge) 処理
if ($piyo) 処理
共通処理
}
0974nobodyさん
2011/10/30(日) 05:32:57.40ID:3CLjR3Ux0975nobodyさん
2011/10/30(日) 12:29:42.57ID:???0976nobodyさん
2011/10/30(日) 13:20:36.61ID:ASGcT8eGphp-mysqlが必要としているlibmysqlclient.so.15のバージョンが違うのですが
libmysqlclient.so.15をどこかから探してきて
ライブラリのディレクトリに入れるだけでちゃんと動きますか?
0977nobodyさん
2011/10/30(日) 13:26:05.39ID:M82Zs8HPどうしたらいいですか?
php.iniで時間エリアの指定とかhttpd再起動とかはしたんですがなおりません
0978nobodyさん
2011/10/30(日) 13:56:53.00ID:???レス数が950を超えています。1000を超えると書き込みができなくなります。