【PHP】質問スレッドpart20【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/06 15:44ID:paJ4kjjQ・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレ等>>2-4
抜けているものがあったら補足願います
0331nobodyさん
04/08/13 20:26ID:???echo $on[5][3];でいい
0332329
04/08/13 20:29ID:???0336nobodyさん
04/08/13 21:17ID:iU64GMXW拡張子「.php」のファイルが一切見られないサイトは、
どのようにしてファイル内にPHPが記述されているのか否かを判別させているのでしょうか??
0337>>336
04/08/13 21:28ID:???AddType application/x-httpd-php .php .html .htm
AddType application/x-httpd-php-source .phps
0338nobodyさん
04/08/13 21:43ID:???<html>
省略
<?php処理1?>
省略
</html>
<?php処理2?>
処理2が重たい&出力に関係ないので
先に処理1だけ出力させたいのですが、どのような方法があるでしょうか?
0339nobodyさん
04/08/13 21:50ID:???言ってる意味がわからんが、必要な時に呼び出せばいいんでないのかな?
<?php
function 処理1() {
}
function 処理2() {
}
?>
<html>
<?php 処理1(); ?>
</html>
<?php 処理2(); ?>
内容的には変わらないけど。
0341nobodyさん
04/08/13 21:56ID:???有難う御座います。
解り辛くてすみません。
そういう意味ではなく、
</html>までのバッファを先に出力して処理2に移りたいという意味です。
0343nobodyさん
04/08/13 22:18ID:???0345344
04/08/13 22:28ID:???0346nobodyさん
04/08/13 22:32ID:???>変数名に全角使えるとか発想できるんだろう
逆に発想出来ないのは、頭が固い証拠では?
マニュアルの「変数」の章の「基本的な事」参照
ttp://www.php.net/manual/ja/language.variables.php#language.variables.basics
>>338
flush()
0347nobodyさん
04/08/13 22:33ID:???ob_implicit_flush(1);
while (ob_get_level()) ob_end_flush();
書けば、逐次表示されます
でもこれ、
mb_http_output('SJIS');
ob_start('mb_output_handler');
と併用するとうまくいかないんだよなー
エロイ人教えて
0349294
04/08/13 23:48ID:???参照先まちがえてますた。正しくは、
ttp://www.pat.hi-ho.ne.jp/dimension/sample/sample_class_dp_singleton.shtml
PHP 4.3.x は $instance = new Class(); としたときにインスタンスの
コピーを返します。
シングルトンパターンなどで、毎度同じインスタンスを利用したい時は
リファレンスを使います。くわしくは参照先で。
0350nobodyさん
04/08/14 01:34ID:???<html><head></head><body>
$opendir = dir(".");
$i = 0;
while (($ent = $opendir->read()) != FALSE) {
if (is_dir($ent) != FALSE) {//ディレクトリのみ
$i++;
$dirname[$i] = $ent;
echo '<a href="aaa.php?page='.$ent.'">'.$ent."</a><br>\n";
}
}
if ($page == $dirname[1]) {
echo "ああああああ";
}
echo "</body></html>";
?>
こういう風にしているんですが、$dirname[1]に当たるリンクを押しても
ああああああの文字列が表示されないんですが、いったい
どこが間違ってるんでしょうか・・・
0351nobodyさん
04/08/14 01:49ID:???print "_GET['page'] : ".$_GET['page']."; page : ".$page; を仕込んで
表示されるかどうか試してみ
0352nobodyさん
04/08/14 03:10ID:???0353nobodyさん
04/08/14 03:32ID:RcWJyX8gfunction abcd($1,$2,$3) {
などで、この例えば$2に値が入っていない(入れ忘れてしまった)
場合には、phpがエラーを出すのですが、
この$2に値が入っているか居ないかを調べるにはどの関数を使えばいいでしょうか?
defined かなと思ってやってみたのですが、うまくいかなくて。
よろしくお願いします。
(使い方は
$2に値が無い場合(空)に予め用意したデフォルト値を代入?したいのです。ifとかつかってですが。)
0354nobodyさん
04/08/14 03:47ID:???これさえ満足させればいいなら
function abcd($1,$2='でふぉると',$3)
でいいんじゃないかい?
0355nobodyさん
04/08/14 03:57ID:???その場しのぎでいいなら、全部にデフォ値設定かなぁ。
0357353
04/08/14 05:13ID:???function abcd($1,$2="hoge",$3="moge") {
です。
デフォルト値を入れるのなら右側にしないとだめでした。
>>354さん>>355さんありがとうさんでした〜
ifとか使ってごにょごにょしないとだめかなと思ってたので大喜びですw
0358nobodyさん
04/08/14 10:11ID:???関数の引数の初期値にグローバル変数を定義することはできますか?
具体的には、次のようなことがしたいのです。
---------------------------------------
1 $variable = "global variable";
2
3 function test($var="$variable")
4 {
5 print $var;
6 }
7
8 test();
---------------------------------------
このようなスクリプトを書くと、以下のようなエラーになってしまいます。
Parse error: parse error, unexpected '\"' in index.php on line 3
対処法がありましたら、教えてください。
0359nobodyさん
04/08/14 10:32ID:???はぁ・・頼むからマニュアル嫁でくれよ…ばっちり書いてあるだろ
ttp://www.php.net/manual/ja/functions.arguments.php#functions.arguments.default
>デフォルト値は、定数式である必要があり、 (例えば、)変数やクラスのメンバーであってはなりません。
0360350
04/08/14 12:13ID:???4時間ぐらい悩んでいたのが嘘のようです。
本当にどうも有り難う御座いました。
0361nobodyさん
04/08/14 13:08ID:go/x2Owu頭から水をかぶって、頭を冷やせば見えてくるよ
0364nobodyさん
04/08/14 15:25ID:???<son>
<taro></taro>
<jiro></jiro>
<sab></sab>
<white></white>
</son>
上のようなXML文書を、 simplexml_load_fileで読み込んで、下のような形式で子ノードの一覧を出力したい
と思っています。
son
jiro
sab
white
その場合、どうすればいいのでしょうか?
0365nobodyさん
04/08/14 15:28ID:???jiro
:
ではなく、
taro
jiro
:
でした、すいません。
0366nobodyさん
04/08/14 15:36ID:???ドキュメントがまだ十分に無いから、使い方とかどこかに書き残すと重宝されるよ。
0367nobodyさん
04/08/14 16:18ID:???現ディレクトリ以下の下位ディレクトリのファイルの取得は
どうすればいいんでしょうか。
0369364
04/08/14 17:11ID:???要するに、要素名を得たかっただけなのですが……SimpleXMLには、そういった関数が用意
されていないみたいです。じゃあ、どうやって要素名を得ればいいのか――が、今回の質問で
あります。
0370nobodyさん
04/08/14 18:38ID:???XML分かんないんでやっつけだけど、これで一応子ノード一覧取れるよ
<?php
function child_list($xml, $nest=0) {
foreach ($xml->children() as $key => $element) {
echo str_repeat(" ", $nest) . "$key\n";
child_list($element, $nest+1);
}
}
$xml = simplexml_load_string(
'<son>
<taro></taro>
<jiro></jiro>
<sab></sab>
<white></white>
</son>');
child_list($xml);
?>
0372nobodyさん
04/08/14 19:41ID:???{
array_push($array,"test");
}
$a = array();
test($a);
print count($a);
このようなスクリプトを書いたのですが、$aに値が代入されず、最後の行で0と出力されてしまいます。
どのようにすれば$aに値が代入されるようになりますか。
0373nobodyさん
04/08/14 20:19ID:???function test(&$array)
{
array_push($array,"test");
}
もしくは
function test(&$array)
{
return array_push($array,"test");
}
にして戻り値を使う
0375nobodyさん
04/08/14 21:21ID:???0376nobodyさん
04/08/14 22:17ID:???値渡し意識してるなら、普通にreturnで返すだろうし、
参照渡しを意識してるなら&ぐらい気づくだろうと思うのだが、
なぜ、 >>372 は それで値の変更ができると思ったのかなぁ。
0377Imo ◆.jC7ANgFY.
04/08/14 22:23ID:???# VBは省略すると参照渡しになる
0378nobodyさん
04/08/14 22:28ID:8vlh+W98$timestamp = 年/月/01 という時間を入れた変数を
$timestamp = 年/月-1/31 というようにしたいのですが、
(つまり1日前日にずらす)
どのようにすればいいのでしょうか?
ご教授おながいしますm(_ _)m
0379nobodyさん
04/08/14 22:31ID:???0381nobodyさん
04/08/14 22:36ID:8vlh+W98レスありがとうございます。
つまり、エポック秒に直して、ひいてまた
もとの形に戻すってことですね。
ついでで恐縮ですが、エポック病になおしかた、
戻し方も教えてもらえないでしょうか?
調べたのですが、エポックってぐぐってもあんまりでてこないようなので・・・
0382nobodyさん
04/08/14 22:39ID:???全部マニュアルに書いてあったよ
http://www.php.net/manual/ja/ref.datetime.php
0384nobodyさん
04/08/14 22:56ID:8vlh+W98にしてもあれですね、1日戻すだけでも結構だるいもんですね。
0385Imo ◆.jC7ANgFY.
04/08/14 23:01ID:???strtotimeもいろいろ使えるよ。一度見ておくといいかもしれない。
04/08/14とあったら解釈が違ったりするけどね。
(外国は年月日の順番が違うから
2004/08/14ならちゃんと解釈してくれる。
0386nobodyさん
04/08/14 23:03ID:???勉強になった
0388nobodyさん
04/08/14 23:10ID:???エポック秒で格納しておいて
date()で書式変えて表示すればいい
0389nobodyさん
04/08/14 23:10ID:???これでOKじゃね??
0390nobodyさん
04/08/14 23:20ID:???echo date("Y/m/d H:i:s",$timestamp);
$timestamp = mktime(0,0,0,08,date("d",$timestamp)-1,2004);
echo date("Y/m/d H:i:s",$timestamp).;
0391nobodyさん
04/08/15 00:02ID:???変数に何入れても空白なわけだが・・・
0392nobodyさん
04/08/15 00:12ID:ThpZR4Ya投稿データチェック(未選択不可)を行いたいのですが、
どうすればいいのですか?
下記のところに、新しく追加したら大丈夫だと思うのですが..
チェックの仕方がわかりません。
#── メールアドレスをチェック
length($::FORM{'email'})
&& ($::FORM{'email'} !~ /^[!-?A-~]+@[!-?A-~]+\.[!-?A-~]+$/)
&& push(@error, 'メールアドレスが不正です。');
#── パスワードをチェック
($::FORM{'key'} =~ /[<>&"]/)
&& &::error(\('パスワードに「<, >, &, "」は'
. '使えません。'));
0394392
04/08/15 00:16ID:ThpZR4Ya申し訳ないです....
0395nobodyさん
04/08/15 00:37ID:nLnvBjde本家 http://phplib.netuse.de/index.php3
ファイル名 phplib-7.2c.tar.gz
0396395
04/08/15 00:37ID:nLnvBjde0397394
04/08/15 00:42ID:nLnvBjdehttps://sourceforge.net/project/showfiles.php?group_id=31885&release_id=44737
0398391
04/08/15 00:52ID:???0400nobodyさん
04/08/15 01:07ID:???上のURLの上体で
〜〜〜〜〜〜〜
</TBODY>
</TABLE>
</TD>
<TD bgcolor="#5788b5" valign="top">
<?php
if ($mode != ""){
include "./page/$mode.php";
}else{
include "./page/main.php";
}
?>
</TD>
</TR>
</TBODY>
</TABLE>
</TD>
〜〜〜〜〜〜
にしてあるんだが
表示されるのはhttp://〜/page/main.php デツ
0402軟式PHP
04/08/15 01:15ID:???のあとに
$mode = $_REQUEST["mode"];
をいれてみ。
0403軟式PHP
04/08/15 01:17ID:???しかしお盆どうすっかなぁ( ´-`)
0404カポコン
04/08/15 01:30ID:???0406nobodyさん
04/08/15 01:50ID:???0408nobodyさん
04/08/15 01:54ID:???0409nobodyさん
04/08/15 04:03ID:???BBSのログ等を表示する際の処理は
for foreach while
どれが効率良いでしょうか。
ご教授願います。
0410nobodyさん
04/08/15 04:25ID:???その時の結論は忘れたけど
俺はあんまり気にせず、状況に合わせてソースがきれいに書けるやつを選ぶ
0411nobodyさん
04/08/15 04:38ID:???そうなんですか。
速さよりもどれが負荷が少ないかなと思いまして。
でもそんなには変わらないのですかねー。
有難うです!
0412nobodyさん
04/08/15 09:01ID:???なんか、namespaceとかprivateとかの新機能が使えないんですけど、なぜですか?
心当たりがあれば教えてください。
0414nobodyさん
04/08/15 09:51ID:???具体的にはinclude_pathに追加したい。
0415nobodyさん
04/08/15 10:02ID:???0416軟式PHP
04/08/15 11:53ID:???俺も410のように保守性を重視するよ。
0417nobodyさん
04/08/15 12:11ID:???<SELECT name="sex">
<OPTION value="女" selected>女</OPTION>
<OPTION value="男">男</OPTION>
</SELECT>
<INPUT type="submit" name="action" value="送信">
</FORM>
としてるんだが、変数が格納サレマセン。なぜでつか?
0418nobodyさん
04/08/15 12:16ID:???action="info.php"として info.phpの中身はphpinfo();のみ。
表示されたhtmlの中でセックルを探してみ
0419nobodyさん
04/08/15 12:23ID:???0421軟式PHP
04/08/15 12:44ID:???いやそのままと思うけど。既にヘッダーが出力されているから
header()は使えないってことだよ。header()周り見てみ。
何か出力してるところがあるはず。
0423419
04/08/15 12:55ID:???<?php
$action = $_REQUEST["action"];
$age1 = $_REQUEST["age1"];
$age2 = $_REQUEST["age2"];
$Region = $_REQUEST["Region"];
$sex = $_REQUEST["sex"];
$server = $_REQUEST["server"];
$cls = $_REQUEST["cls"];
$monster = $_REQUEST["monster"];
if ($action == "送信"){
$data = 'data.cgi';
$age = $age1.$age2;
$input = implode(",", array($age,$Region,$sex,$server,$cls,$monster));
$fp = fopen($data,"a");
flock($fp,LOCK_EX);
rewind($fp);
fputs($fp, "$input\n");
flock($fp,LOCK_UN);
fclose($fp);
$ok = 1;
}
header("Location:http://**********/index.php");
?>
0425412
04/08/15 13:18ID:???「private var $x;」と書いていたためでした。ばかです。
namespaceのほうはやっぱりエラーになります。
namespace Foo {
class Bar {
}
}
これだけなんだけどな。
0426nobodyさん
04/08/15 13:44ID:???RC2で消えたんじゃなかったん?
0429Imo ◆.jC7ANgFY.
04/08/15 15:10ID:???実際は「1.while 2.foreach 3.for」っぽい。
後半の二つはファイルを全部読み込むのはいいけど配列にするため
(explode&配列アクセス)の処理で時間を食っている様子。
forとforeachが違うのは、forが$i++や$i < count($data)とかを
毎回通しているためのロスみたい。
とはいってもテキトーにしか調べてない(というか差が誤差の範囲で
しかでない)から正確にはよくわからない。
whileはファイルを1回だけ読むのなら適当。
ただ、私は何度チェックしても無限ループが怖い。
forは添え字を自分で管理でき、
前とか後とかをすぐに参照できるという点で良い。
foreachは添え字が数値でなくても、
ちゃんとすべて処理できるという点で良い。
こんなところ。ただし、これは私の考えなだけ。
0430nobodyさん
04/08/15 15:43ID:???>>337のやり方で拡張子無しのファイルをPHPとして認識させるにはどうしたらいいですか?
または、別のやり方でできるのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています