【PHP】下らねぇ質問はここに書き込みやがれ 41
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/03/06(火) 15:39:46ID:naBsdy1ZPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 40
http://pc11.2ch.net/test/read.cgi/php/1172151461/
◆質問する時の注意
・ 自分の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
0653nobodyさん
2007/03/13(火) 01:45:19ID:???0654nobodyさん
2007/03/13(火) 01:45:49ID:???>>652
レン鯖のサービスはあくまで再販だから、コストを下げるという観点からは無意味。
っていうか鯖屋のピンハネ分が乗るので余計にコスト高。
0655nobodyさん
2007/03/13(火) 01:54:20ID:???こういうやつだったら安く済むんじゃないの
ttp://www.asj.ne.jp/techinfo/ssl_asj.html
0656nobodyさん
2007/03/13(火) 01:57:45ID:WB3nwZIO<cat>
<name>mike</name>
<name>tama</name>
<name>buchi</name>
</cat>
を
SimpleXMLで
<cat>
<name>mike</name>
<name>tama</name>
<name>buchi</name>
</cat>
を
SimpleXMLで
<cat>
<name>mike</name>
<name>tama</name>
<name>buchi</name>
</cat>
を
<cat>
<name>mike</name>
<name>tama</name>
</cat>
に変更するときはどうすればいいのでしょうか?
0658nobodyさん
2007/03/13(火) 02:03:53ID:???それも海外業者の再販でしょ。あと携帯対応がイマイチねぇ・・・。
そもそも一番ユーザの多いドコモに対応するには、
事実上の独占企業VeriSignしか選択肢が無いのが痛い。
社民や共産は下らない言葉狩りとかやってないで、こういう見えにくい部分を追及してほしいぜ。
0659656
2007/03/13(火) 02:12:17ID:WB3nwZIO正しいのはこれです。
SimpleXMLで
<cat>
<name>mike</name>
<name>tama</name>
<name>buchi</name>
</cat>
を
<cat>
<name>mike</name>
<name>tama</name>
</cat>
に変更するときはどうすればいいのでしょうか?
0660nobodyさん
2007/03/13(火) 02:37:01ID:???0661弟子 ◆xSK1SiC5MI
2007/03/13(火) 02:58:43ID:TI4gTUTcXPなんだけどどこから手をつけるべきですか?
0662nobodyさん
2007/03/13(火) 03:18:05ID:???そんな調子じゃ10日は無理だなw買う本間違えたんじゃない?
とりあえず、最低限Apache+PHPをインストールしておいで。
個々のインストールがめんどくさかったり
よくわからないならXAMPPを入れたほうがいいかも。
そしたら次はフリーのPHP用IDEを入れる。
EclipseのPHPプラグインあたりがデバッグも容易だしおすすめ。
0663弟子 ◆xSK1SiC5MI
2007/03/13(火) 03:19:36ID:TI4gTUTc0664弟子 ◆xSK1SiC5MI
2007/03/13(火) 03:38:56ID:TI4gTUTcあとはhttp://www.atmarkit.co.jp/fjava/rensai3/eclipsejava01/eclipse01.html#40
をダウンロードでOKですか?
0665nobodyさん
2007/03/13(火) 03:53:58ID:???PHPは仕事で使うのか?
もしそうならそんなにあわてなくても良いじゃん。
ゆっくりやればいいよ。
俺はXAMPP+EclipseよりはPHPとApacheだけ
入れたほうが良いと思うんだけどどう?
0666nobodyさん
2007/03/13(火) 04:00:27ID:???0667nobodyさん
2007/03/13(火) 05:49:39ID:???初心者ならphpエディタのほうがいいかもね。
Eclipseに慣れている人なら当然そっちのほうがいいけど、
元々あれはJava開発者向けだし、最初の設定やらが若干めんどくさいからね。
0668nobodyさん
2007/03/13(火) 08:55:58ID:???ローカルに環境作らないで、無料のPHP使えるサーバー借りて勉強すればいいんでない?
ある程度PHPを覚えてくると、今までさっぱりだったapacheやphpの設定も不思議と見えてくる。
0669nobodyさん
2007/03/13(火) 09:18:01ID:???0670nobodyさん
2007/03/13(火) 09:31:45ID:???0671nobodyさん
2007/03/13(火) 09:33:48ID:???0672nobodyさん
2007/03/13(火) 09:57:54ID:???0673nobodyさん
2007/03/13(火) 10:31:36ID:8uoeVZuh<form method="post"action="a.php">..</form>
のようなログインフォームを用意しています。
パスワードを入力してログインすると
ログイン後のページが表示されるようになっているのですが
一部端末でログインできない(ログインボタンを押しても
ログイン画面が再表示されてしまう)
という問題が現象が発生しています。
端末は V302H V603SH A5502K W32S 702NH などです
(端末の設定に依存するのかもしれません
回避策などありましたら教えてください。
0674nobodyさん
2007/03/13(火) 10:40:10ID:???MySQLのバージョンによってうまくいかない可能性があるが
set names のクエリを接続したあと1回必ず送るようにすると
うまくいくかも
これでもうまくいかないときは素直にmy.cnfを書き換えたほうがいい
書き換えてもうまくいかないときはalterでデータベースの文字コードを
設定しなおしたらいい
0675nobodyさん
2007/03/13(火) 10:57:30ID:???回避策というかバグなんだからデバッグしろよ
とりあえずa.phpでprint_r($_POST);とかして値がわたってるかチェックかな
0677nobodyさん
2007/03/13(火) 11:03:20ID:8uoeVZuh返答ありがとうございます
例に出した機種以外では渡っているようでした
0680640
2007/03/13(火) 11:09:32ID:???ありがとうございます!無理なのかと思いました・・。
とりあえずレン鯖なんで、my.cnfの書き換えは出来ないのですが、
以下の分を環境設定ファイルに書き足したところ、登録・表示できました。
$set_names = mysql_query("SET NAMES ujis", $conn);
少ししか試していませんが、特に重いと言う事もないので、これで乗り切ろうと思います。
アドバイスありがとうございました。
0681nobodyさん
2007/03/13(火) 11:17:31ID:8uoeVZuh2年ほど前の機種です
0682nobodyさん
2007/03/13(火) 11:20:37ID:???どうもありがとうございました
書き出す場合は中身が構造化されたテキストっぽいから自分でやっつけるしかないみたいですね
0683nobodyさん
2007/03/13(火) 11:21:17ID:???V302H V603SH A5502K W32S 702NH
で検索したけど1個しかヒットしなかった
http://www.google.co.jp/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-26,GGGL:ja&q=V302H+V603SH+A5502K+W32S+702NH+
0684nobodyさん
2007/03/13(火) 11:25:18ID:???携帯によってはパラメーターちゃんと設定しないと送信されなかったりもする。
0686nobodyさん
2007/03/13(火) 11:27:34ID:8uoeVZuhやってみます!
0687nobodyさん
2007/03/13(火) 11:28:47ID:???<?php
$xmlstr = <<<XML
<cat>
<name>mike</name>
<name>tama</name>
<name>buchi</name>
</cat>
XML;
$xmlsrc = new SimpleXMLElement($xmlstr);
$xmldst = new SimpleXMLElement("<cat></cat>");
foreach($xmlsrc->name as $name) {
$xmldst->addChild("name", $name);
}
?>
0688nobodyさん
2007/03/13(火) 11:30:53ID:???foreach($xmlsrc->name as $name) {
if($name != "buchi")
$xmldst->addChild("name", $name);
}
0690659
2007/03/13(火) 12:02:43ID:WB3nwZIO今PHPが使える環境にないので、後でやってみます。
0691nobodyさん
2007/03/13(火) 13:05:05ID:???それらの機種には問題ない。
お前のコーディングに問題がある。
おそらく適切なヘッダーを吐いてないんじゃないか。
0692nobodyさん
2007/03/13(火) 14:21:08ID:Y+fr5f3lテンプレートとなるPHPスクリプトには必ずTemplateクラスを実装するようにし、表示メソッドを持たせました。
例えば、以下のように複数のテンプレートPHPスクリプトを用意しておき、
表示時に、好きなテンプレートを選択できるようにしたわけです。
template1.php,template2.php,template3.php...
しかし問題に気付きました。
一つだけのテンプレートをrequireして何度も表示するだけなら良いのですが、
複数のテンプレートを一つのPHPスクリプトからrequireする場合があったのです。
「Fatal error: Cannot redeclare class ...」 です。
Templateクラスの多重定義エラーになってしまうのです・・!
PHPは定義の解除もオーバーライドもできない。
ああ、納品は今日だというのに、今まで気がつかなかった私が馬鹿であったのですが・・。
どうにかうまくやり抜ける方法はないものでしょうか?
おまえら知恵を貸しやがれです!
0693nobodyさん
2007/03/13(火) 14:24:16ID:???結論=無理。氏ぬがいいw
っていうか単なるテンプレート的な使い方のためだけにテンプレートエンジンだの
クラスだのと難しいことをする必要はない。
単に任意の変数を埋め込んだHTMLを拡張子.phpで用意しておき、
それをロジック・スクリプトからrequireして変数部分を展開すればいいだけ。
0694nobodyさん
2007/03/13(火) 14:26:27ID:???0695nobodyさん
2007/03/13(火) 14:29:49ID:???どういうファイル構成になってるんだかさっぱりなんだが
クラス定義ファイルの読み込みはrequire_onceでやるか
クラス定義のとこで定義済みかどうかを判別するだけでは。
まさか複数ファイルにクラス定義をそれぞれ書いてるとかいう
ありえない設計をしてるわけもないだろうし。
0696nobodyさん
2007/03/13(火) 14:42:22ID:Y+fr5f3lprint.php
-----------------------
require_once(テンプレートA);
$A = new Template;
//うぁぁTemplateが解除できねぇぇ
require_once(テンプレートB);
$A = new Template;
templateA.php , templateB.php
-----------------------
class Template extends TemplateBase
{
...
}
>>693
現状から少々の追加・修正でなんとかできないでしょうか・・
各テンプレートPHPで宣言しているクラス名を修正しても良いです。
>>695
ありえない設計になっていますでしょうか・・
0697nobodyさん
2007/03/13(火) 14:52:53ID:???0698nobodyさん
2007/03/13(火) 15:01:48ID:Y+fr5f3lテンプレートオブジェクトの生成コード
new Template が統一して使用出来ないと思ったからなんです。
newには静的にクラス名を与えるしかないですよね・・?
0699nobodyさん
2007/03/13(火) 15:08:19ID:???1000 2000 3000 の整数値が入った変数があったとして
これら3つの中から最も低い数値だけ抜き出すアルゴが知りたいです
もちろんif文などでも実現できますが、何かいい関数がないかと思いまして
無知なところすみませんがよろしくお願いします
0701軟式PHP
2007/03/13(火) 15:20:46ID:???<?php
$nums = array(2000,1000,3000,5000,100,7000);
sort($nums);
print $nums[0];
?>
0703虚弱PHP
2007/03/13(火) 15:30:04ID:???ありえない設計だね。
設計変えずに素早くなんとかするとしたら、
可変クラス名でも使ってやるしかないんじゃないかな。
・クラス名はテンプレート毎。
・テンプレートクラスのファイル先頭に$TemplateClassName = <テンプレートクラス名>
$A = new $TemplateClassName();
0704nobodyさん
2007/03/13(火) 15:34:44ID:???だからさぁ、テンプレートの仕組みはこんな感じ↓にすれば簡単なのに。
なぜ皆わざわざテンプレートエンジンとか難しいことやろうとするの?
●print.phpの中身
$hoge = "これを表示するべ";
require_once(template.php);
-----------------------
●template.phpの中身
echo <<< EOM
<html><body>
↓ここの表示は自由自在だぜ!<br>
{$hoge}
</body></html>
EOM;
0706軟式PHP
2007/03/13(火) 15:42:48ID:???いや明らかにテンプレートエンジンのほうが簡単。
というかそれはテンプレートとは言えるレベルじゃないと思うが。
Smartyのforeachelse、cycleなどを使い始めると離れづらいと思うが。
Smartyの例
●print.phpの中身
$tpl = new mySmarty(); //Smartyを継承したクラス
$tpl->assign("hoge","これを表示するべ");
$tpl->display("template.php");
●template.php
<html>
<body>
↓ここの表示は自由自在だぜ!<br>
{$hoge}
</body></html>
0708nobodyさん
2007/03/13(火) 15:54:58ID:Y+fr5f3l$strは何を指すのですか?
憶測ですが、new TemplateをLoadTemplateのような関数と同じ意味だと思っていませんか?
多分そのやり方ではクラスを使う意味がないです。
>>703
ありがとうございます。
PHPは可変クラスなんてのが使えたんですね。
そういった機構が無いか何度も探してみたのですが、見つけられていませんでした。
まだ試してみてはいませんが、勉強になります。
なお、先の件につきまして、一応自力で解決できました。
>>703の手法に似ていますが、可変〜を使わないものです。
print.phpのテンプレート出力関数内で、空の$template_objを用意し
テンプレートスクリプトにて、global $template_objによりアクセス可能にした
$template_objへnewテンプレートしオブジェクトインスタンスを格納するようにしました。
コンストラクタの引数も同様に受け渡しをしました。
ちょっと再利用性が落ちるやり方でまた怒られそうですね。
とにかく、皆様どうもありがとうございました。
と書いている間にまたレスがついてますね。
>>703以降落ち着いたらじっくり読ませていただきます。
クラスの使い方がなってないと散々怒られてしまいましたので
よろしければ、後学のためどのような設計にすべきだったのかアドバイス頂けると幸いです。
ではでは、また死んできます。
0709nobodyさん
2007/03/13(火) 16:31:20ID:???>ループ使ったり、条件分岐つかったり
それはロジック側でやっといて、最終的に出力したい状態に整形してから
テンプレートに変数として渡せば済む話では??
>>706
その手法と>>704の手法と比べた場合、どんなメリットがあるのかサッパリ分からないっす。
っていうか結果的に同じことを単に複雑にしてるだけ、って気が・・・。
0710nobodyさん
2007/03/13(火) 16:43:09ID:???項目数の可変なテーブルを出力したいときはどうする。
$table = "<table〜</table>";
とかやってからテンプレに渡すの?
0711nobodyさん
2007/03/13(火) 16:52:56ID:???0712nobodyさん
2007/03/13(火) 16:57:13ID:???1000とあったら1,000になるようなやつです
0713nobodyさん
2007/03/13(火) 16:58:53ID:???自己解決しました
0714軟式PHP
2007/03/13(火) 16:59:36ID:???簡単なやつだからね。修飾子とか使えるし実際見やすいよ。
同じ処理を行った場合の一例
・Smarty
{$hoge | escape | replace:"これ":"それ" }
・ロジック
$hoge = str_replace( "これ", "それ" ,htmlspecialchars( $hoge ) );
>>711
number_format()
0716nobodyさん
2007/03/13(火) 19:22:17ID:???君はもうだめかもわからん
class Template {
function __construct($_str) {
/* 引数の値に応じてテンプレートを読み込む */
}
}
こう書いてもわからんというのかね
クラスに引数つけた場合はデフォルトコンストラクタではなく定義されたコンストラクタが呼び出される
クラスの概念とか判らないのならC++かJavaからやったほうがいいよ
0717nobodyさん
2007/03/13(火) 19:40:10ID:???UTF-8の"�T"(E78484)を mb_convert_encoding を使って
EUC-JPに変換すると化けてしまいます
これは mb_convert_encoding のバグでしょうか?
また対応策等ありましたらお願いします
0718nobodyさん
2007/03/13(火) 19:44:17ID:???こんな感じで検索文字を文字コード指定で指定して変換するときは、
str_replace でも大丈夫でしょうかね?
str_replace だとパラメータに配列が使えて便利なので
0719nobodyさん
2007/03/13(火) 19:46:12ID:???猫手をindex.phpに使用していたのですが、間違えて消してしまい、
どういうタグを描いていたかも忘れてしまい・・・
0720nobodyさん
2007/03/13(火) 20:05:58ID:???<include>another.php</include>
こんな感じか
0721nobodyさん
2007/03/13(火) 20:08:01ID:???ぬるぽ(include.php);
?>
0722nobodyさん
2007/03/13(火) 20:14:01ID:???include("index.php");
require("index.php");
require_once("index.php");
上にいくほど高速
0723nobodyさん
2007/03/13(火) 20:18:16ID:???htmlspecialcharsだけでは不十分でしょうか?おすすめの処理あれば教えてください
0725nobodyさん
2007/03/13(火) 21:23:04ID:6kJO88Vk1. <input type='text' name='hoge' value='<?php print(htmlspecialchars($_GET['hoge'])); ?>'>
2. <script type="text/javascript"><?php print(htmlspecialchars($_GET['foo'])); ?></script>
この二つがなぜ危険になる可能性があるのかを説明できれば大丈夫だと思う。
0727nobodyさん
2007/03/13(火) 21:48:59ID:FbvNPOWY毎日 10 時に メールを 1万通送信するプログラム を作るとサーバーに相当な負荷がかかってしまうと
思います。
この場合どういう風に作ればサーバーに負荷をできるだけかけずにプログラムを作れるでしょうか。
というより、どうすればいいんでしょうか。
一般的なメルマガ発行システムなどはどうやって処理しているのか教えてください。
よろしくお願いします。
0728nobodyさん
2007/03/13(火) 21:56:24ID:???メールを送信する処理をPHPでやっているシステムは見たことない。
0729nobodyさん
2007/03/13(火) 22:01:49ID:neUD+ow6*/1 * * * * メール送信処理
1分おきにメール送信するとサーバーに負荷かからないよ
0730nobodyさん
2007/03/13(火) 22:08:49ID:???0731nobodyさん
2007/03/13(火) 22:14:16ID:???1分おきに10000通のメールを送るとすると:
60(秒) * 10000(通) = 600000(秒)
時間になおすと:
600000 / (60 * 60) = 166.666666667
すなわち、全てのメールを送信するのに約7日かかることになる。
そんなもの使いものにならんよ。
0734nobodyさん
2007/03/13(火) 22:30:27ID:???つまり20分で10000通メール送信ってことだよな
0735nobodyさん
2007/03/13(火) 22:32:04ID:???さらに時間はかかるがw
0737nobodyさん
2007/03/13(火) 22:36:05ID:???0739軟式PHP
2007/03/13(火) 22:49:36ID:???3万人まで送信したことあるけど、今のところ問題なし。
もし途中で何らかの原因があって止まってもログから再送信させる。
0741nobodyさん
2007/03/13(火) 23:44:54ID:jbwAF33vphpmyadmin内にutf-8で格納してあります。
ブラウザーに表示するときもutf-8統一してあるのですが
文字化けしてしまいます。
<p>php</p>部分 数字は表示されるのですが
漢字 ひらがなの部分が化けしてしまいます
文字化け対策を調べてみたのですが、なかなか直らなくて
PHP 5.2.1
phpMyAdmin 2.9.2
Apache 2.2.4
MySQL 5.0.33
(xampp)以上です よろしくお願い致します
0742nobodyさん
2007/03/13(火) 23:47:33ID:???class Hoge {
function set($key,$value) {
$this->$key = $value;
}
}
$hoge->set('name', 'ほげほげちゃん');
と言う風に、varで定義していない変数を作るのってやめた方が良いですか?
PHP5なら__set、__get使ってひとつの配列に入れておくことも出来るんですが
PHP4なのでどうしようかと思いまして・・・。
むしろ、もうそろそろPHP4の事は考えない方がいいですか?
0743nobodyさん
2007/03/13(火) 23:49:28ID:???どんな風に文字化けするのか
>ブラウザーに表示するときもutf-8統一してあるのですが
どこをどういじってutf-8にしたの?
0745nobodyさん
2007/03/14(水) 00:15:32ID:lS0gqu9t<META http-equiv="Cont
ent-Type" content="text/html; charset=utf-8">
と エディエターもutf-8セットしました CSVファイルも
utf-8に変更しました
mysql内はいじっていません
[mysqld]
default-character-set = utf8
[mysqldump]
default-character-set = utf8
[mysql]
default-character-set = utf8
等
0747709
2007/03/14(水) 01:45:21ID:???>>714 なるほど、慣れるとSmarty記法のほうが可読性が高いんですかね。
>>715 そうなんですよ、実際、ロジックに可変テーブルなどのHTMLが入り込んでて、
可読性が落ちるからどうやって解決したものかな〜〜と常々思っとりました。
にも関わらず、Smartyとか導入するのが面倒なのでやってませんorz
0748nobodyさん
2007/03/14(水) 02:39:55ID:???function set($k, $v){
$this->storage[$k] = $v;
}
だとどういう不都合があるの?
例外処理の恩恵受けられるならPHP4切る価値はあると思う。
0749nobodyさん
2007/03/14(水) 03:41:39ID:BjDS8gcH//ファイルはSJIS
mb_internal_encoding("SJIS");
mb_http_output("UTF-8");
ob_start("mb_output_handler");
はおkなんだけど、
//ファイルはUTF-8
mb_internal_encoding("UTF-8");
mb_http_output("SJIS");
ob_start("mb_output_handler");
は化けませんか?
(iconv_set_encodingでも同じ)
0750nobodyさん
2007/03/14(水) 05:17:14ID:???女子社員はかあいかったなww
0752nobodyさん
2007/03/14(水) 05:28:22ID:???■ このスレッドは過去ログ倉庫に格納されています