【PHP】質問スレッドpart33【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/02/16(木) 03:19:52ID:xwXojaq/【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。
過去スレ、関連リンク、FAQ等>>2-10辺り
0352nobodyさん
2006/02/26(日) 16:06:39ID:???0353nobodyさん
2006/02/26(日) 16:09:31ID:???その間違い間違いであるがエラーではないからだれも教えてくれません。
その手のミスを防ぐ原始的な方法としては
if ( "hogehoge" == $hoge) ;
と書くようにすること。こうすれば "hogehoge" = $hoge はエラーとなるのでわかりやすい
0354nobodyさん
2006/02/26(日) 16:16:39ID:???で良く使われるヤツだな。
NULL == $xって最初は何だ?って思うんだけどね。
0355nobodyさん
2006/02/26(日) 16:20:59ID:???ifの条件式の中で代入演算子が使えなくなったり怒られたりするようになると、手間が増えて面倒。
特にNULL,FALSE,なんかの値(や配列)のどれかを返す関数を使う場合、ifやwhileの条件式の中で使うとすっきりと書ける。
ミスの対処法は>>353が書いてるようにするくらいしか無いんでね?C FAQでも見かけた希ガス。
0356nobodyさん
2006/02/26(日) 16:23:25ID:???0357nobodyさん
2006/02/26(日) 16:37:46ID:YAFRqcKG0358nobodyさん
2006/02/26(日) 16:39:13ID:izomZemYいや、ホント助かりました。
ありがとうございます。
VB→C#とやってきてるのですが、
$hoge = 12;
$hoge = "test";
#hoge = date("Y");
とか、型宣言してないのに。。とか、驚き中です。
先ほどの質問後にIDEでもあればいいのかなと思い、
ttp://phpspot.net/php/phpeditor.html
がHITしたので、特徴にある、
「・構文チェック機能 … ボタン一発で構文エラーがないかチェックできます。」
で、前述のif($hoge = "hoge")が怒られるかどうか確認してみます。
>>354
あ〜、なるほど〜って感じです。
先輩。助かりましたよ。
ありがとうございます。
>>355
そうですよね、条件文内で関数使いますもんね。
>特にNULL,FALSE,なんかの値(や配列)のどれかを返す関数を使う場合、ifやwhileの条件式の中で使うとすっきりと書ける。
これ、メモっておきました。
ありがとうございます。
ちょっとした疑問追加です。
echo関数の引数に、改行コードを含めるのは慣例で、
理由はHTMLとして出力された時に読みやすくする為という事でよいですか?
0359nobodyさん
2006/02/26(日) 17:00:53ID:???> 「・構文チェック機能 … ボタン一発で構文エラーがないかチェックできます。」
> で、前述のif($hoge = "hoge")が怒られるかどうか確認してみます。
それを怒るIDEは存在しないと思いますよ。構文としては合ってるし、よく使うから。
if($hoge = hoge()) {
hoge2($hoge);
}
みたいな感じで、関数の戻り値をチェックするのと同時に変数に格納しといて
ifの中でその値を利用する…みたいな書き方は普通にやります。
よく使うケースは
if($fp = fopen("file", "a")) {
fputs($fp, $data);
}
$hoge = hoge();
if($hoge) {
hoge2($hoge);
}
と分けてもいいんだけどかえって煩わしいので。
それにしても if("hoge" == $hoge) ってミスタイプ防止が目的だったのか…
同じ会社でこういうコーディングする人がいるから何でだろうとずっと思ってたよ。
0362nobodyさん
2006/02/26(日) 17:04:43ID:???>>358
> echo関数の引数に、改行コードを含めるのは慣例で、
そんな慣例は無いと思うけど。
> 理由はHTMLとして出力された時に読みやすくする為という事でよいですか?
出力に改行が欲しければ改行を付ける。不要なら付けない。そんだけ。
HTML中の改行は、場所によっては無視されるのでデザインに影響しないけど、
場所によっては表示に隙間ができたりする場合もあるから要不要はちゃんと考えないと。
0363nobodyさん
2006/02/26(日) 17:18:49ID:YAFRqcKGそんなのあるの始めて知った
ありがとう
0364358
2006/02/26(日) 17:22:31ID:???ありがとうございます。
仰るとおり、上述のIDEには怒られませんでした。
また、いただいたサンプルコードで、
理解できました。
$fpにはtrueが入っているって事ですよね。(bool型あるのか。。)
優しく教えてくれて感謝です。
お仕事などお忙しいでしょうが、
頑張ってくださいね。
>>362
よくわかりました。
>場所によっては表示に隙間ができたりする場合もあるから要不要はちゃんと考えないと。
これ、助かりました。
知らなかったら必ず一回はハマりそうです。
そこら辺も意識にいれてやっていきます。
ありがとうございます。
それでは300円で買った10日で覚えるシリーズを
今から10日分進めたいと思いますです。
皆さん、ありがとうございました。
0365nobodyさん
2006/02/26(日) 17:37:35ID:???というスクリプトに対してwarning! chmod() opening なんとか remitted in なんとか online 243
とか言う警告がサーバーでプログラムを動作させると出るけど何でしょうか?
ちなみに画像掲示板スクリプトですが動作は正常です。あくまで警告が気になります。
0366nobodyさん
2006/02/26(日) 17:44:48ID:???ファイルのオーナーが違うかパーミッションの問題かサーバーで制限をかけてるかで
chmodがちゃんと働いてないんじゃないの?
特に困ってないなら @chmod() って感じで@つけて表示を抑制しちゃってもいいと思うけど。
0367nobodyさん
2006/02/26(日) 18:05:12ID:???==では定数を左に置くと、比較演算子と代入演算子を間違えるミスをし難くなる
・・・と
0368nobodyさん
2006/02/26(日) 18:08:40ID:???ミスしたときに気づきやすい
0369nobodyさん
2006/02/26(日) 18:08:45ID:???0371365
2006/02/26(日) 18:14:48ID:???@ってどういう効能でしょうか?//などのコメント表示とは意味合いが違いそうですが。
まずは言われたとおりにやってみます。
0372nobodyさん
2006/02/26(日) 18:16:53ID:rIz4zvidファイルを呼び出して、表示というのはできないのですかね?ファイルを呼び出しだと、更新が楽なのですが…
0373366
2006/02/26(日) 18:19:58ID:???サーバー制限やオーナーなどの場合の対処ってどういうのがあるでしょうか?
質問範囲が広すぎて答え難い場合は失礼します。
0375nobodyさん
2006/02/26(日) 18:44:28ID:???次の様なエラーがでてきます。
対処方法をお願いします。
Warning: mysql_connect() [function.mysql-connect]:
Access denied for user: 'root@localhost' (Using password: YES)
in c:\program files\apache group\Apache\htdocs\test.php on line 4
can not connect db
0378nobodyさん
2006/02/26(日) 19:02:21ID:???コードビハインド的な手法は、
PHPで確立されていますか?
0379nobodyさん
2006/02/26(日) 19:12:47ID:???コードビハインドって何じゃ?と思ったが、ググってみるとHTML部分を外部に放り出すってことか。
「テンプレートエンジン」って言う事の方が多いかも知らんね。
幾つかあるけど、PHP開発元の推奨だと、smarty( ttp://smarty.php.net/ )かねぇ。
0380nobodyさん
2006/02/26(日) 19:31:40ID:???とても有益な情報、ありがとうございます。
そして、とても丁寧に。。
>>379さんの書いたソースは読みやすそうです^^
リンク先、熟読してみます。
ありがとうございました。
0381nobodyさん
2006/02/26(日) 20:07:32ID:???ありがとうございました。
解決しました。
しかし、次の壁にぶち当たりました。
次の様なものです。
よろしくお願いします。
Parse error: syntax error,
unexpected '<' in c:\program files\apache group
\Apache\htdocs\mytest1.php on line 33
0383nobodyさん
2006/02/26(日) 20:19:53ID:IH+ZKFPyリンクに飛ばすphp教えていただけませんか。
よろしくおねがいします。
0384nobodyさん
2006/02/26(日) 20:24:39ID:???選択した値(なんでもいい)に応じて飛ばす先のURLを用意して
header()でLocation使って飛ばすだけ。
0386nobodyさん
2006/02/26(日) 20:29:43ID:???ドキュメントのどこらへんでエラーがあったか知るうまい方法教えてください
0387nobodyさん
2006/02/26(日) 20:56:02ID:???英語を解読しましょう。
ただし、33行目を見渡してもエラーがない可能性もありますので、
その前後も見てみましょう。
あと、次からもう少し自分で調べる努力をしてみてください
0388nobodyさん
2006/02/26(日) 20:57:36ID:???XMLはあまり使わないんでよくわからないけど、
xml_get_current_line_numberは違うのかい
0390nobodyさん
2006/02/26(日) 21:17:12ID:???ttp://pc7.2ch.net/test/read.cgi/jisaku/1140192026/168n
0391nobodyさん
2006/02/26(日) 21:58:49ID:rIz4zvidありがとう。
0392nobodyさん
2006/02/26(日) 22:13:25ID:???お前の中の認識がものすごくおかしいのが気になる。
電波伝播方式世代: 3G
世代ブランド:FOMA WIN mova
ファイル形式: HDML
会社名: willcom (willcomeじゃねぇよ)
0393nobodyさん
2006/02/26(日) 23:10:21ID:???http_build_queryを使えばいいよね。
でも、これをもう一度FORMに戻すときは
まじめにつくらなきゃダメかね?
foreach($_GET as $k=>$v)
print("<INPUT TYPE=HIDDEN NAME='$k' VALUE='$v'>\n");
$_GET にさらに配列が入ってたのでアウトだった。
面倒くさい。なんか便利関数無い?
0394nobodyさん
2006/02/26(日) 23:10:51ID:???0398nobodyさん
2006/02/26(日) 23:40:01ID:???なるほど。いっかい使ってくっつけてまた分解すればいいのか。
$a = http_build_query($_GET);
$b = split("&",$a);
foreach($b as $g){
list($k,$v)=split("=",$g);
print("<INPUT TYPE=HIDDEN NAME='$k' VALUE='$v'>\n");
}
で取り合えず動いたっぽい。ヒントマジありがとう。
0399nobodyさん
2006/02/27(月) 00:06:34ID:???0400nobodyさん
2006/02/27(月) 00:21:49ID:???シリアライズして1個のinputにまとめちゃった方がいいんじゃないのか
0402nobodyさん
2006/02/27(月) 02:08:49ID:???それ使うと、たとえば "hoge[0]" という文字列が取得できずに
hoge[0] という配列変数がゲットできてしまう。
<INPUT>には書けない。
0404nobodyさん
2006/02/27(月) 21:01:28ID:???0405nobodyさん
2006/02/27(月) 22:23:53ID:u/5yiFb0ctype_alnum を使っているのですが、
例えば "123456" を入れても false が返ってきてしまいます。
strlen - 1 まで ord で表示させると、ちゃんと
"49 50 51 52 53 54" となっているのですが。
文字列の最後 $str(strlen($str)) を ord すると
"0" になります。
PHP のバージョンは 4.3.2 です。
0406nobodyさん
2006/02/27(月) 22:32:48ID:???> ctype_alnum を使っているのですが、
> 例えば "123456" を入れても false が返ってきてしまいます。
再現しない。再現するコードを寄越せ、サイトウ。
> 文字列の最後 $str(strlen($str)) を ord すると
> "0" になります。
存在しないデータをordしたら0になるのは当然じゃないのか。ord('')でも0になるぞ。
0407405
2006/02/27(月) 22:40:12ID:u/5yiFb0失礼しました。
たったこれだけなんですが…
$password = $_REQUEST['password'];
if (!ctype_alnum($password)) {
0408nobodyさん
2006/02/27(月) 23:06:38ID:d/u1H5JH先ほどインストールを終わらせ、
Eclipse+PHPで、本についてたサンプルコードを
動かしてます。
そこで、
mb_convert_encoding()が、
Call to undefined function mb_convert_encoding() in c:\program files\apache group\Apache\htdocs\tendays\02-01\common.php on line 27
のように、未定義だと怒られています。
もちろん、以下のようにちゃんと書いています(コピペというかファイルそのままコピー)
$encoding = "EUC-JP";
$s_encoding = "SJIS";
$data[ $i ] = mb_convert_encoding( $data[ $i ], $encoding, $s_encoding);
Eclipse+PHPでも自動補完される関数ですし、
PHPマニュアルを見てもPHP5対応とあります。
何か別途参照設定しないと使えない関数なのですか?
0409nobodyさん
2006/02/27(月) 23:11:26ID:???マルチバイト関数入ってないとかじゃないよね?
phpinfo()
でmb関係有効になってる?
というかくだ質じゃね
0413皮先くん ◆N3i.Qu1SoY
2006/02/28(火) 03:09:36ID:0kpMwz/eそれともおまいらの"静観"という「最も強力なアドバイス」のためか、
とにかくとうとう成功しますた!!
ttp://oresama.hopto.org/~sheel/phptest/formtest/form.php
成功したのは、まず、form.phpからform.phpへPOSTして
(1)POST内容を表示させる
そして
(2)POST内容をtext.datに書き込ませる
というPHPで言うと中級レベルのことができるようになりますた!
一番引っかかったのはやはりPHP4になってから
従来のPOSTの値を受け取る $hogehoge が使えなくなったことに
気がつくところでしょうか。PHP4からは
$_POST['hogehoge']
に変更になっていたなんて・・・。
どうりでどれだけGoogleで検索かけてその通りにやってるのに
うまくいかないわけだよ・・・orz
またそのうちスキルが更新されたときに報告しますね。
0414皮先くん ◆N3i.Qu1SoY
2006/02/28(火) 04:01:57ID:0kpMwz/e・text.datへ書き込むときに、以前にデータを置き換えずに追記するようにしたい
さらに、
・text.datへ書きためたデータを元にデータベースとして扱いたい
といった感じかな。
これについてはLet's PHPから会得した
ttp://oresama.hopto.org/~sheel/phptest/poll/poll.php
という技を俺様自身が解析をすることより実現できそうな悪寒が(((( ;゚Д゚)))ガクガクブルブルする。
請うご期待!
0415nobodyさん
2006/02/28(火) 05:36:22ID:???スレ住人一同
0416nobodyさん
2006/02/28(火) 08:37:29ID:???PHPでMySQLのストアドプロシージャを使うにはどうすればよいのでしょうか?
mysq_query()コマンドで行うのでしょうか・・
0417nobodyさん
2006/02/28(火) 09:03:28ID:???>くだスレで華麗にスルーされたのできますた。
その質問自体が目に入らなかった。
ストアドとかMySQL4.1や5以降でサポートされた機能は
従来のMySQL拡張サポート(mysql_*関数群)ではなく
改良版MySQL拡張サポート(mysqli_*)を利用する必要がある。
http://jp2.php.net/mysqli
0418皮先くん ◆N3i.Qu1SoY
2006/02/28(火) 09:15:26ID:A8IEBtjw以前のデータに「書き加える」ことはできるようになりました。
また、CSVの方があとで扱いやすいのかな?と思って
下記のようにCSV形式になるようにfwriteしてみますた。
これで一応どんどん書き込まれていくのですが、
さてはてそれを今度はどうやって統計処理などのデータベース化したらいいのでしょうか・・・。
ま、俺様のスキルはすごいのでおまいらが静観するだけで
どんどんレベルアップするので静観しておいてくださいね。ぷげらw
<?php
$filename = "text.dat";
$file = fopen($filename,"a");
flock($file, 2);
fwrite($file, "name," . $_POST['name'] . "¥n");
fwrite($file, "sex," . $_POST['sex'] . "¥n");
fwrite($file, "hobby," . $_POST['hobby'] . "¥n");
fwrite($file, "OS," . $_POST['OS'] . "¥n");
fwrite($file, "kansou," . $_POST['kansou'] . "¥n");
flock($file, 3);
fclose($file);
?>
0419nobodyさん
2006/02/28(火) 11:12:46ID:???substrでやるのしか考えられませんですた
0421nobodyさん
2006/02/28(火) 11:44:42ID:???$s = "12345678";
$s1 = $s{0}.$s{1};
$s2 = $s{2}.$s{3};
$s3 = $s{4}.$s{5};
$s4 = $s{6}.$s{7};
クールかどうかはともかくこれが1番シンプルで速いんじゃ。
0424nobodyさん
2006/02/28(火) 12:40:53ID:???エレガントじゃないけど、適当にやってみた
$r1 = explode("\r\n",rtrim(chunk_split($s,2)));
preg_match('/(\d{2})(\d{2})(\d{2})/',$s, $r2);
PHP5なら、>>422のstr_split()だね。
0425nobodyさん
2006/02/28(火) 13:02:39ID:???0426424
2006/02/28(火) 13:23:53ID:???やってみて、それで出来ないと思った俺がいる(bool cutを指定してなかっただけ)
# あと数字6文字だと思ってた。
使える関数が色あるな>PHP
0427nobodyさん
2006/02/28(火) 13:47:39ID:???正規表現が次に想定してた方法ですた。
PHP5ならばstr_split()がベストのようです。
wordwrapはそのまま出力する時につかえますね。
既出スマソ
>>421-426皆様ありが�d
0428nobodyさん
2006/02/28(火) 23:00:13ID:C5SJRerwsafemodeじゃないのにphpからフォルダが作成できないです。
ちなみにperlからも出来ない・・・orz
これってモジュール版で動いてるから仕方ないんでしょうか?
解決策は鯖管に頼むしかないんでしょうか・・
0431nobodyさん
2006/02/28(火) 23:23:37ID:???出来ました!
でもパーミッションが設定どおりには出来ませんでした。
Perlだとちゃんと設定どおりに出来ました。
mkdir ("./test/test/", 0707);
とやっても705になってしまいます。
chmodかけても変わらず。
ただ所有者がapacheなフォルダになってしまっています。
adminでファイル・フォルダ操作を自由にこなす為には
アパッチをadmin:adminで動かせば良いのでしょうか?
0432nobodyさん
2006/02/28(火) 23:25:22ID:???0433nobodyさん
2006/02/28(火) 23:26:27ID:???0434nobodyさん
2006/03/01(水) 00:16:35ID:???phpをモジュールはApacheのユーザで動くのでphpで作ったディレクトリはapacheとかnobodyとかになってOK
phpやperlで処理するなら07xxや06xxで問題無いと思うけど?
adminの権限は?root権限があるならApacheをadminで動かすのはいかがかと。
ってか連鯖でしょ?変更できるのかね・・・
0435nobodyさん
2006/03/01(水) 10:59:06ID:???ありがとうございます。
所有者が違うとFTPソフトでダウンロードが出来ない事があるんですね。
では現在の>>431は動作的にはごく普通と解釈してもよろしいのですね。
ユーザ:adminにroot権限があるのかはどのようにしたらわかりますでしょうか・・。
0436nobodyさん
2006/03/01(水) 17:07:26ID:???0439nobodyさん
2006/03/01(水) 18:39:11ID:???手始めにPC-UNIXを勉強すると分かる。
0440nobodyさん
2006/03/01(水) 19:02:10ID:???0441nobodyさん
2006/03/01(水) 20:02:44ID:???〇 きんもーっ☆
慣れないことをするから……
0442nobodyさん
2006/03/02(木) 11:01:03ID:gp0qU8DL$test = "『これはテストです』";
func2();
print "$test";
}
function func2(){
$test = "『func2内で新たに定義されました』";
}
//-------メイン----------
func1();
=======================================
func2 の内容が反映されないのですが
どうしたらよいでしょうか。上記がコードです。
0444nobodyさん
2006/03/02(木) 11:04:44ID:???0445nobodyさん
2006/03/02(木) 11:12:00ID:???値渡しのときはreturnで戻す
0447nobodyさん
2006/03/02(木) 15:19:17ID:d8+PxLHhそのほうがよさげだね。
むしろ
利用環境(OS、ソフト、PHPバージョンなど)
みたいなのがいいぽい?
次回テンプレに入るといいね
0448nobodyさん
2006/03/02(木) 18:35:04ID:???何かおすすめの書籍ってありますか?
よろしくお願いします。
0449nobodyさん
2006/03/02(木) 18:49:27ID:???0450nobodyさん
2006/03/02(木) 20:31:51ID:???0451nobodyさん
2006/03/02(木) 20:36:21ID:???むしろ
『「エスパーきぼんぬ」「氏ね」「(゚Д゚)ハァ?」等のレスを貰う八ヶ条』
は補足するくらいなら
『「エスパーきぼんぬ」「氏ね」「(゚Д゚)ハァ?」等のレスを貰わないための八ヶ条』
に変えるべき
■ このスレッドは過去ログ倉庫に格納されています