【PHP】下らねぇ質問はID出して書き込みやがれ 133
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2014/04/19(土) 08:04:54.26ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 132
http://nozomi.2ch.net/test/read.cgi/php/1390166591/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.5
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0455nobodyさん
2014/05/25(日) 00:02:43.73ID:???TABの長さは君の環境とそれ以外の環境とでは違う可能性があるんだよ
自分の環境さえよければそれでよし、なんてのは老害以前の自己中発想だから
0456nobodyさん
2014/05/25(日) 00:04:27.26ID:U0aH4FsO君の使っているIDEはインデントをワンアクションで増減することすらできないのか。
世界には貧しい環境があるものだな。
0457nobodyさん
2014/05/25(日) 00:20:44.57ID:???解決するもんじゃないからコーディング規約に従っとけ。
ちなみにgoogleは2スペースだ。
0458nobodyさん
2014/05/25(日) 00:29:06.64ID:???2スペースのほうが見やすいんだよな
ただ一般的には4やらタブやらが入り混じってて結局4スペースに落ち着く
0459nobodyさん
2014/05/25(日) 00:32:28.27ID:???0460nobodyさん
2014/05/25(日) 10:52:44.62ID:lpo1VNoBファイルを読み込んだ先で、再度、同一のファイルを重複して読み込む場合、
何か処理をする必要がありますか?
マニュアルを読むと、読込は最初の一度だけらしいので、大丈夫そうなのですが、
セッションの有無などで、読込許可・読込不可を分けられたら、明示的にif文などで
場合わけした方がよいのでしょうか?
<?php
//読込元ファイルabc.php
require_once(.'/def.php');
require_once(.'/xyz.php');
//以下処理
?>
<?php
//読込先ファイルxyz.php
require_once(.'/def.php'); //def.phpを重複読込
//以下処理
?>
最初に読み込んだものだけが有効とはいえ、重複読込に関して、
何か処理が必要なのか心配です。
よろしくお願いします。
http://jp1.php.net/manual/ja/function.require-once.php
0461nobodyさん
2014/05/25(日) 11:33:10.96ID:???つまり、読み込んだファイルを自分の一部として扱うということ。
だから、変数名や関数名の重複には気を付けないといけない、とか
session_start()のような関数をあちこちで書く意味がない、とか
いろいろ理解できると思う。
0462460
2014/05/25(日) 12:02:33.92ID:lpo1VNoBレスありがとうございます。
>だから、変数名や関数名の重複には気を付けないといけない、とか
require_onceを使った読込でもやはり重複に気をつけないといけないのですね。
そうなると、場合により、セッションの有無などで読込をするかしないか
決めた方が安全といえそうですね。
<?php
//読込先ファイルxyz.php
//ログインフラグが有る場合、既にdef.phpを読込済み
if (empty($_SESSION['login_flag'])) {
require_once(.'/def.php'); //def.phpを読込
}
//以下処理
?>
またはファイルを読込済みか判定する関数などあるのでしょうか?
0463nobodyさん
2014/05/25(日) 12:10:47.25ID:???requireとrequire_onceの二個がある
require_onceは読み込み前に
前に読み込んだことがあるかを確認して
ない場合のみの読み込みが保証されている
から大丈夫
0464460
2014/05/25(日) 12:16:49.41ID:lpo1VNoBありがとうございます。
仰るとおり、マニュアルにこうありました。
_once系を使えば条件分岐は不要のようです。
http://www.php.net/manual/ja/function.include.php
例5
「ファイルが読み込み済みであるかどうかを調べ、
読み込まれるファイルの内容を条件分岐で返すかわりに
include_once を使用することを推奨します。」
おかげで疑問が解消しました。ありがとうございました。
0465nobodyさん
2014/05/25(日) 12:48:33.43ID:???個人で作ってるからタブ使い続けてるけどさ。
0466nobodyさん
2014/05/25(日) 12:51:01.39ID:???0467nobodyさん
2014/05/25(日) 13:18:09.13ID:???0468nobodyさん
2014/05/25(日) 13:23:31.68ID:???それはコーディングルールがタブではダメなことしてるだけ
例えば、行の先頭でないのに縦方向を揃えようとしてるとかな
タブでもスペースでもいいが、きちんと決めることが全て
0469nobodyさん
2014/05/25(日) 13:38:41.29ID:???0470nobodyさん
2014/05/25(日) 14:58:31.44ID:???個人的には if()の後ろのスペースも苦手
if( $a )
{
echo('こう書きたい');
}
なんか明確なルールかなんかあるんかね
0471nobodyさん
2014/05/25(日) 16:29:21.66ID:???タブは段組として扱ってるからスペース型はカーソル移動が面倒で嫌
0472nobodyさん
2014/05/25(日) 16:43:44.18ID:???0473nobodyさん
2014/05/25(日) 16:56:59.80ID:???0474nobodyさん
2014/05/25(日) 17:45:28.88ID:???include_onceとrequire_onceは使う
読み込まれたかどうかよくわからないような仕組みが一番の原因だ
0475nobodyさん
2014/05/25(日) 17:46:41.25ID:???なんとか_onceなんてPHPだけだから
そんなくだらんものを使う前にソースコードを見なおして込みこむべき場所と読み込まない場所を明確にしておけ
0476nobodyさん
2014/05/25(日) 17:50:16.77ID:???0478460
2014/05/25(日) 18:59:18.80ID:h238CVXt確かに仰るとおりです。設計がまずいのが原因かもしれません。
HTMLの特定部分を、ある共通PHPファイルを読み込んで
1. ログイン中はPHPの流れで直接出力、
2. ログアウト中はJavaScriptから呼び出して出力
するよう変更したところ、2.の場合は問題にならないのですが、
1.の場合に、再度、初期設定ファイルの読込も共通ファイル内でしてしまい
上記の疑問が生じた次第です。
こういう設計はまずいでしょうか?
0479nobodyさん
2014/05/25(日) 19:10:04.35ID:H1WvTlSMOS:CentOS6.5 PHP5.5.12 apche2.4 で利用中
以下の行に対し
$msg = mb_convert_encoding($msg, 'SJIS');
↓このエラーがでます(mbstring入ってないんじゃないの?エラーだと思うのですが
PHP Fatal error: Call to undefined function mb_convert_encoding()
mbstringは以下のように設定中で、apacheの再起動もOSの再起動も行い、includeも走っていることは確認済みです
# rpm -qa |grep php
php55u-cli-5.5.12-1.ius.el6.x86_64 php55u-mysqlnd-5.5.12-1.ius.el6.x86_64 php55u-common-5.5.12-1.ius.el6.x86_64
php55u-5.5.12-1.ius.el6.x86_64 php55u-pdo-5.5.12-1.ius.el6.x86_64 php55u-mbstring-5.5.12-1.ius.el6.x86_64
php.iniの設定値(コメントアウトしていないもの)
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring.substitute_character = none
ls -la /usr/lib64/php/modules/mbstring.so
-rwxr-xr-x 1 root root 1408328 May 21 19:14 /usr/lib64/php/modules/mbstring.so
ls -la /etc/php.d/mbstring.ini
-rw-r--r-- 1 root root 57 May 21 19:14 /etc/php.d/mbstring.ini
php_info() の 「Additional .ini files parsed」の項目には、/etc/php.d/mbstring.ini とありますが、
php_info()では、それ以外にmbstringの記述は無いようです
各サイトを見て回っても、CentOS(linux)の場合は、インストールでOKとしか見当たらず、
誤字も色々見まわしたんですが、見つけられずちょっと煮詰まっています
なにか心当たりある方居ますか?
0480nobodyさん
2014/05/25(日) 19:12:33.41ID:???どういう設計家はよく分からないけど、設定部分、HTML、プログラムの処理部分はきっちりファイルで分けておいたほうが良い。
HTMLに関してはフレームワークやテンプレートエンジンとかで出力。
根本的なところで、1で問題が起きたから後先考えずとりあえず2のようにしましたって感じがする。
設計がまずいというより設計を寝られていないのがまずいんじゃないのかと。
0481nobodyさん
2014/05/25(日) 19:12:45.70ID:???だからそういう設計はクズだっつってんだろ
どこで何回インクルードされるか制御できてないのが問題
_onceは使うな
0482nobodyさん
2014/05/25(日) 19:15:24.56ID:???includeが何を意味しているのかよくわからないが
mbstringが有効になってない
mbstringのモジュールをロードしろ
0483nobodyさん
2014/05/25(日) 19:19:36.59ID:???>>479
コマンドラインでphp -vとか実行したらwarningが出てる可能性があるから確認して下さい。
0485nobodyさん
2014/05/25(日) 19:21:40.26ID:H1WvTlSM/etc/php.d/mbstring.ini
で行われていて、php_info()の結果にmbstring.iniがあるかどうか確認
と各サイトには説明がなされているのですが、
どこかで明示的にロードを行う必要があるということでしょうか?
↓/etc/php.d/mbstring.iniの中身です
cat /etc/php.d/mbstring.ini
; Enable mbstring extension module
extension=mbstring.so
0487nobodyさん
2014/05/25(日) 19:25:09.99ID:???php -v の結果です
/var/logの下も確認しましたが、特にwarningは出ていなさそうです
php -v
PHP 5.5.12 (cli) (built: May 21 2014 18:57:47)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
0488nobodyさん
2014/05/25(日) 19:28:06.30ID:???0489nobodyさん
2014/05/25(日) 19:30:30.81ID:???2重に定義されてたりするとwarningがでるんよ。
ただそれならphp -mのほうが良かったと思った。
というわけで試してください。>>487
0490nobodyさん
2014/05/25(日) 19:34:55.41ID:H1WvTlSMphp -m では、mbstringは存在していました
# php -m |grep mbstring
mbstring
extension_loaded('mbstring') では、ロードされていないようです
何かこの違いがとっかかりになりそうな気はします
Webから見た場合の「Loaded Configuration File」 は、/etc/php.ini
コンソールから出した場合の「Loaded Configuration File」 も、/etc/php.ini
両方同じですが、webからとコンソールからで違う部分というのは他にありますか?
0491nobodyさん
2014/05/25(日) 19:54:35.08ID:???実は古いphpが残っているとか、ディレクトリの階層によって読み込んでいるiniファイルが
違ってた(htaccessとかでPHPIniDirの設定など)とか、そのくらいしか今思い浮かばない。
PHPIniDirで新しいiniファイル設定して、mbstringだけ読み込めるか確認してみればどうだろ?
0492nobodyさん
2014/05/25(日) 19:58:58.93ID:QcLwHWKlheader.php
main.php
hooter.php
を読み込んで表示させているんですが
読み込まれる側(header.phpやmain.php)の書き方にルールはあるのでしょうか?
<HTML></HTML>タグなんかは省略してもindex.phpでは表示はされますが
書かなきゃいけない、もしくは書いてはいけないというルールありますか?
また、header.phpやmain.phpのページに直接アクセスさせない方法ありますか?
色々ググってみてはいるんですが、ググる単語が合ってないのかヒットしません
ググれば分かるようであれば、ふさわしい名称(?)を教えて下さい
0493nobodyさん
2014/05/25(日) 20:04:28.95ID:???iframeみたいに複数のHTMLを呼び出して表示するのとはちがって
index.phpでの出力が最終的な1枚のHTMLになる、ってことを考えれば分かるかと
header.phpとかにアクセスさせないにはサーバーの.accessで設定したり
header.php自体に呼び出す際パラメータを指定しないと内容を返さないようにするといいのでは
0494nobodyさん
2014/05/25(日) 20:08:18.70ID:???0495nobodyさん
2014/05/25(日) 20:16:40.51ID:???> 読み込まれる側(header.phpやmain.php)の書き方にルールはあるのでしょうか?
> <HTML></HTML>タグなんかは省略してもindex.phpでは表示はされますが
> 書かなきゃいけない、もしくは書いてはいけないというルールありますか?
極論を書くと要件通りに動けばなんでもアリ。
だからルールとかは気にせず、phpの仕様と規約とかそういうのを除けば書きたいように書けば良い。
ただその中で可読性とかがあるわけで、そういうのは意識しないとだめかなと。。
もっと言うと、今流行っているやり方っていうのがあるわけなんだから、そういうのに合わせたほうが本当は良いよ。
> また、header.phpやmain.phpのページに直接アクセスさせない方法ありますか?
仮に、apacheでアクセスしているのがpublichtmlディレクトリだったとする。
publichtmlの下にheader.phpとかが存在していると思うけど、それをpublichtmlの下に置かないようにすれば良い。
あとは>>494のように.htaccess使うとか。
0497nobodyさん
2014/05/25(日) 20:36:55.59ID:QcLwHWKl仰るとおりずっとiframe使っていたので同じ感覚でタグ書いていましたが
理解できてすっきりしました
.htaccessのほうも設定してみます
助かりました、ありがとうございました
>>495
参考になります
public_htmlディレクトリの存在すら知らなかったのですが
どうやら今使っているサーバーにはないようなので、.htaccessでやってみようと思います
ありがとうございました
0498nobodyさん
2014/05/25(日) 20:38:44.51ID:???究極マヌケ集団だよな規約とか作ってるチンカスw
0499nobodyさん
2014/05/25(日) 20:49:04.87ID:???redeclareのFatal?は除外(=>この場合そもそもプログラムが止まるから)。
0500nobodyさん
2014/05/25(日) 21:10:12.10ID:???そうだな、googleは究極マヌケ集団だよな!!
>>499
問題起きるんじゃないかな。
requireされたものは、そのクラスの中でだけで処理されるものじゃない。
上の方で「差し込み」って表現があったけど、実際は実行されているファイルに対しての「継ぎ足し」みたいなものだよ。
0501nobodyさん
2014/05/25(日) 21:53:57.38ID:???「このファイルはあそこから読み込まれる」ことをはっきりわかっている時のみファイルを読み込むべきである
どこで読み込まれるのかわからないからとりあえずinclude_onceやrequire_onceを使って保険を書けとけみたいな考えは切り捨てるべき
0502nobodyさん
2014/05/25(日) 21:56:42.85ID:???コードの途中でrequireしたり条件判断でrequireするようなコードは書かないこと
0503nobodyさん
2014/05/25(日) 21:58:39.78ID:???0504nobodyさん
2014/05/25(日) 22:07:44.47ID:???いやマジレスすると、サードパーティの外部ライブラリを使う関係でrequireとか使ってられないし。
つかrequire_onceどころかautoloaderが目立ってきた昨今何を言ってるの?
0505nobodyさん
2014/05/25(日) 22:10:03.24ID:H1WvTlSMコンソールからのphpinfo()では、Zend Multibyte Support がenable
Zend Multibyte Support => provided by mbstring
webからだと、Zend Multibyte Support が disable
多分、ここに原因がありそう
ただ呼んでいるphp.iniは同じの「/etc/php.ini」でPHPIniDirで別のiniを作成して
指定してもdisableは変わらず
/etc/php.iniも、zend.multibyte = On としてある
php5.5なので、make時のconfigureのオプションという線も無し
phpがcli版だからとかあるんだろうか…?
もしくは、apache2.4は、httpd.confのloadmoduleが基本コメントなので
なにかOnにしないといけないmoduleがあるとか?
しばらくかかりそうです
0506nobodyさん
2014/05/25(日) 22:10:41.62ID:???0508nobodyさん
2014/05/25(日) 22:17:32.10ID:ApxNBx8kPHP Version5.5
質問です。
テーブルAにあるカラム1とカラム2の値(XXXXX)を更新しようとしています。
内容は
1. カラム1の値をカラム2に更新
2. カラム1の値をNULLにする
このような動きです。
結果として
カラム1:null
カラム2:XXXXX(元々カラム1に格納されていたデータ)
このようにしたいです。
(あ)UPDATE文1つで実行→カラム1、カラム2共にXXXXXの値
(い)上記項番1のUPDATE文の後、項番2のUPDATE文を実行→前述(あ)と同じ結果
(う)上記交番1のUPDATE文の後、別の処理を挟んでから項番2のUPDATE文を実行→前述(あ)と同じ結果
MySQLWorkBenchで実行すると、期待している結果が返ってくるのですが、
PHP上ですと何故か上手くいきません。
トランザクションは該当処理の前から始まっており、全ての処理が環境した後にコミットをかけています。
UPDATEの順番等も関係あるようなので試したのですが上手くいきません。
このような処理を満たすために注意しなければならない点などありますでしょうか?
0509nobodyさん
2014/05/25(日) 22:18:15.50ID:???ほとんどのrequire_onceはautoloaderに代用されてる
0511nobodyさん
2014/05/25(日) 22:32:36.17ID:???最終手段は一回全部yumで消して、ファイルが一切残っていないのを確認(webで動かないことも確認)してから再度インストールかな。
それでもダメならiusを使うのではなくてremiのを使う。
0512nobodyさん
2014/05/25(日) 22:43:34.61ID:???最終手段として考えてます
今日明日中に片付かなかったら、それしかないですね
リポジトリもremiを使うことにします
0513nobodyさん
2014/05/25(日) 22:49:12.24ID:U0aH4FsOfunc(param1,
param2,
この手の書き方はありだと思うんだけど、タブを使うと環境次第で崩れてしまうね。
インデントはタブを使おうってとこは、こういう記述を禁止するの?
クロージャとか死滅しちゃうね。
一方、こういう芸術的なコードはいらないと思うよ。
$foo = 'foo'; // foo
$hoge = 'hoge'; // hoge
0515nobodyさん
2014/05/25(日) 22:54:30.86ID:???0516nobodyさん
2014/05/25(日) 22:58:25.61ID:U0aH4FsO0517nobodyさん
2014/05/25(日) 22:59:49.01ID:???/path/to/php.ini
[mbstring]
zend.multibyte = On
は?
0518nobodyさん
2014/05/25(日) 23:16:58.78ID:???タブ使うときにはインデント幅まで規約で縛らない限り(普通はやらんと思う)は
その記述は禁止だね
func(
param1,
param2
)
って書くルールになると思うよ。
PSR-2ではこの書き方なのが謎。
0519nobodyさん
2014/05/25(日) 23:56:37.74ID:???解決しました
>>517 さんがヒントになりました
includeするタイミングかも?と思い、httpd.confの
Include /etc/httpd/conf.d/php.conf
の位置を前のほうに持ってきたところ、
Zend Multibyte Support provided by mbstring
となり、extension_loaded('mbstring')もtrue
mb_convert_encoding()も無事使えました
includeするタイミングは、最初に考えるべきでしたね
どのサイトでも、includeするとは書いてあっても、そのタイミングには
言及しているサイトは本家含めてなかったので失念していました
みなさん、ありがとうございました
0520nobodyさん
2014/05/26(月) 00:05:38.87ID:/O8ueeMB> httpd.confの
> Include /etc/httpd/conf.d/php.conf
> の位置
通常、httpd/conf.d の中身は自動的に読み込まれるようにするので、
わざわざ記載しているところを含め、環境の見直しをしたほうがよいと思うよ。
0522nobodyさん
2014/05/26(月) 00:17:08.95ID:???その記載がなかったんですよね
コメントアウトされているわけでもなく、何も無かったので
apache2.2のときはこのあたりに記載されてたなという記憶を頼りに記載しました
インストール時に主に参考にしたサイトさんでも、apache2.4のインストール後の設定として
これ 「Include /etc/httpd/conf.d/*.conf」をhttpd.confへ記述とあったので、
apache2.4からは、余計なconfは読み込まないようになっているっぽいので、
多分、自動で最初から読みこむ設定も削られているんじゃないかと思います
0523nobodyさん
2014/05/26(月) 01:04:53.46ID:???一見便利そうに見えるが、かなりの罠だ。
0524nobodyさん
2014/05/26(月) 01:16:10.38ID:???ィヌッカスはマジで糞
0526nobodyさん
2014/05/26(月) 01:56:13.56ID:???元々のソースパッケージには、conf.dなんて読み込む設定はないし、ディストロの余計なお節介。
0529nobodyさん
2014/05/26(月) 08:45:29.90ID:???0530nobodyさん
2014/05/26(月) 08:45:57.30ID:???0531nobodyさん
2014/05/26(月) 09:10:10.33ID:???0532nobodyさん
2014/05/26(月) 09:40:56.90ID:???0533nobodyさん
2014/05/26(月) 12:50:56.02ID:???0534nobodyさん
2014/05/26(月) 14:54:48.42ID:???Perlの会社にいるけど老害きつい
Rubyにも老害いるみたいだし、日本人ってくくりだな
0535nobodyさん
2014/05/26(月) 15:22:50.30ID:???まともに対話できる人の割合が異常
0538nobodyさん
2014/05/27(火) 12:02:47.92ID:???公式トップが出ないのに、どこかの総選挙速報のページの
拡張子が引っ掛かってさらにワロタw
0539nobodyさん
2014/05/27(火) 12:16:03.31ID:???お前がAKBオタだから出てきたんだろ
俺にはマニュアルが出てくる
0540nobodyさん
2014/05/27(火) 12:21:54.38ID:???0541nobodyさん
2014/05/27(火) 13:17:56.15ID:???0542nobodyさん
2014/05/27(火) 13:42:56.93ID:???ブログにコピペしたいレベル
0544nobodyさん
2014/05/27(火) 14:16:36.84ID:???オタは自分がオタとは認めないっていうけど本当のようだな
0545nobodyさん
2014/05/27(火) 14:23:24.50ID:???うちも公式マニュアル、wikipedia、wikipedia、そしてPHP研究所
0546nobodyさん
2014/05/27(火) 14:26:56.32ID:???適性もないようで
0547nobodyさん
2014/05/27(火) 14:28:25.66ID:???http://www.php.net/ が出てこなかったら無意味なんだよw
0549nobodyさん
2014/05/27(火) 14:32:44.12ID:???恥ずかしいユーザとAKBオタが多いってことの現れということだよなw
0550nobodyさん
2014/05/27(火) 14:40:39.72ID:???トップのリリース情報なんて見るために訪問するやつなんて少数だし
0551nobodyさん
2014/05/27(火) 14:49:00.64ID:???日本人は英語公式トップより日本語訳されたマニュアルの方をよく見るってことだな
0552nobodyさん
2014/05/27(火) 14:53:32.89ID:???0553nobodyさん
2014/05/27(火) 15:55:40.72ID:???これも上位にくるけど、もう活動してなさそうだよね。
0554nobodyさん
2014/05/27(火) 16:59:15.37ID:???次いでgoogleによるwikipeの要約、
プログラミング言語のphpのwikipedia、
php(曖昧さ回避)のwikipedia、マニュアル、公式の順
php研の創設者がパナソニック創設者と知って衝撃を受けた。
■ このスレッドは過去ログ倉庫に格納されています