【PHP】下らねぇ質問はここに書き込みやがれ 54
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/09/09(日) 12:42:57ID:64tYOx8RPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 53
http://pc11.2ch.net/test/read.cgi/php/1188047468/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0487nobodyさん
2007/09/19(水) 01:43:48ID:gkslbv3Aisset() が関数ではなくステートメント(スペシャルフォーム?) なのは分かった。
0490nobodyさん
2007/09/19(水) 02:01:10ID:gkslbv3A(PHP 4, PHP 5)
isset ― 変数がセットされているかどうかを検査する
$a=array();
isset($a['b']]);
でエラーは出ないので$a['b']は「変数」ということでしょう。驚くべきことに。
んでは、「変数」って$aや$a[index] の他に何があるの?
もうPHPのソース読むしか無い?マニュアルすらアテにならんのだが。
0491nobodyさん
2007/09/19(水) 02:02:35ID:???0492458
2007/09/19(水) 02:02:47ID:RXNedNOk>461
ID表示させず申し訳なかったです。
>459 >460
レスありがとうございます。
勉強不足で申し訳ないですが、
ドキュメントルートを起点にしたインクルードってできないのでしょうか?
0494nobodyさん
2007/09/19(水) 02:10:45ID:???0495nobodyさん
2007/09/19(水) 02:21:09ID:???これ、PHPのプログラムとして誤りではないんですか?
0497458
2007/09/19(水) 03:32:07ID:RXNedNOkもう少しヒントを頂けると嬉しいです、、。
include_pathに設定なんかを行う感じでしょうか?
特別なことをせずにインクルードできるなら是非教えて頂きたいです。
よろしくお願いします!
0498nobodyさん
2007/09/19(水) 04:58:30ID:???エラーが出るのがおかしいと感じてるのか、出ない下2行をおかしいと感じてるのか分からんが、
http://www.php.net/manual/ja/language.references.php
ここ読んでなんとなくリファレンスとはそういうもんかなあと俺は思った。
関数の引数に限らず、
<?php
$a = &$hogehoge['aaaaaa'];
?>
リファレンスの代入でエラーになる事は無いみたい。
まあ俺なら
if (isset($a['c']) g($a['c']);
か、
g($a);
function g(&$arg) {
if (!isset($arg['c')) return;
}
とするけどね。
0499nobodyさん
2007/09/19(水) 05:20:58ID:Y/2cENkk0500nobodyさん
2007/09/19(水) 08:15:46ID:???>>498 のように参照元が未定義でも黙って勝手に定義しちゃうな。
仕様と言われたらしょうがないが、嬉しくない動作だ。
error_reporting(E_ALL | E_STRICT);
unset($a);
$b = &$a[0]; # 沈黙
var_dump($a); # array(1) { [0]=> &NULL }
>>490
変数が定義済みかつ NULL 以外かどうかを bool で返す言語構造だ。
エラーを出すなんてマニュアルのどこに書いてあるのよ。
0501nobodyさん
2007/09/19(水) 09:14:47ID:???まだよくわかんないですが。。
どちらがオカシイというか、
・一貫性がないなぁ
・他のプログラミング言語ではみられないし、直観的でない動作だなぁ
という風に思ってました。
頭がおかしいとか言っちゃってる人?がいますが、この程度のこともハッキリできないって正直怖くね?
と思ってたのでちゃんと分かって有り難かったです。
でも例えば、
$a =& $hogehoge['b'];
return $a['c'];
これはE_NOTICEが出ないのに、
>>486のf($a)でエラーがでるのはなんでだろう。
こんなん、エラーが発生した位置から実際のバグが特定しにくいと思うんだけど…
とにかくPHPの参照と配列が組み合わさると地雷、という風に理解すればいいかねぇ。
0502nobodyさん
2007/09/19(水) 09:18:42ID:gkslbv3A厳密に参照引数と参照変数が同じというわけではなさそう。
<?php
function g() {
$a =& $hogehoge['b'];
return $a['c'];
}
g();
?>
まあとにかく地雷ってことか…
0503nobodyさん
2007/09/19(水) 09:56:38ID:rpyBUC34モジュールの評価をお願いしたいのですが、よろしいでしょうか。
機能としては、文字を整形するものです。
タグが使えない掲示板などでも、きれいな表の状態を維持できるものです。
公開ページになります。
http://penlabo.web.fc2.com/PHP/HTML-AA.html
よろしくおねがいいたします。
0504nobodyさん
2007/09/19(水) 10:53:55ID:Y/2cENkkごめん。
八つ当たりをしてしまった。
気にしないで下さい。
0505nobodyさん
2007/09/19(水) 12:42:37ID:???0506nobodyさん
2007/09/19(水) 12:45:03ID:Ur82wVvy言葉使いに迷っております。
ある機能があるんだけど、
hogehoge機能という言葉を使う代わりに、
hogehogeエンジン、hogehogeシステム、hogehogeプログラム、hogehogeロジック
って書こうと思いますが、どれが一般人に分かりやすいですか?
0507nobodyさん
2007/09/19(水) 12:49:10ID:???PHP Warning: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot sendsession cache limiter - headers already sent (output started at /foo/bar.php:167) in /foo/bar.php on line 184
session_start()のところでこんなエラーが出てスクリプトが止まってしまいます。
なにが原因でしょうか?
0508nobodyさん
2007/09/19(水) 12:54:48ID:???0509nobodyさん
2007/09/19(水) 12:54:48ID:???一般ユーザって社内?コンシューマ?
社内ならシステムでいいんじゃね。
てか、その辺はお客さんと折衝してるときの
ニュアンスで決めちゃうからなー。
よくわからんわ。
>>507
>>1 IDを表示させてね。
>Cannot sendsession cookie - headers already sent
既にヘッダー文字列が送られている為にセッションを開始することが出来ません。
よくあるのは、空白とかが<?php ?>の前にある時ですかね。
0510nobodyさん
2007/09/19(水) 13:02:09ID:Ur82wVvyレスありがとうございます。紛らわしくてすみません。
一般ユーザーというのは、一般消費者向けです。
マニュアルといっても、電子マニュアルでして、
サイトに載せる予定です。hogehoge機能のhogehogeの部分が横文字なので、
機能じゃなくて別の言葉はないか、とクライアントに言われて困っています。
0511507
2007/09/19(水) 13:07:07ID:qdL49ylmありがとうございます。
確かに先にheaderでというものをやってました。
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
session_start()はこれより前にやらないといけないということですね。
後で確認してみます。
0512nobodyさん
2007/09/19(水) 14:36:21ID:ywTkCFki入力→確認→書き込み
の流れをファイル分担させずに、綺麗なソースで書きたいんだがお勧め方法ある?
0513nobodyさん
2007/09/19(水) 14:39:15ID:???丸投げするなよ
綺麗なソースかどうかなんて見てみないとわかるわけないだろ
ていうかファイル分けないとか謎制限いらんだろ
フレームワークでも使って作れ
0514nobodyさん
2007/09/19(水) 14:40:04ID:???掲示板最初から作るんだったら、どこかのサイトの掲示板を使った方が
いいんじゃない、その方が安全で手間がかからないし。
たとえば、
http://www.bigcosmic.com/
とか
0516nobodyさん
2007/09/19(水) 14:42:13ID:ywTkCFkiん〜、何ていうんだろ
いろんなとこでこの作業を行いたいからファイル分けると増えすぎてゴチャゴチャする
swtich ($resgit){
case "A":
require_once("hoge1.php");
break;
case "B":
require_once("hoge2.php");
break;
case "C":
require_once("hoge3.php");
break;
}
だと早いけど、
この実行するPHP「hoge1〜3.php」を何かの変数に格納して
あとで実行できないかなと・・・
0517nobodyさん
2007/09/19(水) 14:42:49ID:???うわぁ、すごい安い!!!
それに、すごいかわいい。こんなに初めてかも。
おれ、ここの掲示板使ってみる。いい情報ありがとぉーーー
0519nobodyさん
2007/09/19(水) 14:44:36ID:???0520nobodyさん
2007/09/19(水) 14:44:42ID:???早速おれも見てみた。
すごいね。これ。
しかも、すごい運用実績があるし、信頼できそうだね。
今使っている掲示板ダメダメなので、早速これ使ってみるよ。
0521nobodyさん
2007/09/19(水) 14:46:55ID:???MVCをしたいってこと?
なんかフレームワーク使ってる?
それとも、デザイン込みで1ファイルにしたいの?
質問ばかりでごめんね。
やりたいことがはっきり見えなくて。
0522nobodyさん
2007/09/19(水) 14:50:09ID:ywTkCFkiこっちこそ詳しくかかずにすみません
PEARを使ってます
デザイン込みで1ファイルなので
<?
$type1 = Aの場合のPHP+HTML文
$type2 = Bの場合のPHP+HTML文
$type3 = Cの場合のPHP+HTML文
?>
<html>
<body>
<?
switch ($regist){
case "A":
$typeAのPHP+HTML文を実行
break;
case "B":
$typeBのPHP+HTML文を実行
break;
case "C":
$typeCのPHP+HTML文を実行
break;
}
?>
</body>
<html>
0523nobodyさん
2007/09/19(水) 14:50:41ID:VHjt1ihLrequire_once("hoge{$resgit}.php");
かな
0524nobodyさん
2007/09/19(水) 14:53:58ID:ywTkCFkiどもです。
ですが、require_onceを使うためには実行するPHPを別ファイルで保存しなくてはいけないので、
それをしないで、実行する文を変数か何かに格納して条件別にそれを実行したいのです。
ヒアドキュメントで
$text = <<<_HTML_
<html>
<body>
<? echo "テスト" ?>
</body>
</html>
_HTML_;
eval($text);
としてみたのですが、evalはPHP文のみみたいですね・・・。
0525nobodyさん
2007/09/19(水) 14:56:09ID:DH/EOPt7やろうとしている事がアホすぎるってのは理解して、尚それをやろうとしてるの?
それとも、やろうとしてることがアホだって理解してないの?
0527nobodyさん
2007/09/19(水) 14:58:33ID:VHjt1ihLはぁはぁ、つまりユーザーアップロードのテンプレートを使わせたいわけだろ。
アップロード時に検査して問題がなければPHPとして置き換えたらいいでしょ。
それが嫌なら毎回置き換えろ。
0528nobodyさん
2007/09/19(水) 14:59:54ID:ywTkCFkiよく考えたらそれでよかったです・・・
有難うございましたorz
0529nobodyさん
2007/09/19(水) 15:08:48ID:???0530nobodyさん
2007/09/19(水) 15:09:10ID:???0532nobodyさん
2007/09/19(水) 15:14:01ID:???0533nobodyさん
2007/09/19(水) 15:44:14ID:ywTkCFki$test = "example.com";
$2ch = "まろゆき";
function Test(){
global $hogehoge;
global $test;
global $2ch;
echo $hogehoge;
echo $test;
echo $2ch;
}
Test();
外部の変数を取り込むにはglobalが必要ですが、
上記の場合では、
global $hogehoge;
global $test;
global $2ch;
としなくてはいけないですが、
変数を全て取り込むような宣言はありませんか?
0534nobodyさん
2007/09/19(水) 15:48:17ID:VHjt1ihL0535nobodyさん
2007/09/19(水) 15:52:00ID:DH/EOPt7何がしたいのかよくわからないが、引数で配列にでもして渡せば?
0536nobodyさん
2007/09/19(水) 16:05:39ID:???0537nobodyさん
2007/09/19(水) 16:08:09ID:???0538nobodyさん
2007/09/19(水) 16:08:48ID:???0539nobodyさん
2007/09/19(水) 16:47:29ID:???$GLOBALS[hogehoge] = "あああ";
$GLOBALS[test] = "example.com";
$GLOBALS[2ch] = "まろゆき";
function Test(){
global $GLOBALS;
というわけだよ
っうか
global $hogehoge,$test,$2ch;
でよくね?
これで20個渡したりする場合もあるよ?
0540nobodyさん
2007/09/19(水) 16:51:02ID:???( д) ゚ ゚
0542nobodyさん
2007/09/19(水) 16:53:50ID:???なんだそりゃ・・・
$hogehoge = "あああ";
$test = "example.com";
$2ch = "まろゆき";
function Test()
{
echo $GLOBALS['hogehoge'];
echo $GLOBALS['test'];
echo $GLOBALS['2ch'];
}
0544nobodyさん
2007/09/19(水) 16:57:52ID:???ネタだよな?w
つhttp://search.net-newbie.com/php/language.variables.scope.html
例 12-3. globalのかわりに$GLOBALSを使用する
<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;
?>
0545nobodyさん
2007/09/19(水) 16:58:26ID:???class ex
{
private $hogehoge = "あああ";
private $test = "example.com";
private $ch = "まろゆき";
public function ex_print(){
echo $this->hogehoge;
echo $this->test;
echo $this->ch;
}
}
$a = new ex();
$a->ex_print();
もしくは
$a = array('hogehoge'=>'あああ','test'=>'example.com','2ch'=>'まろゆき');
test($a);
function test($output_array){
foreach( $output_array as $val ){
echo $val;
}
}
0546nobodyさん
2007/09/19(水) 17:02:10ID:???$hogehoge['aaa']
$hogehoge[aaa]
''って使ってる派? 使わない派?
どっちが多いのかな
0548nobodyさん
2007/09/19(水) 17:05:37ID:???0550nobodyさん
2007/09/19(水) 17:06:45ID:???明示的を重視して使ってる。(noticeもエラー扱いだし)
うちは’(シングルクォート)だけど、
’(シングルクォート)と”(ダブルクォート)だとどっち使ってる人が多いのかな?
0552nobodyさん
2007/09/19(水) 17:09:46ID:???0554nobodyさん
2007/09/19(水) 17:14:28ID:???PHPマニュアルさんがファビョってたから
$foo['bar']つかう。
0555nobodyさん
2007/09/19(水) 17:15:16ID:???グローバル変数使う奴なんて馬にけられて死ねばいい
だけど、自作フレームワークにsmarty組み込む時に、
一々assignするのがめんどうでGLOBALSの中身全部assignしてしまった俺も死ね
0556nobodyさん
2007/09/19(水) 17:16:14ID:???0557nobodyさん
2007/09/19(水) 17:17:37ID:???echo $foo[bar];
define('bar', "boo");
echo $foo[bar];
0558nobodyさん
2007/09/19(水) 17:19:53ID:???>下位互換性の維持のため、未定義の定数は同じ名前の文字列に自動的に変換されます。
PHPは地獄だぜヒャッホー
0559nobodyさん
2007/09/19(水) 17:20:06ID:???PHP初心者のおれにもわかるように説明して下さい
エロイ人
0561nobodyさん
2007/09/19(水) 17:23:55ID:???グローバル変数は、ご存知のとおり適用範囲が必要以上に大きくなってしまう。
例えば、レンタルサーバーの場合、一人の住民がグローバル変数の値を変えると、
その変数を使っているレンタルサーバー内の住民の変数が全て変わってしまう。
そういう事情があって、使わない方がいいというより使ってはいけない。
0567nobodyさん
2007/09/19(水) 17:32:03ID:???0568nobodyさん
2007/09/19(水) 17:32:51ID:DH/EOPt710ファイルくらいのスクリプトをグローバル変数だけで書いてみな。
意味がわかるだろ
0569nobodyさん
2007/09/19(水) 17:37:23ID:???僕が、globalを嫌ってる理由はね。
理由1 ソースを追っかけにくい
どこで変数の値が変わるか分からないので、
いちいち全体を追っかけないといけない。
モジュールが増えれば増えるほど困難になる。
理由2 多人数での開発が難しい
適用範囲が広いってことは、変数名がぶつかったり
途中で違うものになったりして結合時などに大変なことになる。
理由3 昔の自分が書いたソースは意味不明w
理由1とほぼ同じ。
0570nobodyさん
2007/09/19(水) 17:41:42ID:???$hogehoge['1'] = "ほげほげほげお";
for($i=0;$i<300000;$i++){
print $hogehoge['1'];
}
$hogehoge["1"] = 1.14〜1.22秒
$hogehoge['1'] = 1.22〜1.33秒
$hogehoge[1] = 1.11〜1.2秒
結論
30万回ループで差がない=変わらない。
0571nobodyさん
2007/09/19(水) 17:42:15ID:???0572nobodyさん
2007/09/19(水) 17:50:51ID:???for($i=0;$i<300000;$i++){
print $hogehoge[ほげほげほげお];
}
$hogehoge["ほげほげほげお"] = 1.2秒
$hogehoge['ほげほげほげお'] = 1.2秒
$hogehoge[ほげほげほげお] = 1.6〜1.7秒
差はでたが微妙すぎる
0573nobodyさん
2007/09/19(水) 17:52:22ID:???NFCとかNFDとか
0574nobodyさん
2007/09/19(水) 17:52:22ID:???「Noticeを、許したタイポで、地獄見る」
define('type', false);
if(typo){
echo "PHP「罠にかかったな小僧!」\n";
};
0576nobodyさん
2007/09/19(水) 17:56:04ID:???皆は自動でクオートするように設定してる?
自動にすると、なんかこの機能っていろんな意味で不便じゃね?
0577nobodyさん
2007/09/19(水) 17:58:30ID:???自動ONでやってる。
"の送信が\"になるのは
$_POST[a] = eregi_replace("[\]", "", $_POST[a]);
で回避してる。
0582577
2007/09/19(水) 18:17:29ID:???あーーー!!!!
0583nobodyさん
2007/09/19(水) 18:24:13ID:???の正規表現はどう書くか教えて下さい。
----------
...
...
文章この行まで(以下空白部分を削除したい)
-----------
0584583
2007/09/19(水) 18:27:08ID:???0585nobodyさん
2007/09/19(水) 18:32:14ID:???0586nobodyさん
2007/09/19(水) 18:59:30ID:???$begin = microtime(true);
for($i=0; $i<=300000; $i++){ if($test['abc'] == 'ghi'); }
echo microtime(true) - $begin . "\n";
$begin = microtime(true);
for($i=0; $i<=300000; $i++){ if($test["abc"] == 'ghi'); }
echo microtime(true) - $begin . "\n";
$aaa = microtime(true);
for($i=0; $i<=300000; $i++){ if($test[abc] == 'ghi'); }
echo microtime(true) - $begin . "\n";
結果
0.054291009903
0.0549669265747
0.413056850433
相当遅い。
0587nobodyさん
2007/09/19(水) 19:04:33ID:???あとこういうのやってみた。
$test['abc'] = 'def';
$key = 'abc';
$y = 'y';
for($i=0; $i<=300000; $i++){ if($test[$key] == 'ghi'); }
for($i=0; $i<=300000; $i++){ if($test["$key"] == 'ghi'); }
for($i=0; $i<=300000; $i++){ if($test["ke$y"] == 'ghi'); }
for($i=0; $i<=300000; $i++){ if($test['ke'.$y] == 'ghi'); }
0.0560829639435
0.0782399177551
0.2595911026
0.241644859314
やはり差が出る。
■ このスレッドは過去ログ倉庫に格納されています