【PHP】下らねぇ質問はここに書き込みやがれ 43
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/04/01(日) 04:21:50ID:VGqlLhlDPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 41
http://pc11.2ch.net/test/read.cgi/php/1173163186/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
0212nobodyさん
2007/04/04(水) 01:27:53ID:???そんなプログラムの組み立てによって差が出るんですね。
あっても2,3秒のものだと思ってました。
0214nobodyさん
2007/04/04(水) 01:36:18ID:???ツッコまれてる理由は理解したの?
効率とか関係ないから。
> ナンバー 名前 内容 日付 パスワード
「ナンバー」とやらをキーにしてログを削除したいんだろ?
「ナンバー2のログを削除」みたいな感じで。
その「ナンバー」が削除処理の度にコロコロ変わったらマズいのは分かるよな?
分かってるならあとは好きに書けばいい。
ナンバーは消して現在こういう感じで処理してます。
explode以降は改修前のままですので今から直しますが。
$cdlog=file('comment.txt');
for($i=0;$i<count($cdlog)-1;$i++){
$cditems=explode("\t",$cdlog[$i]);
if($items[0]==$_POST['delradio']&&$items[4]==$_POST['delkey2']||$items[0]==$_POST['delradio']&&'pass'==$_POST['delkey2']){
0218nobodyさん
2007/04/04(水) 02:24:38ID:???あなたがページを表示したとする。
あなたはname="delradio" value="5"のカキコを削除したいと思った。(削除ボタンはまだ押していない。)
と、ここで他の誰かが割り込んで、name="delradio" value="4"のカキコを削除した。(削除ボタンを押した。サーバ側で削除処理も完了した。)
あなたは削除ボタンを押した。
あなたは目的のカキコを削除できる?
たまたまじゃなくて必ず削除できる?
0219nobodyさん
2007/04/04(水) 02:29:03ID:???格納した順というか、リソート機能ならPHPMyAdminで一発で出来るし
自前でやるとしても簡単なコードで出来るでしょう。
オートインクリメントしてるなら、それでソートすればいいんじゃね?
もっともこれはPHPMyAdminみたいな、基本ORDER BY付けないGUIで見るときに見やすいとかだけで
普通にDBから検索する場合、大抵はORDER BYつけるしリソートすること自体あんまり意味無いと思うが。
ファイルロックをしないといけないということですよね。
後程完成品をアプしますのでまたお気づきになった点を
ご指摘いただければありがたいです。
0221nobodyさん
2007/04/04(水) 03:08:41ID:???まぁいいやコードが有れば話もしやすいだろうし。
0223nobodyさん
2007/04/04(水) 03:21:56ID:???1 a
2 b
3 c
というデータになっているとしよう。Xという人が1を、Yという人が2を
ほぼ同時に消すという操作をしたとしよう。ファイルロックをしたとして、
XのクエリがYのそれよりも速く到達したときどうなるかというと、
Xのクエリの処理後
1 b
2 c
になる。これはわかるよね。次にYのクエリの処理だが、
これは2を消せという指令だ。ロジックはファイルの中から2を探して消すのだから、最終的には
1 b
になる。でもYが消したかったのは最初のbの行じゃなかったのか?
というのが問題。わかったかな。
と言う事は結局削除文字列代入しか無理と言う結論に?・・・・・・・・・
しっかしよくスレッドフローティング方式の掲示板とか作れますね、
作ってる方尊敬しますわ。
下記は現在作成中のソースです。
一番下のソースはめちゃくちゃなので放置お願い致します。
http://www.pachiweb.com/updir/data/php.txt
したい事は投稿者が自身でコメントか情報かを選択しそれを別々に保存、
そのログから新着5行づつを表示させると言うものです。
ラジヲボタンでその記事を削除したいのですが
なるべく情報、コメント含めラジオボタンで選択→パスワード入力後
ワンクリックで削除という手軽さで削除を行いたいです。
ファイル構成は
本体.php
reference.txt
comment.txt
です。
いろいろご解説頂いて本当にすいません。
マジすいません。
0226nobodyさん
2007/04/04(水) 03:39:33ID:???ごめん、コードを見ずにそういうことをしたい場合の定石を書くw
・ID列と連番列を別に取る
データには一度書いたら書き換わらないID列と、メッセージ番号(seq)を示す数を別に記録しておく
ID seq その他情報
1 1 a
2 2 b
3 3 c
消すときはIDをキーに行を探し、seq列を連番に書き換える。たとえば上の表のID2の行を消したときは
ID seq その他情報
1 1 a
3 2 c
のようにやる。IDは書き換えない
・そもそもseqはファイルに記録せずにいちいち数える
要件にもよるけどこれで十分処理が間に合う場合がけっこうある
IDとSEQに同じように番号を割り振ったとしても
ID側は歯抜け数字列になっても
SEQ側はきれいな数字列に直されると。
要するにID側をvalueに割り振れば問題解決ですか。
とりあえずナンバーをまた採取するようにして
それをIDにしてladioに代入します。
結局、素人の私がナンバーを振り直したいとか
訳わからん事言わなければ普通に解決してた問題なのですね・・・・・・
0229nobodyさん
2007/04/04(水) 05:11:36ID:???処理が増えるようだけど172さんにとってはすっきり書けるような気がする
通番用にはそれの変数一つ増やすだけだし
あと“何が”削除されたのか後で管理者が分かるのもメリットと言えばメリット
書いては消し書いては消しタイプ(削除比率の高いもの)だと
ファイルが膨らむばかりなので向かないけど
0230虚弱PHP
2007/04/04(水) 09:25:54ID:???完全削除は別のオペレーションで。
0231nobodyさん
2007/04/04(水) 09:39:33ID:???「値に入れればいいんですね」とか言ってるのと同じだ
seqを毎回振りなおすほうが面倒じゃないか?
ログ中の順番で表示して番号を付けりゃいいじゃん
っていうか一番楽な方法はDBだけど
0232nobodyさん
2007/04/04(水) 11:22:30ID:???削除の際はそれを入力させれば確認できる。
一番簡単なのはやっぱりデータベースだけど。
0233nobodyさん
2007/04/04(水) 11:31:01ID:???例:
function Controller($request, $session, $result) {
$this->request =& $request;
$this->session =& $session;
$this->result =& $result;
}
0234nobodyさん
2007/04/04(水) 11:34:46ID:???http://jp.php.net/manual/ja/language.references.whatdo.php
0236nobodyさん
2007/04/04(水) 12:48:21ID:Msn4ohO/Webサーバが整備されればPHP側では特に意識する必要なく
https://〜〜〜/〜〜.phpのように普通にアクセスして問題ありませんか?
0237nobodyさん
2007/04/04(水) 12:50:59ID:???0238233
2007/04/04(水) 13:41:06ID:???使用するものなのかが理解できません。
例えば233に書いたのはネットにのっていたあるサンプルクラスのコンス
トラクタなんですが、この場合は何故リファレンスにしているのでしょうか?
馬鹿ですみません。
0239虚弱PHP
2007/04/04(水) 13:44:49ID:???PHP4とPHP5でも変わってくるし。
>>238
使う必要を感じないなら、使わなくていいんじゃないかな。
勉強なら他の言語で参照渡しと値渡しの勉強した方がいいと思う。
0240虚弱PHP
2007/04/04(水) 13:45:27ID:???0242nobodyさん
2007/04/04(水) 14:10:11ID:???PHPなら参照する意味あんまないね。
0243nobodyさん
2007/04/04(水) 14:11:14ID:???0244nobodyさん
2007/04/04(水) 14:29:39ID:???collation server latin1_swedish_ci
の値を
collation server utf8_general_ci
に変更したいです。
方法を教えてください。
0245nobodyさん
2007/04/04(水) 15:16:31ID:???for(...){...};
のセミコロンってなんか意味あんの?
ってかカコイイの?
0246nobodyさん
2007/04/04(水) 15:32:22ID:???0247nobodyさん
2007/04/04(水) 16:15:15ID:PZ7+vB49にはどうすればよいのでしょうか?
例えば 0.0 から 20.0 までの目盛の間隔は広く、 20.0 から 100.0 までの目盛の
間隔は狭くする、という調節がしたいのです。
そうしないと、小さい値(だいたい 0.0 から 3.0 )が細かすぎて読み取れないのです。
よろしくお願いします。
0248nobodyさん
2007/04/04(水) 16:21:48ID:1w3+kv1aif(!$a = intval($b)){
$a = 0;
}
0250nobodyさん
2007/04/04(水) 16:48:33ID:???$a = intval($b);だけで結果は同じだから。
0251nobodyさん
2007/04/04(水) 16:55:47ID:74I3KgLe0253nobodyさん
2007/04/04(水) 17:13:34ID:???PHPの場合ないんだけど、それ風になんか代替させたいならcall_user_func + 参照渡しを検討ってことかな。
0254nobodyさん
2007/04/04(水) 17:36:16ID:???まぁ、call_user_func, call_user_func_arrayあたりを使うのが無難だね。
0255nobodyさん
2007/04/04(水) 17:36:18ID:???0256nobodyさん
2007/04/04(水) 17:36:45ID:???http://jp.php.net/manual/ja/functions.variable-functions.php
0257nobodyさん
2007/04/04(水) 17:37:56ID:???コールする側で参照するか、PHP5ならオブジェクト渡すか。
0258nobodyさん
2007/04/04(水) 17:41:05ID:???0259nobodyさん
2007/04/04(水) 17:41:23ID:???あれば便利だけども、なくてもそれほど問題はないからな
0261nobodyさん
2007/04/04(水) 18:34:49ID:PZ7+vB49ありました。ありがとうございました。
0262nobodyさん
2007/04/04(水) 19:42:34ID:o8UCEOfE○秒後に実行させるという。(表示されるのではなく)
Javascriptでやっているのですが、基本的にPHPのページなもので
もし可能であればPHPのみで出来ればと思います。
0263nobodyさん
2007/04/04(水) 19:46:45ID:???0264nobodyさん
2007/04/04(水) 19:55:29ID:???0265247
2007/04/04(水) 20:00:52ID:PZ7+vB49すみません、ちょっと対数グラフではないようです。
イメージ的には http://sv2ch.baila6.jp/graph_load.cgi?news23.2ch.net のような
グラフを描きたいのですが、こういうのは一般的に対数グラフになるんですか?
0266nobodyさん
2007/04/04(水) 20:02:40ID:???0267262
2007/04/04(水) 20:38:52ID:???sleepだとページ全体が表示されるのを遅らす事になります。
なので、sleepの間は何も表示されません。
また、metaで別ページに飛ばすのでもないです。
そうではなくてPHPファイル(test.phpなど)のHTMLの部分は表示されていて
プログラム実行箇所は○秒遅れたら良いのです。
0268nobodyさん
2007/04/04(水) 20:40:21ID:???今、smartyを初めていじってて、単純なプログラムを作ったんだけど、
文字化けするトラブルが発生しました。
最初に言うと、smartyを使う点以外はコレまでに作ってきたプログラムと
同じようにしてるので、いきなり文字化けが発生したというのはやっぱり
smartyに関係した問題かなと思ってるんですが、どういう原因が考えられるでしょう?
(1)PHPファイル コレをブラウザで開きます---------------------
<?php
require_once("MySmarty.class.php");
$o_smarty = new MySmarty();
$o_smarty->assign("MyName","YAMADA,Yoshihiro");
$o_smarty->display("sample.tpl");
?>
(2)sample.tpl テンプレファイル---------------------
<html><head>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<title>Smartyのテスト</title></head>
<body>
私の名前は{$MyName}です。
</body></html>
(3)MySmarty.class.php ---------------------
<?php
require_once("MySmarty.class.php");
$o_smarty = new MySmarty();
$o_smarty->assign("MyName","YAMADA,Yoshihiro");
$o_smarty->display("sample.tpl");
?>
0270nobodyさん
2007/04/04(水) 20:44:58ID:???0271268
2007/04/04(水) 20:51:35ID:???(1)PHPファイル コレをブラウザで開きます---------------------
<?php
require_once("MySmarty.class.php");
$o_smarty = new MySmarty();
$o_smarty->assign("MyName","YAMADA,Yoshihiro");
$o_smarty->display("sample.tpl");
?>
(2)sample.tpl テンプレファイル---------------------
<html><head>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<title>Smartyのテスト</title></head>
<body>
私の名前は{$MyName}です。
</body></html>
(3)MySmarty.class.php ---------------------
<?php
require_once("/php/include/smarty/libs/smarty.class.php");
class MySmarty extends Smarty{
public function __construct(){
$this->Smarty();
$this->template_dir="./templates";
$this->compile_dir="./templates_c";
$this->cache_dir="../cache/";
$this->caching=false;
}
}
?>
開発環境はwinXP apache2 php5です
0272nobodyさん
2007/04/04(水) 20:57:02ID:???内部コードは?
テンプレートはもちろんEUCなんだよな?
ブラウザの文字コード変換で適当に変えて何のコードになってるか分かる状態か?
0273nobodyさん
2007/04/04(水) 21:00:51ID:???テーブルの文字コードはEUCで、CSVの出力をSJISにしたいのですが、
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=hoge.csv");
〜以降printで内容出力
こんな感じで出力するとファイルがEUCで出力されます。
Smartyがらみでphp.iniでは以下の設定をしてます。
mbstring.http_output SJIS
mbstring.internal_encoding EUC-JP
HTMLの出力はこれでSJISになっているんですが、
CSVの出力だと関係ないんでしょうか?
0274268
2007/04/04(水) 21:02:28ID:???回答ありがとうございます。
テンプレート(sample.tpl)はEUCで保存してます
ブラウザの文字コードももちろんEUCで出力されてるんですが化けていて、
SJISやISOなどに変更しても化けています。
ちなみに、「????O??AMADA,Yoshihiro???B」 となります。
smartyだけの文字コードをいじる設定があるのかとphpinfoで調べても
該当項目がないみたいなので困ってしまいました
0276nobodyさん
2007/04/04(水) 21:08:44ID:???sample.tplの
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
これcharset=Shit-JISの間違いじゃ??
0277nobodyさん
2007/04/04(水) 21:17:47ID:???function s_outputfilter($str)
{
print_r(mb_detect_encoding($str, 'auto'));
}
$o_smarty->register_outputfilter('s_outputfilter');
解決策ではないが、とりあえずこれを実行して表示前のコードを調べてみれ
0278268
2007/04/04(水) 21:24:20ID:???SJISってでました!
どういうこと???
smartyはSJIS書き出しが標準ってこと??
どこに設定ファイルがあるんでしょうか?
>>276
なんで判ったんですか?
0279nobodyさん
2007/04/04(水) 21:26:26ID:???その直後に排他ファイルロックかけると
同スクリプトでほぼ同時に同じ処理をしようとした人は
その処理中ファイルの読み込みさえ出来なくなるんですかね?
つか、fopenの読み込み+書き込み専用で開くとかどういう意味があるのですか?
読み込み専用のみで開いても読み込み+書き込み専用で開いても
後者選んどけば何の不自由なくすべて処理できるのでは?
0281268
2007/04/04(水) 21:45:46ID:???cakePHPに移行します
0283nobodyさん
2007/04/04(水) 21:48:20ID:???0284nobodyさん
2007/04/04(水) 21:48:49ID:M2pD0HVK可読性やメンテナンス性高めたいんだけど
そういうのの勉強できそうなきれいでわかりやすいphpのコードやtipsって
どこかにありませんか。
本人ですら後で読み返した時1から思い出さないとよくわからないことが多いです。
ありがとうございます、
もしお暇でしたら下記質問も教えてもらえるとうれしいです。
ロックかけた後は別の人が同時に同じプログラム
の投稿ボタンを押してもはじかれるという事でよいのでしょうか。
ロックかけた後、そのファイルを自分で再度呼び出す分には問題なくて?
そうです、色々アドバイスを頂いたのをまとめた結果、
記事にナンバー(ID)振ってナンバーの並びが歯抜けになっても放置で
それを削除していく方式にしました。
それでファイルにロックかけて前の記事のナンバーを取り出し1を加算していこうとしているのですが
ファイルロック関連で疑問に思った事がありまして・・・・・・
本で調べてみたのですが概念的なことしか載ってなくて
具体的に疑問点が解決できませんでした。
何度もすいません。
0290nobodyさん
2007/04/04(水) 22:34:35ID:GchyYXGQUTF-8で表示されているフォームから特殊文字(??)を入力して
送信するとそのままバイナリで送信されてくるのですが
sjisやujisなフォームから送信するとHTMLコードで送信されてきます(&#9685;&#3642;)
UTF-8の場合、そのままsjis-win等に変換すると特殊文字が壊れてしまいます。
何がやりたいかと言うと。
携帯絵文字の入力も想定しているので、どうしてもUTF-8 -> SJISへ変換する作業が
必要になるのですがUTF-8で送られて来た場合でも&#9685;&#3642;の様なHTMLコードにしたいのです。
これを実装するにはUTF-8のバイナリとHTMLコードの変換マップ等を
作らないと実装できないものでしょうか?
どなたかお力添えお願い致します。
それだとラジオボタンでの削除の際、
不具合出るとのことでした。
DBも今勉強1からはじめると大変そうなので
完成後置き換えるようにしたいと思います。
0292290
2007/04/04(水) 22:37:21ID:GchyYXGQと化けてしまいました申し訳ないです。
()内に入る特殊文字はこれです。
??
0293nobodyさん
2007/04/04(水) 22:37:44ID:???なんで?
ユニークナンバーをキーにして削除すればいいじゃん?
(つーかラジオボタンだろうとチェックボックスだろうとセレクトボックスだろうと同じこと)
0294nobodyさん
2007/04/04(水) 22:38:41ID:???>sjisやujisなフォームから送信するとHTMLコードで送信されてきます(&#9685;&#3642;)
>UTF-8で送られて来た場合でも&#9685;&#3642;の様なHTMLコードにしたいのです。
???
0295290
2007/04/04(水) 22:48:38ID:GchyYXGQ>>294
ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/6003/ura/moji.html
やりたいこととしては上記ページのコードではなく実際の絵文字の方をそのまま
コピペしてPOSTした時に正常に表示させたいのです。
0296290
2007/04/04(水) 22:57:14ID:GchyYXGQ補足です。
コピペしてPOSTしてからSJISに変換しても壊れないようにしたいのです。
0297nobodyさん
2007/04/04(水) 22:57:46ID:Rqzs89IS>>250
ありがとうございます。
if(!$a = intval($b)){
$a = 0;
}
上記での ! がどのような意味になっているのか教えてください。
「$bを整数へ変換できず、$bの値を$aへ代入できない場合」、すなわち
「$a = intval($b) が成立しない場合」という理解でいいのでしょうか。
ここでの ! の使い方がいまいち分かりません。
0298nobodyさん
2007/04/04(水) 23:15:37ID:???2.その返り値を$aに代入する
3.2の式(=$aの値)の否定を取ったものが真になるか判断する
変換できないとか代入できないとかいう判断はここではありません.
0299nobodyさん
2007/04/04(水) 23:18:23ID:???なんか解釈の仕方が変だぞ
分岐と式の仕様を理解していないのか?
!は否定の演算子
$a = intval($b) の否定。
その例文の場合だと、intval($b) の結果を $a に代入して、
それが 0 なら分岐する
0300nobodyさん
2007/04/04(水) 23:22:18ID:???俺が誠心誠意を持って答えてやるから質問ぶつけてこい!
PHPに対するあついハートをわすれるなよ!
0301nobodyさん
2007/04/04(水) 23:35:01ID:???例えば2番目にあらわれた<table>〜</table>までを取得する方法を教えてください
(上記の”〜”の中にもtableが含まれていたりするとお手上げなのです)
0302nobodyさん
2007/04/04(水) 23:37:48ID:???2番目にあらわれた<table>〜</table>までを目で見て判断する。
次におもむろにCtrl+Cを押してコピーし、適当な箇所へCtrl+Vを押して貼り付ける。
0303nobodyさん
2007/04/04(水) 23:54:00ID:???0304nobodyさん
2007/04/04(水) 23:54:24ID:???【test.txtの内容】
<html>
<head>
<title>テスト</title></head>
<body>
<table>
<tr><table><tr><td>これを取得する</td></tr></table></td>
</tr>
</table>
</body></html>
【test.phpの内容】
$file = file_get_contents("test.txt");
preg_match("[(<table>.*?</table>)]",$file,$array);
print_r($array);
0307300
2007/04/04(水) 23:57:27ID:???0308nobodyさん
2007/04/04(水) 23:58:25ID:???$b = $a++;
これで$bが3だから驚いた
0310nobodyさん
2007/04/05(木) 00:01:50ID:???いや、マニュアルだと!の方が高かったんだけど、
それだと>>248の書き方は文法的におかしくない?
実際やってみたら動いたわけだけど、何か見落としてる?
0311nobodyさん
2007/04/05(木) 00:09:24ID:???if(!$a = intval($b)){
$a = 0;
}
【$A = $B】
$Bを$Aに代入する
【$A = "a"】
$Aはaである
【!$A = "a"】
$Aはaではない
これで理解しろ
■ このスレッドは過去ログ倉庫に格納されています