【PHP】下らねぇ質問はID出して書き込みやがれ 111
レス数が900を超えています。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等)・フレームワークは各該当スレへ
0813nobodyさん
2011/10/26(水) 13:10:03.67ID:???そもそもなんでlengthを必要とするの?
具体的に言いもせずに分かる訳無いだろ・・・
substrはlengthなくても使えるよ?
0814nobodyさん
2011/10/26(水) 13:12:24.79ID:???2文字目から8文字目までを出したいときに、 substr(1,7)の 7の計算がめんどくさいらしいっすよ。
0815nobodyさん
2011/10/26(水) 13:17:44.37ID:???文字列をstartとendで切り取るって言ってるだろうwなんだよ。。
俺はそうそう!みたいなのを期待してたのにこうも違うかね〜
>>814
だってさ、それをするのに文字列の長さ・引き算が必要なんだよ?実際には関数作れば済む話だが。
他の主要言語はみんな実装してるのに、PHPが実装しないのには訳があるのかなって思ってな。
0816nobodyさん
2011/10/26(水) 13:19:48.62ID:???RubyとJavascriptと?
0817nobodyさん
2011/10/26(水) 13:27:27.36ID:???PHPは豊富な関数が取り柄みたいなとこもあるから、余計になんで?って思うんだよ。
0818nobodyさん
2011/10/26(水) 13:39:06.52ID:???0819nobodyさん
2011/10/26(水) 13:43:41.54ID:???具体的にしたい事を言わないから
やりたい事が理解してもらえないんだろ
startとendで切り取るって言っても
>>814の例だとjavascriptなんかでもやる事は同じだろ
無いとすればlengthプロパティだろ?
"test".slice(2) jsでこの結果はst
これをphpですると
substr("test",2)
こうなるだけだろ
何がしたいの?
"test".slice(1,3) jsでこの結果はes
これをphpですると
substr("test",1,3)
????
0820nobodyさん
2011/10/26(水) 13:49:16.66ID:???pythonやjsでいうsliceはsubstrで出来る
0821nobodyさん
2011/10/26(水) 13:49:27.80ID:???いや、最後の 1,3だとestになるから 1,3-1にしなきゃいけないのがどうにも苦痛みたいなんだよ。
みんなになんでだと同意を求めたくなるほどに。
0822nobodyさん
2011/10/26(水) 13:52:27.40ID:???0823nobodyさん
2011/10/26(水) 13:55:01.43ID:???出来る、出来ないじゃなくて超基本的な処理なんだからPHPが用意しろよってこと。
>>815の文字列の長さはいらないね。カキコの時にミスってる。
>>819
lengthはsubstrの引数名な。
0824nobodyさん
2011/10/26(水) 13:57:29.93ID:???puts "test".slice(1, 2)
print("test"[1:2])
echo substr('test', 1, 3);
おまえさんが求めてるpythonでやれば言いだけの話
rubyとphpに君は向いてないだけだ
0825nobodyさん
2011/10/26(水) 13:58:00.09ID:???言語仕様についてここに答え持ってる奴はいないでしょ。
0826nobodyさん
2011/10/26(水) 14:00:03.33ID:???0827nobodyさん
2011/10/26(水) 14:01:03.91ID:???0828nobodyさん
2011/10/26(水) 14:01:32.26ID:???php: substr(str, start, end-start+1);
上のほうが直感的で読みやすいし、PHPにしても利用する場合は関数にしてしまうと思う。
でも、みんなが独自に関数にするんだったらPHP側で用意しろってのは真っ当な意見だろ?
理解してくれそうにないんでここらへんで解散するわ。
0829nobodyさん
2011/10/26(水) 14:01:46.62ID:???0830nobodyさん
2011/10/26(水) 14:04:54.22ID:???確かにsliceの需要はあって、現状は各々が補っている状態だからね。
0831nobodyさん
2011/10/26(水) 14:07:14.01ID:???0832nobodyさん
2011/10/26(水) 14:11:15.13ID:???0833nobodyさん
2011/10/26(水) 14:21:06.50ID:???しかも俺の思ったことに同意しろ、出来ないやつらばかりだからいやだみたいなのは変だろ。
0834nobodyさん
2011/10/26(水) 14:22:29.14ID:???あれか、JSの場合sliceじゃなくJSのsubstrが欲しいという事だな
始点からn文字抜き出したいと
0835nobodyさん
2011/10/26(水) 14:24:58.96ID:???文字のカウント方式なんて言語間で異なるのが普通
配列のはじめが1からの言語もあれば0からの言語もあるしな
0836nobodyさん
2011/10/26(水) 14:32:11.31ID:???0837nobodyさん
2011/10/26(水) 14:33:28.75ID:???0838nobodyさん
2011/10/26(水) 14:33:52.24ID:oGpVbHsj例えば管理画面から自分一人が使うものなら不必要ですか?
それとも管理画面に不正アクセスされることを考慮するべきでしょうか?
0840nobodyさん
2011/10/26(水) 14:45:28.31ID:???ぽまえがトイレ言っている間に泥棒が侵入したり
ねこがキーボードの上を歩いたり
意図しない結果もあるから黙って考慮しておきたまえ
0841nobodyさん
2011/10/26(水) 14:47:28.42ID:???クレーマー乙
0842nobodyさん
2011/10/26(水) 15:13:02.96ID:/kGweZxN簡単なSNSで招待メールを送るときにどのデータベースに入れたらいいか思いつかなかったんで、なんとなくGETに入れてみたんですが。。
URLみたら違和感たっぷりでセキュリティ的にまずかったりするのかなと。
0843nobodyさん
2011/10/26(水) 15:15:41.24ID:???0844nobodyさん
2011/10/26(水) 15:25:49.87ID:???そうなんですか!ありがとうございます!
新しくテーブル作ってそこに入れようかとおもってたんですが、このままGETに入れることにします。
0845nobodyさん
2011/10/26(水) 15:36:37.52ID:???オープンソースは必要な奴が実装するという事が分からない小学生か
コミッターに成れないコミュ障なんだろ
何の説明もなくsliceやlengthを出してドヤ顔する辺り、後者だと思うが
0846nobodyさん
2011/10/26(水) 15:38:04.48ID:???startからendがほしいっても、こんな感じになって結局計算することにならね?
str.slice(str.strpos(startTag) + startTag.length, str.strpos(endTag))
擬似コードだが。
>>834
始点からn文字抜き出すのはJSのsubstr、PHPもsubstr
JSのsliceがPHPにないことが不満みたい
0848nobodyさん
2011/10/26(水) 15:47:18.59ID:???説明下手すぎ態度悪すぎで答える気になれないわ
0849nobodyさん
2011/10/26(水) 15:48:12.54ID:???難しいかも知れないが、それは start と end の計算であって、slice自体に関わる計算じゃない。
0850nobodyさん
2011/10/26(水) 15:53:05.99ID:???0852nobodyさん
2011/10/26(水) 16:12:58.26ID:???0853781
2011/10/26(水) 17:32:33.76ID:???もうちょいちゃんと調べたら例外処理とsqlインジェクション対策は入れます。
複文使えないみたいだから、簡単には出来ないと思うけど必須ですね。
0854nobodyさん
2011/10/26(水) 17:46:14.09ID:???0855nobodyさん
2011/10/26(水) 18:19:33.34ID:???0856nobodyさん
2011/10/26(水) 19:57:27.03ID:gnsMAu0sうまくいきません
$url= "http://example.com/post/";
$postMsg = urlencode(mb_convert_encoding($postMsg, 'UTF-8'));
$params= array(
'status' =>"写真つきで投稿テスト",
'photo' =>"/path_to/img.jpg"
);
$headers = array('Content-Type: multipart/form-data',);
$requestOptions = array(
'http' => array(
'method' => 'POST',
'header' => implode('\r\n', $headers),
'content' => http_build_query($params)
)
);
//POST送信
$response = file_get_contents($url, false, stream_context_create($requestOptions));
以上のようにやっているんですが、どこが間違ってるんでしょうか
画像無しの文章だけのpostは成功しました
画像ありにするために変更した点は $headersのContent-Typeと、$paramsに'photo'要素を加えただけです
おかしい点があれば教えてもらえると嬉しいです。よろしくお願いします
※実はmixiのapiなんですが、access_tokenとか不要な情報が多いので上の用に書きました
http://developer.mixi.co.jp/connect/mixi_graph_api/mixi_io_spec_top/voice-api/#toc-10
0857856
2011/10/26(水) 20:02:48.31ID:gnsMAu0s↓この部分は
$postMsg = urlencode(mb_convert_encoding($postMsg, 'UTF-8'));
$params= array(
'status' =>"写真つきで投稿テスト",
'photo' =>"/path_to/img.jpg"
);
↓これが正しいです
$postMsg = "写真つきで投稿テスト";
$postMsg = urlencode(mb_convert_encoding($postMsg, 'UTF-8'));
$params= array(
'status' =>$postMsg,
'photo' =>"/path_to/img.jpg"
);
0858nobodyさん
2011/10/26(水) 20:10:19.33ID:???APIの使い方なんて自分で解決するか聞くべきところで聞いてください
APIの仕様は無視して自力で
>対象サーバにメッセージと画像をpost送信したい
を実装するならcURL使うとかアドバイスできるけども
0859nobodyさん
2011/10/26(水) 20:13:36.20ID:???$str = htmlspecialchars($str,ENT_QUOTES);
これだけで普通に対策になりますよね?
mysql_query("INSERT INTO table1 VALUES('$str');
例えばこれで。破れませんよね?
0861nobodyさん
2011/10/26(水) 20:26:49.64ID:+IPZs/bK[foo]=>array(
[2]=>1
[3]=>1
[5]=>0
)
)
のような、中身は1か0といった配列で、
この中の中身が1である配列の[foo][bar]のbarを求めたいんですが、
どうしたらいいですか? よろしくお願いします
barは連番でもないし、順番もばらばらです
よろしくお願いいたします
0865856
2011/10/26(水) 20:58:41.25ID:gnsMAu0sすみません
じゃ、apiということは無視して、file_get_contents($url, false, stream_context_create($requestOptions));で
「リクエストボディを指定する」という場合、上記のように
$params= array(
'status' =>"写真つきで投稿テスト",
'photo' =>"/path_to/img.jpg"
);
$requestOptions = array(
'http' => array(
'method' => 'POST',
'header' => implode('\r\n', $headers),
'content' => http_build_query($params)
)
);
と、$params配列で指定することだという理解で良いんでしょうか?
>>862
出来るみたいです。画像無し投稿は実際成功しましたし
0867nobodyさん
2011/10/26(水) 21:10:25.82ID:???それでいいのかい?
0868nobodyさん
2011/10/26(水) 21:14:57.17ID:???$array = array( "foo"=>array( 2=>1,3=>1,5=>0) ,"fooo" => array("x"=>1,3=>0) ,"fo"=>1 );
print_r( arrayKeyVal($array,1));
function arrayKeyVal($array,$targetVal) {
$ret =array();
foreach($array as $var=>$val)
if(is_array($val))
$ret += arrayKeyVal($val,$targetVal);
else
if($val==$targetVal)$ret[]=$var;
return $ret;
}
0869856
2011/10/26(水) 21:17:12.66ID:gnsMAu0s!!!!
確かにそうかもしれません!!すごい!
ちょっと調べてみます!
0870nobodyさん
2011/10/26(水) 21:18:44.51ID:???http://www.atyks.org/blog/2011-05-31-7.html
0872nobodyさん
2011/10/26(水) 21:37:57.87ID:vp9BXm94絞りたいのではなくてbarの値が知りたいのです
0874nobodyさん
2011/10/26(水) 21:48:52.02ID:vp9BXm94試したところ、
Array
(
[2] => 1
[3] => 1
)
となりました
この、2,3という値を取得したいんです
0875nobodyさん
2011/10/26(水) 22:02:26.02ID:vp9BXm94if ($value == 1) {
echo ($key);
}
}
$keyで取得できました
キーの値って言葉がでてこなかったのでてこずりましたが解決しました
ありがとうございました
0876nobodyさん
2011/10/26(水) 22:21:51.30ID:???なんというか、他の人よりも先にレスできていればよかったんだけれど。
print_r(array_keys($arr['foo'], 1));
0878nobodyさん
2011/10/26(水) 23:13:12.66ID:???っていうか、2chってphp使ってたっけ?
Warning: require_once(MIME/Type.php) [function.require-once]: failed to open stream: No such file or directory in /home/ulacloud6/public_html/_masuo/view.php on line 7
Fatal error: require_once() [function.require]: Failed opening required 'MIME/Type.php' (include_path='.:/usr/local/lib/php') in /home/ulacloud6/public_html/_masuo/view.php on line 7
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:???レス数が900を超えています。1000を超えると表示できなくなるよ。