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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2014/04/19(土) 08:04:54.26ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、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等)・フレームワークは各該当スレへ
0412nobodyさん2014/05/23(金) 12:49:09.81ID:???
他の言語で言うところの != -1 ならスマートだと思うのかな?
0413nobodyさん2014/05/23(金) 13:18:59.02ID:???
>>411
http://www.php.net/manual/ja/language.types.boolean.php
http://www.php.net/manual/ja/function.strpos.php

PHPでは、FALSEは数値判定しようとすると0になる。
また、strposで最初の一文字がヒットすると数値の0になる。
なので、型判定つきでFALSEかどうかを評価するのが一番
記述は簡単で済む。

その逆をやろうとすると、返り値が数値型で、かつ0以上で
あることをどこかで判定しなきゃいけないので記述が長くなる。

でもまぁ、判定の根拠を明示するために、長い記述にするのは
悪くないことだと思うよ。やってみては。
0414nobodyさん2014/05/23(金) 13:42:28.26ID:???
>>411
それがスマートに見えないなら関数自前すれば?

主観のスマートさを例を提示しないで出されても困るだけだよ
0415nobodyさん2014/05/23(金) 13:44:04.37ID:8/EeaipC
>>411
Cを経験してない人には分かりにくいという話に過ぎないので、
気になるなら好きな名前でラッパー書くなり関数足せばいいと思う
スマートかどうかはさておいて、十分読みやすいよ
0416nobodyさん2014/05/23(金) 13:48:21.38ID:???
if 文の中はbool値判定なのに、それをさらにbool値と比較するのはアホくさいだろw
0417nobodyさん2014/05/23(金) 14:02:13.55ID:???
>>416
アホ臭いと思う奴はアホ臭い
どうせ、手順数は変わらん
0418nobodyさん2014/05/23(金) 14:05:06.26ID:???
だったら、位置を返す関数なんて使わずに、あるなしをboolで返す関数かぶせれば?
0419nobodyさん2014/05/23(金) 15:02:08.27ID:???
http://www.php.net/manual/ja/function.substr-count.php

意味づけだけで考えるとこっちが近いかもね
0420nobodyさん2014/05/23(金) 15:06:25.77ID:DKlNZ22O
・変数がセットされている
・変数の中身がNULLである

という条件だとします。
if (isset($data)) {
// 変数が存在する場合の処理
}

これだとissetはFALSEになるので、処理が実行されません。
変数がNULLでも変数がセットされているので処理を実行させたい場合、
どういう書き方が適切でしょうか?以下のような書き方で良いのでしょうか?
isset($data) || !is_null($data)
0421nobodyさん2014/05/23(金) 15:28:34.35ID:???
>>417
じゃあ、 (((何とか === false) === true) !== false)
ここまでやってくれよ、手順変わらんのだろ。
0422nobodyさん2014/05/23(金) 15:30:57.82ID:???
>>421
アホ?

手順数増えてることあげるなよ
0423質問者己2014/05/23(金) 15:45:22.93ID:LR3HrDkX
>>419

おぉ、ありがとう。

if (substr_count($haystack, $needle)) {
  //ある場合の処理
}

これの方が好みだ。
(countだから、文字列最後までみる無駄は承知)

p.s.
if (!is_bool(strpos($haystack, $needle))) {
書けることに気付いた。

他の返信者もThankyou!

PHP初心者なので、普通の書き方?があるのかな、と思っていた。
自前関数つくれば?、というのはごもっとも。
(boolean isExist($haystack, $needle); とか)
でも、大抵のこと、やりたいことだけを書けばよいPHP。
その生産効率の高さに感激していたのに、ここはこれ?ってのに違和感あった。
0424nobodyさん2014/05/23(金) 15:45:36.30ID:???
>>420
http://www.php.net/manual/ja/language.types.null.php
> 変数は、以下の場合に NULL とみなされます。
> ・定数 NULL が代入されている場合。
> ・まだ値が何も代入されていない場合。
> ・unset() されている場合。

変数がセットされてないはNULLがセットされてると同じなので
変数に参照する方法だと無理です

グローバル変数であれば、$GLOBALSにarray_key_existsを利用する方法があります
ローカル変数だと、compactを利用する方法があります。
どちらにしろあまり推奨できる方法ではありません
0425nobodyさん2014/05/23(金) 15:52:56.11ID:???
>>424
変数名を文字列にしなくちゃいけないしね。
0426質問者己2014/05/23(金) 17:12:17.62ID:LR3HrDkX
if (is_int(strpos($haystack, $needle))) {
  //ある場合の処理
}

最終的にこうした。
他あればご教授よろしく。
0427nobodyさん2014/05/23(金) 17:19:10.52ID:/68HgEjX
これの理由を教えてください
http://qiita.com/hummer/items/a6d220e69f47175bd200
0428nobodyさん2014/05/23(金) 17:20:09.46ID:8/EeaipC
>>426
「一番普通の書き方」は最初のやつなので、それを外れるなら何でもいいと思うよ。
0429nobodyさん2014/05/23(金) 17:22:03.24ID:8/EeaipC
>>427
動的に変更したい部分だけコードを書けばいいって考えに基づくなら。
0430nobodyさん2014/05/23(金) 17:30:59.14ID:???
>>427
<?phpの後 改行スペースなしでファイルが終わってると駄目なんだなー
04314202014/05/23(金) 17:38:40.05ID:DKlNZ22O
>>424-425
「変数が呼び出されている」「しかし変数はNULLである」
という条件をTRUEとするため、何か良い書き方はないでしょうか?
issetだと駄目なので、どうやって書けばいいか悩んでいます・・・
0432nobodyさん2014/05/23(金) 17:50:12.41ID:???
PHP null 未定義 区別 で検索すればやり方はあるけど、
そもそも なんで未定義をチェックしないといけないの?
nullが入ってくるかもしれない変数をnullかチェックしたければ、あらかじめなんかnullじゃない値
入れとけばいいじゃん。
04334202014/05/23(金) 18:12:13.36ID:???
分かりました。もうちょっと勉強します。ありがとうございました。
0434nobodyさん2014/05/23(金) 18:19:22.90ID:???
変数が動的に作られる状況がよくない
そういうのは連想配列でやるべき
0435nobodyさん2014/05/23(金) 20:05:29.06ID:???
動的に変数宣言できるのがピュアエッチピュアのウリなんだろ?
0436nobodyさん2014/05/23(金) 20:12:47.37ID:???
勘違いしすぎ
0437nobodyさん2014/05/23(金) 20:38:41.78ID:???
forの中で動的に生成した変数を躍動的に活用するのが真のピュアエッチボーイだからな
0438nobodyさん2014/05/24(土) 00:48:19.89ID:???
>>430
最後が改行で終わってないと、気持ち悪くてしょうがない。
俺だけ?
0439nobodyさん2014/05/24(土) 03:38:03.62ID:Bs4j7gAX
>>438
正しいよ。
しかし無理解から最後の改行を消してしまう人が居るのも事実。
0440nobodyさん2014/05/24(土) 04:52:42.90ID:???
1byteでもファイル容量は削るべきだろう
空改行なんかしてるやついたらモニタでしばき倒すわ
0441nobodyさん2014/05/24(土) 06:19:59.04ID:???
ファイルサイズが1byte以上であるなら、最後のコードは改行であるべき
これ守ってないと動かないツールがたまにある
0442nobodyさん2014/05/24(土) 06:30:42.43ID:???
それはゴミツールが悪い
0443nobodyさん2014/05/24(土) 07:01:38.32ID:???
たった1バイトのために汎用性度外視とか
0444nobodyさん2014/05/24(土) 07:07:35.49ID:???
そういえばPHP 5.4をビルドするときに
最後が改行で終わっていないというウォーニングが
延々と出るよねw
0445nobodyさん2014/05/24(土) 08:22:31.16ID:???
>>440
ばーかw
0446nobodyさん2014/05/24(土) 08:36:13.71ID:???
>>445
はい、君4K50型モニタでしばきまーす
0447nobodyさん2014/05/24(土) 09:27:13.22ID:bHZkuXrt
【OS名】Apache/2.4.3 (Win32)
【PHPのバージョン】5.4.7
【連携ソフトウェア】xamppでテスト中
【質問内容】
あるhtml要素を取得後、body要素内のテキストを配列に取得、そのテキストをforeachで処理したいと思っています。
(最終的にはふりがなを付けたいと思っています)
ですが各要素内のテキストがうまく取得できません。正規表現が間違ってると思うのですが、どのように直せばよいでしょうか?

コードは以下です。
<?php
$a ="disuse<html>disuse<head>disuse</head>disuse<body style='background-color:#550'>need1<ul><li>need2</li>need3
<li>need4</li></ul>need5</body>disuse</html>disuse";
$pattern = "#<body[\s\S]*?>[\s\S]*?>[\s\S]*?<[\s\S]*?</body>#u";
preg_match_all ($pattern, $a ,$b);
/* 配列の処理 */
foreach($b[0] as $c){
echo $c;
echo"<br>";
};
?>

echoの結果は以下になります。
<body style='background-color:#550'>need1<ul><li>need2</li>need3
<li>need4</li></ul>need5</body><br>
0448nobodyさん2014/05/24(土) 13:51:52.59ID:???
>>440
じゃあコメントも書けないな
コメントも一応メモリを使うから
0449nobodyさん2014/05/24(土) 15:03:54.40ID:???
>>440
変数名とかは全て$aとか$bとかにしてるのかすげーな。
0450nobodyさん2014/05/24(土) 22:56:26.95ID:Bs4j7gAX
>>440
なぜPHPが終了タグ直後の一つの改行のみは許す仕様になっているのか考えたことはないのか。

ついでに、インデントはタブじゃなくて4スペースでお願いします
0451nobodyさん2014/05/24(土) 23:03:44.97ID:???
4スペースの文化消えて無くなってくれねえかな
なんなんアレ
TABだとフォントによって崩れる(キッ
じゃねえよ
んな糞フォント使うなって話だよ
ついでにMSゴシック縛りはなんなんだよ
メイリョKEもしらんのかハゲと言いたい
いくら大企業で給料良くても、糞みてえな規約には従いたくないわ
0452nobodyさん2014/05/24(土) 23:55:47.63ID:???
> TABだとフォントによって崩れる(キッ
こんなこと誰も言ってないと思われます
TABはフォントに関係ないからね

問題は、TABは環境によって幅が変わるということ
8スペース1TABは普遍的文化ではないんだよ

なのでスペースインデントが基本であるべき

インデントが4か8かは好きにしてくれ
0453nobodyさん2014/05/24(土) 23:56:13.95ID:Bs4j7gAX
フォントによって崩れるなんて意見初めてだな。
別に俺はタブで統一するならするでいいけど、
気づかずに混ぜる人が現れるのが問題だと思うわ。
0454nobodyさん2014/05/25(日) 00:00:47.66ID:???
1BackSpaceで削除できるTABの方が良い
TABの長さなんぞIDEに任せればよい
旧時代の老害だけだよ、スペースインデントにこだわってるハゲなんて
0455nobodyさん2014/05/25(日) 00:02:43.73ID:???
>>454
TABの長さは君の環境とそれ以外の環境とでは違う可能性があるんだよ
自分の環境さえよければそれでよし、なんてのは老害以前の自己中発想だから
0456nobodyさん2014/05/25(日) 00:04:27.26ID:U0aH4FsO
IDEに任せればよい?
君の使っているIDEはインデントをワンアクションで増減することすらできないのか。
世界には貧しい環境があるものだな。
0457nobodyさん2014/05/25(日) 00:20:44.57ID:???
インデントがタブかスペースのどちらが良いかなんて宗教戦争みたいなもんだろ。
解決するもんじゃないからコーディング規約に従っとけ。
ちなみにgoogleは2スペースだ。
0458nobodyさん2014/05/25(日) 00:29:06.64ID:???
>>457
2スペースのほうが見やすいんだよな
ただ一般的には4やらタブやらが入り混じってて結局4スペースに落ち着く
0459nobodyさん2014/05/25(日) 00:32:28.27ID:???
自分は、phpとかのC系だと、2スペースは結構見づらく感じる(慣れの問題かもしれんが)。
0460nobodyさん2014/05/25(日) 10:52:44.62ID:lpo1VNoB
require_onceについて質問です。
ファイルを読み込んだ先で、再度、同一のファイルを重複して読み込む場合、
何か処理をする必要がありますか?

マニュアルを読むと、読込は最初の一度だけらしいので、大丈夫そうなのですが、
セッションの有無などで、読込許可・読込不可を分けられたら、明示的に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:???
require(及びinclude)は、その場所への「差し込み」と捉える。
つまり、読み込んだファイルを自分の一部として扱うということ。

だから、変数名や関数名の重複には気を付けないといけない、とか
session_start()のような関数をあちこちで書く意味がない、とか
いろいろ理解できると思う。
04624602014/05/25(日) 12:02:33.92ID:lpo1VNoB
>>461
レスありがとうございます。
>だから、変数名や関数名の重複には気を付けないといけない、とか

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:???
>>460
requireとrequire_onceの二個がある
require_onceは読み込み前に
前に読み込んだことがあるかを確認して
ない場合のみの読み込みが保証されている
から大丈夫
04644602014/05/25(日) 12:16:49.41ID:lpo1VNoB
>>463
ありがとうございます。
仰るとおり、マニュアルにこうありました。
_once系を使えば条件分岐は不要のようです。

http://www.php.net/manual/ja/function.include.php
例5
「ファイルが読み込み済みであるかどうかを調べ、
読み込まれるファイルの内容を条件分岐で返すかわりに
include_once を使用することを推奨します。」

おかげで疑問が解消しました。ありがとうございました。
0465nobodyさん2014/05/25(日) 12:48:33.43ID:???
俺もタブ派だけど、PSRでスペースと規定されてるからなぁ。
個人で作ってるからタブ使い続けてるけどさ。
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:???
PSR-1とPSR-2を分けたのはえらいよな〜
0470nobodyさん2014/05/25(日) 14:58:31.44ID:???
4スペどうしても見づらいんだよなあ…スペ2が好み
個人的には if()の後ろのスペースも苦手
if( $a )
{
echo('こう書きたい');
}

なんか明確なルールかなんかあるんかね
0471nobodyさん2014/05/25(日) 16:29:21.66ID:???
俺はDOSの頃から書いてるから4オンリー
タブは段組として扱ってるからスペース型はカーソル移動が面倒で嫌
0472nobodyさん2014/05/25(日) 16:43:44.18ID:???
スペースインデントはreadシステムコール数回分地味に遅いということが起こり得るw
0473nobodyさん2014/05/25(日) 16:56:59.80ID:???
パンチカードか何か読ませているんですか?
0474nobodyさん2014/05/25(日) 17:45:28.88ID:???
>>464
include_onceとrequire_onceは使う
読み込まれたかどうかよくわからないような仕組みが一番の原因だ
0475nobodyさん2014/05/25(日) 17:46:41.25ID:???
>>464
なんとか_onceなんてPHPだけだから
そんなくだらんものを使う前にソースコードを見なおして込みこむべき場所と読み込まない場所を明確にしておけ
0476nobodyさん2014/05/25(日) 17:50:16.77ID:???
えー、Cなんかincludeされるファイルはほぼすべて宣言が1回だけになるようにガードされてるじゃんw
0477nobodyさん2014/05/25(日) 17:58:00.59ID:???
>>475おじいちゃん、ここphpスレだからお家に帰りましょうね〜。
04784602014/05/25(日) 18:59:18.80ID:h238CVXt
>>474
確かに仰るとおりです。設計がまずいのが原因かもしれません。

HTMLの特定部分を、ある共通PHPファイルを読み込んで
1. ログイン中はPHPの流れで直接出力、
2. ログアウト中はJavaScriptから呼び出して出力
するよう変更したところ、2.の場合は問題にならないのですが、
1.の場合に、再度、初期設定ファイルの読込も共通ファイル内でしてしまい
上記の疑問が生じた次第です。

こういう設計はまずいでしょうか?
0479nobodyさん2014/05/25(日) 19:10:04.35ID:H1WvTlSM
ちょっと煮詰まってしまったので、質問させてください。mbstringが、どうしても利用できないので困っています
OS: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:???
>>478
どういう設計家はよく分からないけど、設定部分、HTML、プログラムの処理部分はきっちりファイルで分けておいたほうが良い。
HTMLに関してはフレームワークやテンプレートエンジンとかで出力。

根本的なところで、1で問題が起きたから後先考えずとりあえず2のようにしましたって感じがする。
設計がまずいというより設計を寝られていないのがまずいんじゃないのかと。
0481nobodyさん2014/05/25(日) 19:12:45.70ID:???
>>478
だからそういう設計はクズだっつってんだろ
どこで何回インクルードされるか制御できてないのが問題
_onceは使うな
0482nobodyさん2014/05/25(日) 19:15:24.56ID:???
>>479
includeが何を意味しているのかよくわからないが
mbstringが有効になってない
mbstringのモジュールをロードしろ
0483nobodyさん2014/05/25(日) 19:19:36.59ID:???
>>481おじいちゃんもうご飯ですよ〜。

>>479
コマンドラインでphp -vとか実行したらwarningが出てる可能性があるから確認して下さい。
0484nobodyさん2014/05/25(日) 19:20:31.81ID:???
>>483
よくわからいからそういう煽りをいれるんですね、さすが低能
0485nobodyさん2014/05/25(日) 19:21:40.26ID:H1WvTlSM
mbstringのモジュールのロードは、
/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
0486nobodyさん2014/05/25(日) 19:23:36.79ID:???
>>485
extension_loadedでロードされてるか調べろ
0487nobodyさん2014/05/25(日) 19:25:09.99ID:???
>>483
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:???
php -v関係ないし
0489nobodyさん2014/05/25(日) 19:30:30.81ID:???
>>488
2重に定義されてたりするとwarningがでるんよ。
ただそれならphp -mのほうが良かったと思った。
というわけで試してください。>>487
0490nobodyさん2014/05/25(日) 19:34:55.41ID:H1WvTlSM
>>486
php -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:???
>>490
実は古いphpが残っているとか、ディレクトリの階層によって読み込んでいるiniファイルが
違ってた(htaccessとかでPHPIniDirの設定など)とか、そのくらいしか今思い浮かばない。

PHPIniDirで新しいiniファイル設定して、mbstringだけ読み込めるか確認してみればどうだろ?
0492nobodyさん2014/05/25(日) 19:58:58.93ID:QcLwHWKl
index.phpに

header.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:???
>>492
iframeみたいに複数のHTMLを呼び出して表示するのとはちがって
index.phpでの出力が最終的な1枚のHTMLになる、ってことを考えれば分かるかと

header.phpとかにアクセスさせないにはサーバーの.accessで設定したり
header.php自体に呼び出す際パラメータを指定しないと内容を返さないようにするといいのでは
0494nobodyさん2014/05/25(日) 20:08:18.70ID:???
まちがえた .htaccess
0495nobodyさん2014/05/25(日) 20:16:40.51ID:???
>>492
> 読み込まれる側(header.phpやmain.php)の書き方にルールはあるのでしょうか?
> <HTML></HTML>タグなんかは省略してもindex.phpでは表示はされますが
> 書かなきゃいけない、もしくは書いてはいけないというルールありますか?
極論を書くと要件通りに動けばなんでもアリ。
だからルールとかは気にせず、phpの仕様と規約とかそういうのを除けば書きたいように書けば良い。
ただその中で可読性とかがあるわけで、そういうのは意識しないとだめかなと。。
もっと言うと、今流行っているやり方っていうのがあるわけなんだから、そういうのに合わせたほうが本当は良いよ。

> また、header.phpやmain.phpのページに直接アクセスさせない方法ありますか?
仮に、apacheでアクセスしているのがpublichtmlディレクトリだったとする。
publichtmlの下にheader.phpとかが存在していると思うけど、それをpublichtmlの下に置かないようにすれば良い。
あとは>>494のように.htaccess使うとか。
0496nobodyさん2014/05/25(日) 20:19:16.48ID:???
>>481
Cの否定はやめろ
0497nobodyさん2014/05/25(日) 20:36:55.59ID:QcLwHWKl
>>493
仰るとおりずっとiframe使っていたので同じ感覚でタグ書いていましたが
理解できてすっきりしました

.htaccessのほうも設定してみます
助かりました、ありがとうございました

>>495
参考になります
public_htmlディレクトリの存在すら知らなかったのですが
どうやら今使っているサーバーにはないようなので、.htaccessでやってみようと思います
ありがとうございました
0498nobodyさん2014/05/25(日) 20:38:44.51ID:???
タブの幅を半角スペース4にするってコーディング規約作ればいいのに
究極マヌケ集団だよな規約とか作ってるチンカスw
0499nobodyさん2014/05/25(日) 20:49:04.87ID:???
完全にクラスに閉じ籠っている場合は、once付けなくてもロジックを乱すような問題は起きないないよね?
redeclareのFatal?は除外(=>この場合そもそもプログラムが止まるから)。
0500nobodyさん2014/05/25(日) 21:10:12.10ID:???
>>498
そうだな、googleは究極マヌケ集団だよな!!

>>499
問題起きるんじゃないかな。
requireされたものは、そのクラスの中でだけで処理されるものじゃない。
上の方で「差し込み」って表現があったけど、実際は実行されているファイルに対しての「継ぎ足し」みたいなものだよ。
0501nobodyさん2014/05/25(日) 21:53:57.38ID:???
phpではrequireのみ使用を許可する
「このファイルはあそこから読み込まれる」ことをはっきりわかっている時のみファイルを読み込むべきである
どこで読み込まれるのかわからないからとりあえずinclude_onceやrequire_onceを使って保険を書けとけみたいな考えは切り捨てるべき
0502nobodyさん2014/05/25(日) 21:56:42.85ID:???
そしてrequireする場合は必ずファイルの先頭で読み込ませること
コードの途中でrequireしたり条件判断でrequireするようなコードは書かないこと
0503nobodyさん2014/05/25(日) 21:58:39.78ID:???
一人でやってろ
0504nobodyさん2014/05/25(日) 22:07:44.47ID:???
>>502おじいちゃんそろそろ寝る時間ですよ。

いやマジレスすると、サードパーティの外部ライブラリを使う関係で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:???
requireとautoloadの話は別で一緒にされてもね
0507nobodyさん2014/05/25(日) 22:16:57.51ID:???
>>505
パッケージから入れないでphpenvでいれれば
0508nobodyさん2014/05/25(日) 22:17:32.10ID:ApxNBx8k
PHP Version5.3
PHP 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:???
普通includeとrequire_onceしか使わんよ

ほとんどのrequire_onceはautoloaderに代用されてる
0510nobodyさん2014/05/25(日) 22:20:18.86ID:???
>>508
ソース出さないとわからんよ。

普通にちゃんとSQLが発行されてれば問題はない。ログは見たのかい?
0511nobodyさん2014/05/25(日) 22:32:36.17ID:???
>>505
最終手段は一回全部yumで消して、ファイルが一切残っていないのを確認(webで動かないことも確認)してから再度インストールかな。
それでもダメならiusを使うのではなくてremiのを使う。
■ このスレッドは過去ログ倉庫に格納されています