【PHP】下らねぇ質問はID出して書き込みやがれ 85
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/06/15(月) 22:53:52ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 84
http://pc11.2ch.net/test/read.cgi/php/1240835951/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0671nobodyさん
2009/07/19(日) 11:15:25ID:???ファイル使うと、ファイル形式云々かんがえなきゃいけなかったけど、
今はYAML使えばいいじゃんって感じで。
たいていの言語からでも読み書きできるから汎用性あるし、
読みやすい、書きやすいし、データを簡単に自由なデータ構造に出来る。
遅いって問題があるけど、それはserializeでキャッシュにしてしまえばいいし。
0672nobodyさん
2009/07/19(日) 11:53:38ID:???仕方なくファイルに吐くにしても使い回しを考えてXMLとかJSONだし。
0674nobodyさん
2009/07/19(日) 14:33:46ID:???SQLなんて忘れてしまうよw
普通はO/R使うんでな。
0675nobodyさん
2009/07/19(日) 14:56:26ID:???0676nobodyさん
2009/07/19(日) 15:19:31ID:???SQLの改善費用だけで2500万とかうちの会社はホント恥ずかしい
O/Rはともかく、未だにEXPLAINすら知らない開発者は多い
0678nobodyさん
2009/07/19(日) 18:03:43ID:???0679nobodyさん
2009/07/19(日) 19:47:22ID:???お前らも俺もコーディングの正確さ・美しさに捕らわれすぎ
0680nobodyさん
2009/07/19(日) 20:38:41ID:???0681nobodyさん
2009/07/20(月) 00:02:29ID:NuDmDR7p・料理名(必須入力)
・作り方文章(必須入力)
・写真一枚(任意入力)
・写真の解説(任意入力。写真がない場合は出力しない「三つ葉を散らすと見た目も綺麗です」みたいな感じ)
この場合、「写真の解説」の出力判別用に、登録時にpic_upload = 1のようなカラムをDBに用意・insertして
それを判別するべきでしょうか?
該当ファイルが存在するかどうかをfile_exists();で確認して出力するしないを決めても良いかと思ってたんですが
ヘタなやり方だったかもと悩んできました
皆さんならどんなやり方にしますか? ご意見お願いします。
0682nobodyさん
2009/07/20(月) 00:14:57ID:mGSM8h71そういう質問するってことは、画像ファイル名は(id).jpgみたいに自然に定まる仕組みなのかな。
そうだとしても、pic_uploadとかやるよりはファイル名ないしパスを入れるカラムを作っといたほうがいいと思うな。
0683nobodyさん
2009/07/20(月) 00:36:00ID:???0684nobodyさん
2009/07/20(月) 00:36:51ID:NuDmDR7pなるほどー、それは確かにそうですね!
思いつかなかった。今まで画像までのパスを生成する関数をいちいち動かしてました
そうした方が全部一発で出来ますね!
ありがとうございました!
0685nobodyさん
2009/07/20(月) 01:55:21ID:81Sgp959レスが遅れて申し訳ありません。
各メンバーの近況ひとこと欄でほぼ間違いはありません。
Web上に存在する1行掲示板スクリプトを参考に、とりあえずコメントだけでも、
書き込みと更新ができるようにと色々改造を施してみたのですが
ファイルを読み込んで表示するだけで、内容の更新ができませんでした。
元となったスクリプトは、http://wakusan.com/programinng_PHP/one_bbs.htm ですが
これを参考に書き換えたのがこれです。
http://kissho.xii.jp/1/src/1jyou84526.zip.html
どのようにすれば更新ができるようになるのでしょうか?
>>670
その辺は想定しなくて大丈夫です。
0686nobodyさん
2009/07/20(月) 02:00:05ID:???ファイルがアップロードされたかどうかを判定する為にだけ使用する、という認識で良いですか?
$_REQUEST["up"]
0687685
2009/07/20(月) 02:00:29ID:81Sgp9590688nobodyさん
2009/07/20(月) 02:03:45ID:???0689nobodyさん
2009/07/20(月) 02:06:06ID:???そりゃそのスクリプト書いた人の意図によると思うけど
おそらくはGETかPOSTでupを送っておいて
処理先のスクリプトでupを確認してアップロード処理を行うっていう
よくある手法じゃないかな
>>687
A田A男さんは1行目とか決めておいて更新が来たら1行目を書き換えればいいんでね?
0690nobodyさん
2009/07/20(月) 18:51:36ID:LTJd3lAbPHPでjavascriptにあるsettimeoutみたいなのありませんか?
ある時間になるとその時間に合わせて、PHPで作成したデータを元に表を更新するというものです
javascriptで作成した時計の部分はsettimeoutを使って1秒ごとに更新されていいのですが、
当然ながらその部分だけ更新されて、ページ全体は更新されないので・・・
何かいい方法はないですか?お願いします
0691nobodyさん
2009/07/20(月) 19:10:37ID:???0693nobodyさん
2009/07/20(月) 19:28:53ID:???crond用のプロセスを作って、そこが参照する設定ファイルをPHPから
更新するなどの方法はある。けど、ブラウザ上の再読み込みを行いた
いなら、やっぱり settimeout をPHPで吐くか、または、
<meta http-equiv="refresh" content="時間,URL">
などのヘッダを使って強制的に再読み込みをするなどがいいと思う。
0694nobodyさん
2009/07/20(月) 20:02:55ID:LTJd3lAb>>693
>settimeout をPHPで吐く
というのはどのようにすればよいですか?
最悪metaで強制的にしますかねー ヘッダを全ページで共有して使っているので考え物ですが
0695nobodyさん
2009/07/20(月) 20:12:54ID:???metaタグのrefreshでリロードさせるか、javascriptでリロードさせるしかない。
ヘッダを全ページ共有ってtitleとかも共有なのか?titileはページ毎に置換してない?
つまりそのページだけrefreshのmetaタグを置換して入れればいい
0696nobodyさん
2009/07/20(月) 20:16:56ID:mGSM8h71あなたにとってPHPが
「とりあえず今回動けばいいブラックボックス」ではなく、
「難しいけど今後とも活用していきたい道具」であるならば、
以下を参考にがんばるか、以下を理解できるようになるまで本を読もう。
http://jp.php.net/manual/ja/language.variables.external.php
http://jp.php.net/manual/ja/language.types.array.php
http://jp.php.net/manual/ja/book.filesystem.php
http://jp.php.net/manual/ja/function.print-r.php
0697nobodyさん
2009/07/20(月) 20:22:42ID:LTJd3lAbヘッダとフッタはそれぞれ1つのファイルを共有して各ページは中身(コンテンツ)だけ変更するような形でやってるんですよ
ちょっと特殊ですが なんでタイトルとかは全部同じです
今試しにmetaでやってみたんですが、更新ボタンを押してる感じがあるんでちょっと
上にも書いたんですけど今はjavascriptの時計の関数をonload=settimeout1秒ごとという仕組みにしてるんですけど、
全体は難しいですよね PHPとjavascriptじゃサイドが違うんで・・・
0698nobodyさん
2009/07/20(月) 20:44:06ID:???0699nobodyさん
2009/07/20(月) 20:46:49ID:???リロードさせるんだから、更新ボタンを押してる感じがあるのはしょうがない。
それが嫌なら、>>698 さんが言うようにajaxになるな。
0700nobodyさん
2009/07/20(月) 20:51:21ID:LTJd3lAb聞いたことはあるんですけど、全然知らないんですよね^^;
とりあえず調べてみます
参考になるページがあればお願いします
0702nobodyさん
2009/07/20(月) 21:47:10ID:???連想配列じゃなくて配列の配列
これは ArrayAccess のシグネチャと Zend Engine の参照渡し・戻しに関する問題らしい
配列の要素がオブジェクトなら常に参照扱いなので気にしなくて済む
// ○5.2.0, ○5.1.6
$a = new ArrayObject();
$a[0] = new ArrayObject();
$a[0][0] = 1;
// ○5.2.0 ×5.1.6
$a = new ArrayObject();
$a[0] = array();
$a[0][0] = 1;
0703nobodyさん
2009/07/22(水) 15:49:48ID:4ehWfJJ0PHPをパースする全てのページのフッタに著作権を自動挿入したいです。
mod_layout以外で何か方法はありますか?
0704nobodyさん
2009/07/22(水) 16:04:30ID:8OvKTpgg小手先でやるならregister_shutdown_function()とか。
0705nobodyさん
2009/07/22(水) 19:17:52ID:???複雑なJOINとかができる必要はないのですが、
プリペアドステートメントを使って、安全にWHERE文を追加していけるものがいいです。
Zend_DBとかSymfonyのDoctrineとかいろいろあると思うのですが、
独立して組み込めるものが望ましいです。
SQL文だけ組み立てて、実行自体は今まで使ってきたMDB2でできればなおいいです。
よろしければ教えていただければと思います。
よろしくお願いします。
0706nobodyさん
2009/07/22(水) 19:31:26ID:???もっと抽象的にやりたかったらこれ使ってさらに関数でも
クラスでも作ればよかろ
0707nobodyさん
2009/07/22(水) 20:00:53ID:???0708nobodyさん
2009/07/22(水) 23:44:43ID:???今はDoctrineがナウい
もちろんこいつ自体は独立して組み込める
ZendFramework+Doctrineも流行っている
0709nobodyさん
2009/07/23(木) 00:02:49ID:???0710nobodyさん
2009/07/23(木) 06:38:49ID:3HKcBquf説明不足の部分まで汲んでもらってありがとうございます!
なるほどです…。
PHP5.1 or 5.2の辺りで世間のインストール状況に一つ壁があると思うので
動作テストうんぬん考えるとArrayObjectってちょっと使いにくい感じかもですね。
0711nobodyさん
2009/07/23(木) 09:40:42ID:???QueryToolはプリペアドステートメントが使えないんですよね…。
もちろん、これを自分用に改修することはさほど難しくはないと思いますが、
既に実用に耐えているライブラリがあれば、そちらを使いたいと思いました。
>>707
Zend_Dbは、オブジェクト生成の際にホストまで設定しないといけないのが、
私にとってはネックになります。
自分で使う分にはすごくいいライブラリだと思うのですが、
現在会社で使っているフレームワーク上、それができないのです…。
(できなくはないけど、記述があちこちでばらけて後々面倒)
なので、SQL文を動的に生成し、それを文字列として取り出せるものが必要なのです。
>>708
Symfonyはセットアップが面倒なイメージがあったのですが、
独立して組み込むこともできるんですね。
ドキュメント等読んで調べてみようとお見ます。
皆さんありがとうございました。
0712nobodyさん
2009/07/23(木) 13:34:09ID:afGBhoweforeach ($var_names as $key => $value ) {
global $$value;
if (!isset($_SESSION[$value])){
$_SESSION[$value]= $$value;
}
}
}
というコードがあるんですけど、これは
・register_globals が設定されてなければ(つまりoffであれば)、
・配列$var_namesに入っているグローバル変数名を調べて、
・その名前と値を$_SESSIONに追加する
という理解でよろしいでしょうか。
またこの理解が正しいとして、なぜこんなことをしているのか分かる方はいませんか。
register_globalsがonのときなら、このような動作もわからなくはないのですが、
offのときにあえてこんなことをする理由がわかりません。
0713nobodyさん
2009/07/23(木) 13:43:15ID:???0714nobodyさん
2009/07/23(木) 14:28:45ID:t5/aDE1Aあれってsmatyとかフレームワークとか使ってんの?
小遣い稼いでる奴いたら教えて。
普通に働いてる奴も教えて。
0715nobodyさん
2009/07/23(木) 14:31:54ID:???0716nobodyさん
2009/07/23(木) 14:33:05ID:???0717nobodyさん
2009/07/23(木) 14:48:42ID:???0718nobodyさん
2009/07/23(木) 14:50:48ID:???まともなとこならフリーのもの(cakeとか)は使わない
自社製(他社製)のもの使うね
自社サイトの開発業務とかならなんでもあり
0719nobodyさん
2009/07/23(木) 14:52:49ID:t5/aDE1APHPできるって言われてもフレームワークやその他のプラグインも使えないで、
HTMLにだだ書きしてる奴とかいるのかな?と思って俺もほぼ変わんないけど。
派遣って給料高いし一回働いてみたいよな。
0720nobodyさん
2009/07/23(木) 15:01:14ID:???0722nobodyさん
2009/07/23(木) 15:09:56ID:???書き方が悪かったね
他社といっても関連企業のことね
ライセンスがらみの問題もなく
意見もちゃんと反映できる範囲にいる企業
0723712
2009/07/23(木) 15:32:53ID:afGBhowe>それは、たまに避妊したいときに利用することがある。
すみませんが、もうすこし詳しく教えていただけませんでしょうか。
#もちろんコンドームのことではないですよ?
0724nobodyさん
2009/07/23(木) 15:54:56ID:???ttp://d.hatena.ne.jp/keyword/register_globals
0725nobodyさん
2009/07/23(木) 15:59:07ID:???0726軟式PHP
2009/07/23(木) 16:00:48ID:???0727712
2009/07/23(木) 17:27:30ID:afGBhoweregsiter_globalsについては知っています。
質問はそこではないんですけど。
0728nobodyさん
2009/07/23(木) 17:36:31ID:???register_globals on のように
外部から来た変数を $xxx のように使いたいからでしょ。
0729nobodyさん
2009/07/23(木) 18:21:33ID:???当事者にどういうつもりでこんな糞コーディングしたのか頬をビンタしながら問い詰めなさい
0730nobodyさん
2009/07/23(木) 18:34:42ID:???>offのときにあえてこんなことをする理由がわかりません。
こんなことかかれて知ってますといわれてもな
offだからこそだろ
0731nobodyさん
2009/07/23(木) 18:35:31ID:t5/aDE1A0732nobodyさん
2009/07/23(木) 18:43:12ID:???0733nobodyさん
2009/07/23(木) 18:53:40ID:???該当部分のコード削除するか自分の考えるものに変更して
register_globalsをoffにして動作させてみた?
挙動比較してみて同じようなら意味のないコードなんでしょうよ
何か問題があったからそのコード入れたかもしれないし
ほかの人のソースをただコピペしたようなものかもしれない
人のソース見て勉強するのはいいがコメントがないようなものはお勧めしない
0734nobodyさん
2009/07/23(木) 20:12:49ID:???0735712
2009/07/23(木) 20:13:54ID:???すみません、書き忘れてましたが、これはPHPLibのコードの一部なんです。
PHPLib の php/session4.inc にある Session クラスの regsiter() メソッド定義において
>>712のようなコードがあり、読んでもよくわからなかったので質問しました。
PHPLibは有名なライブラリであり、挙動もみなさんよくご存知だろうと思いますが、
register_globalsがoffのときに限りグローバル変数を$_SESSIONに代入するという仕様が、
ぼくにとってまったく意味不明な仕様なので、これにどういう意味があるのか
教えていただければと思います。
0736712
2009/07/23(木) 20:15:43ID:???function register ($var_names) {
if (!is_array($var_names)) {
// spaces spoil everything
$var_names = trim($var_names);
$var_names=explode(",", $var_names);
}
// If register_globals is off -> store session variables values
if(!(bool) ini_get('register_globals')) {
foreach ($var_names as $key => $value ) {
global $$value;
if (!isset($_SESSION[$value])){
$_SESSION[$value]= $$value;
}
}
}
else {
return session_register($var_names);
}
} // end func register
0737nobodyさん
2009/07/23(木) 22:07:23ID:???これをやってるんでなくて?
0738nobodyさん
2009/07/23(木) 22:17:18ID:oVStTj1j正規表現などで後方から数えて最初にある"."で切り分けたいのですがどのように記述すればいいのでしょうか
要は拡張子を切り出せればいいんです
0740nobodyさん
2009/07/23(木) 22:25:04ID:???http://www.php.net/manual/ja/function.pathinfo.php
0741738
2009/07/23(木) 22:36:25ID:oVStTj1jこんな関数あったんですか
ありがとうございます
0742やや
2009/07/23(木) 22:44:20ID:i1eDkP4Fファイル数が100万位ある中から一つを読み込みたいのですが、1000個のフォルダに1000個のファイルを入れようか、
それとも1000個のフォルダに1000個のフォルダを作りそれぞれにファイルを一個ずつ入れようか迷っています。
どちらの方が、高速にファイルにアクセスできると思いますか?
ちなみにデータベースは使えないので、txtファイルを使っています。
0743nobodyさん
2009/07/23(木) 22:51:15ID:???疑問ならダミーファイルつくって試してみ
0744nobodyさん
2009/07/23(木) 22:52:35ID:???その程度の処理時間の差を気にする案件ならPHPを使うな。以上。
0745nobodyさん
2009/07/23(木) 22:55:12ID:???0746やや
2009/07/23(木) 23:11:53ID:i1eDkP4Fありがとうございます。試してみます。
>>744
ありがとうございます。速度を測ったところ、ファイルの読み込みが足引っ張っているようなのですが、
プログラムにあまり詳しくないのですが、他のプログラムで読み読みが速いプログラムを
教えてもらえないでしょうか。
0747やや
2009/07/23(木) 23:13:37ID:i1eDkP4Fすいません。読み読みは、読み込みの間違いです。
0748738
2009/07/24(金) 00:04:41ID:w4nZ/YW/if (move_uploaded_file($_FILES["file"]["tmp_name"], "files/$filen.$x")) {
chmod("files/" . $filen, 0644);
//files.txtへの書き込み
$res_file = fopen( 'files.txt', 'w+' );
$time = data("Y/m/d (D) G:H:s");
$data = array("number" => $filen,"name" => $_FILES['file']['name'],"comment" => $_POST['comment'],"extension"d => $x,"size" => $_FILE['file']['size'],"data" => $time,"dl" => "0","dllimit" => $_POST[dllimit]);
unset($x);
foreach( $data as $x ){
fwrite($res_file,$x)
unset($x);
}
fwrite($res_file,"\n");
fclose( $res_file );
} else {
echo "upload失敗";
}
}
またお願いします
これを出力したところ
Parse error: parse error, expecting `')'' in X:\index.php on line 46
とエラーが出ました
自分が見たところでは問題点が見つかりませんお願いします
ちなみに一番長いところが46行目です
0749nobodyさん
2009/07/24(金) 00:07:32ID:???セミコロン
0750nobodyさん
2009/07/24(金) 00:08:18ID:???つうか記述ミスぐらいIDE使えばすぐわかるんだからEclipseあたり使いなさいよ
0751nobodyさん
2009/07/24(金) 00:10:00ID:???ここも変
''で囲まないと$_POST['dllimit']
0752nobodyさん
2009/07/24(金) 00:12:48ID:???0753738
2009/07/24(金) 00:22:29ID:w4nZ/YW/PHPの構文て結構厳しいんですね
エラーや警告のでないスクリプトを目指して頑張ります
0754nobodyさん
2009/07/24(金) 00:30:02ID:???パースエラーだよアホ
0755nobodyさん
2009/07/24(金) 00:30:48ID:???誰がファイルの読み込みは足を引っ張らないと言ったよ
どっちを取っても差はない、としか書いてないのだが?
ファイルのI/Oはどの言語でも足を引っ張る
0756nobodyさん
2009/07/24(金) 00:32:07ID:K8XyGptT文字列処理/日本語関係 がダルくてしかたありません
0757nobodyさん
2009/07/24(金) 00:35:36ID:???0758nobodyさん
2009/07/24(金) 01:36:48ID:???0760nobodyさん
2009/07/24(金) 11:26:52ID:???マニュアルに載ってるのはonとoffのエミュレート
>>736のコードは指定した変数をセッションに追加
0761nobodyさん
2009/07/24(金) 11:44:11ID:???0763nobodyさん
2009/07/24(金) 11:49:18ID:???0765nobodyさん
2009/07/24(金) 12:55:26ID:???これをクッキーやデータベースに保存するよう変更したいのですが、できますか。
独自にクラスを作ったりすればできますけど、レガシーコードが大量に
$_SESSIONを使っているので、できれば$_SESSIONを使ったままで、
セッションデータの保存先をクッキーとかに変更したいのですが可能でしょうか。
0766nobodyさん
2009/07/24(金) 13:06:54ID:???スレタイ
セッションデータをクッキーに保存って本末転倒だな。
なぜそういう事をしたいのか書くとレスを返しやすい。
0767nobodyさん
2009/07/24(金) 14:45:14ID:???CodeIgniterとかRailsとか。
#利点は、サーバの台数が増えてもスケールしやすいことダッタかな。
なんで本末転倒なんでしょうか?
0768nobodyさん
2009/07/24(金) 15:26:42ID:???railsも2.0(?)からデフォでcoockieらしいな。
で、本末転倒とはイミフだった、すまん。
個人的にクライアント側にデータが保存されるのが嫌で$_SESSION使ってるから
そのセッションデータがcoockieに入ったら意味無いなと思い、本末転倒と書いてしまった。
0769nobodyさん
2009/07/24(金) 15:27:16ID:???0770nobodyさん
2009/07/24(金) 15:35:26ID:???■ このスレッドは過去ログ倉庫に格納されています