【PHP】下らねぇ質問はID出して書き込みやがれ 136
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2014/08/06(水) 23:31:16.38ID:GyAfw2+q過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 135
http://kanae.2ch.net/test/read.cgi/php/1405860979/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.5
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0756nobodyさん
2014/09/05(金) 20:06:39.11ID:7KMpAsD40757nobodyさん
2014/09/05(金) 20:20:13.28ID:???0758nobodyさん
2014/09/05(金) 20:35:57.32ID:7KMpAsD4前任者の残したコードなのです。
また、大きなエラーも起こらない箇所だったためずっと発見されませんでした(別件で眺めていたら偶然見つかりました)。
たまたまうまく動いていたのか、これが意図したものなのかもわからず、そもそもこれがどういう動作なのかも分からない次第です。
他にも
if( $check == ok ){
・・・}
というやや変わった書き方をする方でした
(この場合、okが文字列定数として宣言され、$checkには"ok"が入ります)
0759nobodyさん
2014/09/05(金) 20:56:21.13ID:???PHP5なら今ちゃんとNOTICE出るでしょ?
エラーレポートきってなければ
0762nobodyさん
2014/09/05(金) 21:58:42.00ID:???0763nobodyさん
2014/09/05(金) 22:00:28.79ID:???abc()をオブジェクトと解釈してるのか?
phpは変なところでザルだな
0764nobodyさん
2014/09/05(金) 22:02:06.98ID:???0765nobodyさん
2014/09/05(金) 22:27:27.57ID:???abc()の返り値が単にオブジェクトなんじゃない
そのプロパティaを$bに代入してるだけ
中身がないなら実装しかけて途中で止めたように思う
その結果aと$bがNULLになってるだけ
0766nobodyさん
2014/09/06(土) 07:05:33.93ID:???function abc(){}
$b= abc();
var_dump($b);
でもNULLになるよね
だとすると、
$b= abc()->a;
は何をやってるの?
$b = NULL->a;
だとsyntax errorになるし
こういうとこはPHPの謎仕様だよね
0767nobodyさん
2014/09/06(土) 12:19:35.24ID:1c97VfqGよくわかるPHPの教科書 【PHP5.5対応版】
これのpdf版を買った場合、
1、パソコン、スマートフォン、両方で見れるか?
2、テキストのコピペは出来るか?
ご存じの方がいたら教えてください。
0768nobodyさん
2014/09/06(土) 13:06:14.47ID:???>$b= abc()->a;
>は何をやってるの?
abc()はnullを返しているが、その後、プロパティaを呼び出そうとしている。
そのため、その時点でabc()の返り値がオブジェクトに自動型変換されている。
多分だけどね。
http://php.net/manual/ja/language.types.object.php#language.types.object.casting
オブジェクト以外の型の値がオブジェクトに変換される時には、
stdClass というビルトインクラス(予めPHPの内部で定義されているクラス)の
インスタンスが新しく生成されます。
その際、値が null の場合は新しいインスタンスは空となります。
0769nobodyさん
2014/09/06(土) 14:08:06.36ID:???はー、なるほどね
暗黙の型変換をそんなとこでやりますかって感じだね
Warningが出るようにはなってるようだけど
0770nobodyさん
2014/09/06(土) 14:14:17.34ID:???PHP Notice: Trying to get property of non-object
~~~~~~~~~~
0771nobodyさん
2014/09/06(土) 14:22:11.96ID:???768は俺だけど、そういうエラーが出るなら768の説明は誤りだね。
ゴメンなさい。
単純にプロパティを取得できなかったからnullってことかな。
0772nobodyさん
2014/09/06(土) 14:24:26.39ID:???そ。変換もしていない
if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
zend_error(E_NOTICE, "Trying to get property of non-object");
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
0773nobodyさん
2014/09/06(土) 15:20:59.58ID:???あー、なるほど
でも普通ならエラーで落とすよね、そういうの…
なんでNotice出してNULL返してるんだろう
0774nobodyさん
2014/09/06(土) 15:37:00.11ID:???0775nobodyさん
2014/09/06(土) 16:10:52.18ID:???0776nobodyさん
2014/09/06(土) 17:09:18.43ID:dSDmY/HD【PHPのバージョン】5.x
【連携ソフトウェア】Apache PostgreSQL
【質問内容】
Windowsでphp使う場合オススメバージョンとか
あるのでしょうか?
5.3だとmb_系で問題が出やすいとか聞いたことがあります
Apacheを利用するWebシステムを考えてます
0777nobodyさん
2014/09/06(土) 17:35:15.40ID:???ない
なぜならPHPという時点で全てゴミだから
どのバージョンでもセキュリティホールがあって使い物にならない
IT犯罪者にお前のサーバーを踏み台として提供したいなら
どのバージョンでもおすすめ
0779nobodyさん
2014/09/06(土) 20:52:48.11ID:g9801Nhj括弧の中を短くすることはできる?
0780nobodyさん
2014/09/06(土) 21:11:16.31ID:krxgWugX0781nobodyさん
2014/09/06(土) 21:17:32.10ID:???preg_match
in_array
is_int
などなど
0782nobodyさん
2014/09/06(土) 21:56:21.18ID:???上記の文字をランダムに時にはあいうえお、時にはかきくけこ時にはさ(ry
っていうふうにするにはどうすればよいのですか?
シャッフル巻数を使っても難しかったです
0784nobodyさん
2014/09/06(土) 22:16:47.65ID:???そしたらちゃんとランダムに並び替わるだろ
それを1行目のように全角空白でわけてくっつけたいってことなら
implodeでも使え
0785nobodyさん
2014/09/06(土) 22:58:17.31ID:t0tdVzSH組み込みの関数ってありますか?
$arr = array('cat' => '猫', 'dog' => '犬');
$newArray = 関数($arr, array('dog', 'human'));
// $arr から、`dog` と `human` のキーのみを(存在すれば)残し、それ以外は解除
宜しくお願いします。
0786nobodyさん
2014/09/06(土) 22:59:48.60ID:t0tdVzSH上記の操作の場合の $newArray に期待される戻り値は
Array('dog' => '犬')
です。
0788nobodyさん
2014/09/06(土) 23:33:51.01ID:???0789nobodyさん
2014/09/06(土) 23:53:32.58ID:t0tdVzSH自作して使いまわしてたんだけど、ひょっとしたらあるのかな?
ということで質問しました。
ありがとう
0790nobodyさん
2014/09/06(土) 23:54:44.63ID:???0791nobodyさん
2014/09/06(土) 23:59:43.57ID:???例えそれで出来たとしてもビルトインでどうにかするって趣旨とちょっとずれとる
0792nobodyさん
2014/09/07(日) 02:41:04.02ID:???0793nobodyさん
2014/09/07(日) 03:08:27.92ID:???$arr = ['cat' => '猫', 'dog' => '犬'];
$newArray = array_intersect_key($arr, array_flip(['dog', 'human']));
var_dump($newArray);
0794nobodyさん
2014/09/07(日) 06:25:32.76ID:???0795786
2014/09/07(日) 09:22:19.39ID:NG+JTjgmありがとう。
これが一番シンプルですね!
これから書きかえます。
0796nobodyさん
2014/09/07(日) 10:54:13.04ID:x9VgIn4E0797nobodyさん
2014/09/07(日) 13:20:42.73ID:???コードは長くなるけどコストもパフォーマンスも断然上。
0798nobodyさん
2014/09/07(日) 14:17:05.48ID:???可能性として。
それともソース読んだか、あるいはベンチマーク取って断言してんの?
0799nobodyさん
2014/09/07(日) 14:58:16.13ID:???この場合array_flipとか結果を完成させるには必要でも強引で冗長な関数である
ケースバイケースで$arrを増やす分には>>793が早いが
array_flipの中の配列を増やせば逆転してforeachのほうが早くなる
まぁ気にしなくていいんじゃない?そんなアホみたいに配列増やさんでしょ。
0800nobodyさん
2014/09/07(日) 15:01:26.56ID:???気にするならそもそもPHPを使ってる時点で異常
0801nobodyさん
2014/09/07(日) 15:01:32.23ID:x9VgIn4E可読性や保守性が高いコードのほうがよっぽど良いコード
0802nobodyさん
2014/09/07(日) 15:05:35.13ID:x9VgIn4E無駄にワンライナーで書いてみたり
0804nobodyさん
2014/09/07(日) 15:09:16.51ID:???にすれば早いけどこれはバッドプラクティスだな
0805nobodyさん
2014/09/07(日) 15:17:56.12ID:???0807nobodyさん
2014/09/07(日) 16:38:07.84ID:???>>804 もいいんじゃないかなーと思わんでもない
0808nobodyさん
2014/09/07(日) 19:52:10.47ID:nS7G6ATN【OS名】Windows7
【PHPのバージョン】
【連携ソフトウェア】ホームページ転送にFFFTP、エディタにTeraPadを使用しています。
【質問内容】
現在ホームページを作成しています。
そこで新たにPHPによる掲示板の作成を検討しています。
公式PHPのドキュメントを読んでおり、PHPをインストールしようとしているところです。
http://windows.php.net/download/
このページでWindows用のものをインストールする予定ですがいくつかパッケージがあり、
どれを選択して良いのかわかりません。
どれが私が使用する場合適切でしょうか?
0809nobodyさん
2014/09/07(日) 20:03:22.63ID:???0810808
2014/09/07(日) 20:09:32.57ID:nS7G6ATNすいません、意味が違いましたか。
サーバーOSというのがよくわからないのですが。
0811808
2014/09/07(日) 20:10:54.70ID:nS7G6ATNはい、ローカルマシンのOSです。
0812nobodyさん
2014/09/07(日) 23:51:00.50ID:???ホームページ転送にFFFTPを使うと書いているので。
まぁなんであれ、httpdには何を使ってますか。
0813nobodyさん
2014/09/08(月) 02:18:53.14ID:???1. 本番環境(現在借りてるレンタルサーバ)のphpinfoを調べる。
レンタルサーバのWebサイトに書いているか、書いていなければ、
<?php phpinfo(); ?>
と書いたinfo.phpという名前のスクリプトを用意して、レンタルサーバにアップロード。
そしてinfo.phpにアクセスして、本番環境のPHPの情報(バージョンや使用可能な拡張モジュール)を調べる。
2. そのへんの配布されている掲示板スクリプトをダウンロードして設置する場合、
配布者が動作させるために必要な動作環境を書いているはずなので、
1で調べた情報を見て、動作可能かを判断し、可能なら配布者の説明に従い設定を行いアップロードして設置する。
3. もし配布物を使うのでなく、自分でプログラムして掲示板を作りたい場合、
プログラムの誤動作で本番環境に迷惑をかけないために、
ローカルマシン(自分のパソコン)にテスト環境を用意する。
バージョンは本番環境より古くすると、本番環境で使えるであろう機能が使えないので、
用意するバージョンは、1で調べた本番環境より新しくしたほうが良い(最新でも良い)。
ただし逆に新しすぎる機能も本番環境では使えないし、
本番環境では使えても、新しいバージョンでは廃止された機能もあるかもしれないので、
1で調べた情報を元に本番環境に合わせたプログラムを行う事。
OSごとに挙動が違う関数もあるので、本番環境のOSが異なる場合は注意すること。
ちなみにテスト環境は他にもApacheなどのhttpdが必須で、
本番環境でも使用可能なら、必要に応じてMySQLなどのRDBMS、sendmailなどのMTAを用意する必要がある。
聞いたことない用語ばかりだろうし初心者には大変なので、3まで手を出す場合、
テスト環境はxampp(上記の必要になるソフトウェアをパッケージ化したもの)でさっくり用意したらいい。
ただし本番環境に合わせるため、最低限php.iniぐらいはいじれるようにしたほうがいい。
0814nobodyさん
2014/09/08(月) 02:25:21.23ID:???長文おつかれさまです。
> PHPをインストールしようとしているところです
まぁ、今使ってるWebサーバにPHPが既にインストールされてる確率は高いけど。
0815nobodyさん
2014/09/08(月) 08:57:24.70ID:???0816nobodyさん
2014/09/08(月) 09:15:19.29ID:???windows用っていってんだからそうなんでしょう
共有に最初から入ってるとしてもどのみちローカルに用意するのは常識
0817nobodyさん
2014/09/08(月) 23:43:32.81ID:KMZVTFPO0818nobodyさん
2014/09/09(火) 01:35:17.80ID:???文章を入れ替える、写真を入れ替える、メニューを増やす、といったレベルです
初心者のペーペーですが是非教えてください
0819nobodyさん
2014/09/09(火) 01:38:45.29ID:???0820nobodyさん
2014/09/09(火) 03:27:51.46ID:???0821nobodyさん
2014/09/09(火) 04:36:53.77ID:???0822nobodyさん
2014/09/09(火) 12:19:44.05ID:???0823nobodyさん
2014/09/09(火) 12:24:48.16ID:???XAMPPにはPython入ってないから後で追加するけど
個々に入れるのはだるびっしゅ
0824nobodyさん
2014/09/09(火) 12:34:32.20ID:3hE1eGsmhttp://--------/?q=qhd+j97/a&別の引数…
みたいな引数になるのですが
プラスとかスラッシュの特殊文字が入っていても
"qhd+j97/a"という文字列として受け取りたいです。
引数には+が入ってるかどうかは分かりませんが
入ってる可能性がありえます。
また引数の仕様はこちらではいじれない想定です。
ので、引数の+を別の文字に置き換えることはできません。
なかなか上手く引数がとれず…
どなたか解決手段分かる方おしえて頂けませんでしょうか?
0825nobodyさん
2014/09/09(火) 12:36:44.30ID:???0826nobodyさん
2014/09/09(火) 12:46:11.78ID:???parse_url()
0827nobodyさん
2014/09/09(火) 12:47:59.56ID:G9qytFmcURLはこちらでいじれないので
受け側のPHPの方でなんとかする必要があります。
引数をurlencodeできれば解決するのですが
そこはこちら側でいじれないのです
という仕様で
受け側のPHPのスクリプト内でどうにかする方法は
ありませんでしょうか?
0828nobodyさん
2014/09/09(火) 12:53:09.11ID:G9qytFmcありがとうございます。
調べて試してみます。
0829nobodyさん
2014/09/09(火) 16:40:05.18ID:???0830nobodyさん
2014/09/09(火) 17:59:57.25ID:mtYzFF/72chのVIPのIDかどうかを正規表現で調べたいのですが
IDが0-9a-zA-Z+/の64個の文字の9桁で出来ています
これを
/^[a-zA-Z0-9\+\/]{9}?$/
で正規表現を作ってみたのですが
IDに+が入った時にマッチしません
+も[]にエスケープして入れているのに
何故なんでしょうか?
PHPでやっています
0831nobodyさん
2014/09/09(火) 18:00:34.75ID:mtYzFF/7>>860
ダメでした
>>862
if(isset($_GET['id'])) {
$id = $_GET['id'];
if(preg_match('/^[a-zA-Z0-9\+\/]{9}?$/', $id)){
echo "IDです<BR>";
}else{
echo "not ID<BR>";
exit(-1);
}
}
が最小限のコードです。
と、書きつつ他の原因を調べてたところ
GETからIDを取ってるところが怪しいようです。
$idを表示させたらちゃんとIDが表示されるのですが
preg_matchではちゃんと機能してくれません。
文字列リテラルで直接ソースにIDを書き込んだら
preg_matchがちゃんと機能してくれました。
正規表現とは別の問題っぽいので
質問は取り下げさせて頂きます。
みなさまありがとうございました。
0832nobodyさん
2014/09/09(火) 18:09:55.47ID:???0833nobodyさん
2014/09/09(火) 19:08:37.29ID:???> preg_matchではちゃんと機能してくれません。
> 文字列リテラルで直接ソースにIDを書き込んだら
> preg_matchがちゃんと機能してくれました。
この流れが解せない
0834nobodyさん
2014/09/09(火) 19:35:15.13ID:???0835779
2014/09/09(火) 20:07:11.33ID:zphkCoGlありがとう!!
0836nobodyさん
2014/09/10(水) 02:27:48.27ID:oD1K+9rjありかとうございます。
これでいけました!
0837nobodyさん
2014/09/10(水) 10:23:54.55ID:???0838nobodyさん
2014/09/10(水) 20:45:36.35ID:8d0s7q5t【PHPのバージョン】 5.3.5
【連携ソフトウェア】xampp windows版1.7.4
【質問内容】
postでphp側に送られて着た値は信用できない値ということで、
19桁の数字以外はfalseを返すような仕様にしようと考えています。
このようなコードでよろしいでしょうか?
$id=$_POST['id'];
$count=false;
//idが数字19桁でないならfalseを返す
if (preg_match("/^\d{19}$/", $id)){
//処理〜 一部略
$count = $counter->log( $id );
}
$foo=array("count"=>$count);
echo json_encode($foo);
0839nobodyさん
2014/09/11(木) 01:48:08.83ID:???0840nobodyさん
2014/09/11(木) 02:05:41.45ID:???0842nobodyさん
2014/09/11(木) 07:43:13.72ID:???0843nobodyさん
2014/09/11(木) 10:21:07.50ID:???それだと
値の末尾に %0A がある場合
$id = "0123456789123456789".chr(10); みたいな場合でも通るで。
preg_match("/\A\d{19}\z/", $id) 使え。
0844nobodyさん
2014/09/11(木) 10:30:46.63ID:???RHEL6とかまだ主力ディストリだしね。
プロダクション環境次第な気がする。
>>838
ざっと見いい感じだけど、
気になるならCLIでpreg_matchの部分など煮詰めればいいじゃん。
それ以外のことなら、何を意図してるのかも書いて。
0845838
2014/09/11(木) 20:06:31.11ID:7j43Ddlkそれだと
>値の末尾に %0A がある場合
>$id = "0123456789123456789".chr(10); みたいな場合でも通るで。
>preg_match("/\A\d{19}\z/", $id) 使え。
このような挙動は知りませんでした。preg_match("/\A\d{19}\z/", $id) を
使うことにします。
>>844
やろうとしていることはページ毎のアクセス数を表示させるために、
Javascriptでページの名前19桁の数字をphpにおくり、その数字(id)で
$file = $this->log_dir . $id . '_' . md5($this::SALT . $id) . '.log';
アクセス数を書いたlogファイル名にしようとしてます。
ページの名前は一意で重複はありません。
ページの名前:年月日時分秒+乱数5桁で19桁
これを使ってやってます
ttp://php-archive.net/php/page-views/
>>841
mysqlのインストールがわからなかったんでxampp使ってます
0846nobodyさん
2014/09/12(金) 04:16:28.93ID:???UnitTestしましょう。
0847nobodyさん
2014/09/12(金) 07:41:06.41ID:???0848nobodyさん
2014/09/12(金) 09:29:30.05ID:???正規表現以外の部分にバグあるかもだろう。一行ずつにUnitテスト組む気か。
phpはインタプリタついてないからなぁ。
0849nobodyさん
2014/09/12(金) 13:52:19.20ID:lxUndFzDtest1.phpで1と入力しても
test3.phpが実行されません。
どうしたら実行できるようになりますか?
test1.php
<?php
echo '<form method="post" action="test2.php">'.
'<input type="text" name="keyword" id="input1"><input type="submit" value="検索" id="input2">'.
'</form>';
?>
test2.php
<?php
if( $_POST["keyword"] == 1 ){
echo '<form method="post" action="test3.php">'.
'<input type="hidden" name="keyword" id="Kinput" value="$_POST["keyword"]" >'.
'</form>';
}
?>
test3.php
<?php
echo $_POST["keyword"];
?>
0850nobodyさん
2014/09/12(金) 14:01:28.34ID:???test2.phpは、単にその文字列をブラウザに表示してねと指示してるだけですので、
test2にボタンを設置しないと
test3.phpには飛びませんよ。
0851nobodyさん
2014/09/12(金) 14:03:48.44ID:???test2.php
<?php
if( $_POST["keyword"] == 1 ){
echo '<form method="post" action="test3.php">'.
'<input type="hidden" name="keyword" id="Kinput" value="' . $_POST["keyword"] . '">'.
'</form>';
}
?>
■ このスレッドは過去ログ倉庫に格納されています