【PHP】下らねぇ質問はここに書き込みやがれ 33
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/11/23(木) 00:27:02ID:???まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
【前スレ】
【PHP】下らねぇ質問はここに書き込みやがれ 32
http://pc8.2ch.net/test/read.cgi/php/1162818436/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc8.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc8.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0083nobodyさん
2006/11/23(木) 19:57:22ID:???>implode 使ってみたんですが、たとえば、文字列をエンコードする場合
>個別に切り取ってからじゃないと出来ないみたいなんですがなんでですか
何のエンコードかな?。文字コードなら長い文章のままエンコできますよ。
0084nobodyさん
2006/11/23(木) 20:41:33ID:???2006-11-23 19:46:06
こういう時間形式に変換したいのですが、できますでしょうか?
$jikan = "2006-11-23 19:46:06";$TimeStamp = strtotime("$jikan");
これはうまくいくのですが、
$jikan = "20061123194606";$TimeStamp = strtotime("$jikan");
こうなるとうまくいかないもので、、
わかる方がいましたらよろしくお願いします。
0085nobodyさん
2006/11/23(木) 20:46:57ID:???$date = "20061123194606";
$yyyy = substr($date, 0, 4);
$mm = substr($date, 4, 2);
$dd = substr($date, 6, 2);
$hh = substr($date, 8, 2);
$ii = substr($date, 10, 2);
$ss = substr($date, 12, 2);
$date = "$yyyy/$mm/$dd $hh:$ii:$ss";
0087nobodyさん
2006/11/23(木) 20:54:46ID:6gP1lOLG例えかもしれんが変数名の始めに数字は使えないんじゃなかった?配列はいいんだっけ?
0089nobodyさん
2006/11/23(木) 21:05:50ID:???うまくいきました。ありがとうございました。
>86
sscanfも調べてみます。
どうもでした。
0091nobodyさん
2006/11/23(木) 21:29:59ID:???0092nobodyさん
2006/11/23(木) 22:21:16ID:???石器人だ。
0093nobodyさん
2006/11/23(木) 22:22:39ID:???echo preg_replace('/(....)(..)(..)(..)(..)(..)/', '\1-\2-\3 \4:\5:\6', $t);
こういうのはどう
0094nobodyさん
2006/11/23(木) 22:50:15ID:???Smarty使っていたら、便利な修正子が沢山用意されていると思っていたんですYo!
そしたらSo!!
自分で関数を定義してやらなきゃならないんですねぇ……。
</ひとりごと>
0096nobodyさん
2006/11/24(金) 00:17:41ID:???日本語ファイル名を扱えるやつを教えてください。
できれば AutoIndex みたいなのが希望っす。
0097nobodyさん
2006/11/24(金) 00:24:12ID:???0098nobodyさん
2006/11/24(金) 00:26:46ID:???その上でそのアップローダはどのOS上で動かすつもりなのか、
が重要なんじゃあるまいか?
009996
2006/11/24(金) 00:46:58ID:???スキルないっす。
アップロードした時点で、フォルダを除くと文字化けしているんで
move_uploaded_file のところで mb_convert_encoding をしてみたん
うまくいきませんでした。
(ファイル保存時は文字化けしなくなりましたが)
>>98
そうですね。環境を晒していませんでした。
アップローダ&サーバ(Apache)共に Win2000 です。のでファイル名は
SJIS になるかと。。
0100nobodyさん
2006/11/24(金) 00:52:22ID:???0101nobodyさん
2006/11/24(金) 00:53:56ID:???http://pc8.2ch.net/test/read.cgi/hp/1154177468/
まあポログラミングしないとなると板違いなんで向こうでどうぞ
010296
2006/11/24(金) 00:58:22ID:???情報ありがとうございます。
0104nobodyさん
2006/11/24(金) 02:14:25ID:yAUAJcwDPHPUnit2を使いユニットテストを組みながら開発しています。
Singletonなクラスを作成したのですが、そのユニットテストを行おうとしたところ、
インスタンスが共有されているため独立したテストが行えずテストが上手く行えません。
そこで、インスタンスを記録しているprivateなstatic変数をTestCaseからtearDownで
初期化したいのですが、アクセス権を無視して書き換える手段はありますでしょうか。
クラス/オブジェクト辺りの関数やリフレクションを漁っては見たのですが、特にリフレクションには
> 注意: privateまたはprotectedクラスプロパティの値の取得または設定を 行うと、例外がスローされます。
とまで書かれてしまっており...
複数人で開発しているわけでもありませんので、publicにしてしまうなり、
テストを行う際だけ書き換えるなりしてもさほど問題はありませんが、
何か良い方法をご存知でしたらよろしくお願いします。
0105nobodyさん
2006/11/24(金) 02:17:41ID:3W6tCrEf↓こんなかんじでやってみたのですがエラーでます
$data = array("あ","い","う","え","お");
$data = mb_convert_encoding($data,"SJIS", "ASCII,JIS,UTF-8,EUC-JP,SJIS");
echo implode("#",$data);
間違ってますか?
0106nobodyさん
2006/11/24(金) 02:25:35ID:???Runkitでテスト時のみのイニシャライザをくっつけるとか?
なんか他にいい方法がありそうな気もするけどよくわかんねっす
>>105
mb_conv...の第一引数は文字列 http://jp2.php.net/mb_convert_encoding
0107nobodyさん
2006/11/24(金) 02:36:42ID:C3XLERtZというようにnewを参照で受け取ることの意味や有用性って、
どんなことがありますか?
0108nobodyさん
2006/11/24(金) 02:55:57ID:3W6tCrEfどうもありがとうございます。
連想配列とかいうのでやってみたらエンコできました。
0109前スレ982
2006/11/24(金) 03:05:01ID:???前板982で質問した者です。
■質問した内容↓
質問します!
windowsでPHPを使用しているのですが、
ローカル環境で
<? include("../home/httpd/html/template/top.html"); ?>
の相対パスを
<? include("/home/httpd/html/template/top.html"); ?>
に変えて表示する事ってできるのでしょうか?
windows環境で、includeするファイル指定を相対パスを絶対パスに
変えて表示する事はできるのでしょうか?という質問でした。
意味不明ですません;;
0111nobodyさん
2006/11/24(金) 03:10:05ID:???どういうフォルダ構成になってるか分からないので何とも言えないが、
普通に考えたら
../home/httpd/html/template/top.html
と
/home/httpd/html/template/top.html
は絶対に同じ場所を指さないと思うんだが…となれば別のファイルが表示されるだけかと。
それは相対パスを絶対パスにしたとは言わないだろう。別の場所を指定してるんだから。
そもそも相対パスと絶対パスってどういうものなのか分かってて言ってる?
そもそも何でそんなことしたくなったのか分からないと回答は難しいよ。
「別のファイルを表示しても同じように表示されますか?」という質問にしか聞こえない。
0112nobodyさん
2006/11/24(金) 03:14:26ID:???カレントが第二階層にあるなら ../ と / は同じになるじゃないかな
とするとWindowsでドライブレターを省略した絶対パスが有効かという質問かなあと思うけど
わざわざ聞くようなことでもないしなあ謎だわ
0113104
2006/11/24(金) 03:15:15ID:yAUAJcwDおお、素晴らしい。
__autoload('SingletonClass');
echo runkit_method_add('SingletonClass', 'initializesingleton', '',
'self::$instance = null;',
RUNKIT_ACC_PUBLIC
);
...
protected function tearDown()
{
SingletonClass::getInstance()->initializeSingleton();
}
といった感じでテスト対象のファイルを弄ることなく初期化することが出来ました。
# 作成するメソッド名に大文字を混ぜてしまって一時嵌りましたが
どうもありがとうございました。
0114前スレ982
2006/11/24(金) 03:36:06ID:???その後に続くのがそのディレクトリなんです。
なのでimgを読み込む時は、
/img/aaa.gif
で読み込めるのですが、(../img/aaa.gifでも読み込めます。)
includeで同じように指定してもできません。
includeだと分けが違うんでしょうか。
最近学んだ者であまり分かってません。
もうしわけないですorz
E:\abc\main\
の中にincludeを指定してるファイルがありまして、
E:\abc\home\httpd\html\template\top.html
を、絶対パスで読み込みたいんです。
なぜ、
<? include="/home/httpd/html/template/top.html" ?>
で読み込みたいかというと、本サーバーの環境がこの指定で
読み込まれるのに対して、 ローカル環境でできない状態でいるんです。
なので、htmlファイルをそのまま上げる事ができなく、
ローカル環境でコーディングをコピペして、
それを本サーバーにあげるという
めんどくさいことをしています。
ローカル環境と本サーバー環境を限りなく近づけて
作業を簡素化したかったのです。
現状では、本サーバーの環境を変える事は、
できない状態でして、ローカル環境を本サーバーの環境に
合わせる事になります。
申し訳ないですが、もう少しご教授のほうをお願いいたします。
0115nobodyさん
2006/11/24(金) 03:42:23ID:???0116nobodyさん
2006/11/24(金) 03:52:42ID:???ハードコーディングせず、パスは定数にしておけば多少楽になるだろう
プラットフォームはPHP_OSで取得できるから自動でパスを切り替えるようなこともできるし
0117439
2006/11/24(金) 04:00:22ID:???以下のファンクションでサニタイズしているんですが
普通に「htmlspecialchars」したほうがいいでしょうか?
function outhtml($str) {
$str = htmlspecialchars($str);
return $str;
}
0118nobodyさん
2006/11/24(金) 04:02:46ID:???0119nobodyさん
2006/11/24(金) 04:07:07ID:???0120439
2006/11/24(金) 04:12:46ID:???分かりにくくってすみません。
スピード的にはあまり大差なかった(私の感覚で)のですが
保守やこの業界の普通というか常識ではあまりやらない手法だ等お教えいただけたらと思っております
0121nobodyさん
2006/11/24(金) 04:13:14ID:???0122nobodyさん
2006/11/24(金) 04:41:21ID:???Zendコーディング規約では、メソッドの引数で値の参照渡しができないようなのですが、
滅多にしないとはいえ、これって結構な制限になりませんか?
0123nobodyさん
2006/11/24(金) 04:45:09ID:???0124nobodyさん
2006/11/24(金) 04:55:46ID:???0125nobodyさん
2006/11/24(金) 04:57:13ID:???ユーザー定義関数でなんて絶対使いたくないっす。
値を複数返すなら配列で返してlistで受け取るっす。
0127nobodyさん
2006/11/24(金) 04:59:47ID:???はいはい、君は早とちりしているようだ。
Zendコーディング規約では、メソッドの引数で値の参照渡しを禁じているわけではない。
値の参照渡しは、"関数宣言"においてのみ可能です。
class Foo
{
public function bar(&$baz) ←関数宣言
{}
}
注意:"実行時"の参照渡しは禁止されています。
0128nobodyさん
2006/11/24(金) 05:17:27ID:???あー。仮想のパスと実際のパスの違いが理解できてない上に
サーバー環境とローカル環境を違う状態にして開発してるんだ。
そりゃー面倒だわ。
画像とかHTMLとかのリンクのパスはサーバーの外に対しての指定で
ブラウザが解釈するもの。そしてブラウザの要求をWEBサーバーが
仮想パス→DOCUMENT_ROOTを基準にした実際のパスに変換して
内部では正しいフルパスで扱われる。
それに対してPHPで使われるincludeのパスってのはPHP自身が
サーバー内部の仕組みであるため、「最初から実際のパス」で扱われる。
対処方法としては、よくやる手法ではPHP内部でのディレクトリ指定を
DEFINEまたは変数での定義にしてしまって、定義ファイルの差し替えで
簡単に切り替え可能にしてしまう方法。これは汎用性が高い。
ただ、目的が画像みたいにDOCUMENT_ROOT基準にしたいだけなら、
include "$_SERVER[DOCUMENT_ROOT]/template/top.html";
みたいにして、DOCUMENT_ROOTの値を使ってパスを補完しちゃうのもアリだよ。
0130nobodyさん
2006/11/24(金) 05:22:05ID:???なるほど、それなら全く平気です。
http://phpspot.org/blog/archives/2006/05/zend_framework_2.html
↑最初にここの22を見て誤解しちゃいました。
0131nobodyさん
2006/11/24(金) 05:24:55ID:???前に同じようなことしてるらしい書き込みをここか旧本スレの過去スレで見たよ。
でもhtmlspecialcharsは画面によっては使用頻度が激しくなるから
俺の感覚では速度的に受け入れがたい手法かなぁ…Cのマクロならともかく。
俺はその手のはエディタの補完機能で入力を楽にしてる。
困るほど使用頻度が激しいならクリップボードツールの類で定型ワード化すれば?とか思う。
0132nobodyさん
2006/11/24(金) 05:28:50ID:???htmlspecialchars() は見た目で長いのも視認性が悪くてよくない。
よく使う関数にこんな長い関数名をつけたのはバカだよ。
0133nobodyさん
2006/11/24(金) 05:38:48ID:???$h = 'htmlspecialchars';
echo $h('<hoge></hoge>');
0134nobodyさん
2006/11/24(金) 07:42:42ID:???0135nobodyさん
2006/11/24(金) 08:18:37ID:???0136nobodyさん
2006/11/24(金) 09:01:37ID:???0137nobodyさん
2006/11/24(金) 09:37:56ID:???Zend_APIのリファレンスってロハじゃ手に入らんだろ?
0138nobodyさん
2006/11/24(金) 10:32:34ID:???0139nobodyさん
2006/11/24(金) 10:59:39ID:???function h($str) {
$str = htmlspecialchars($str, ENT_QUOTES, 'EUC-JP');
return $str;
}
// http://blog.ohgaki.net/index.php/yohgaki/2006/03/ を参照のこと
0140nobodyさん
2006/11/24(金) 11:20:54ID:???return htmlspecialchars($str, ENT_QUOTES, 'EUC-JP');
でいいような希ガス。
0141nobodyさん
2006/11/24(金) 11:54:47ID:???基本的にインターフェース部分だけ、マニュアルを参照しながら作法通りに書くだけで、あとは普通にCで書くだけだしな。
win上(cygwin)でトライしたときは、コンパイルがうまくいかなくて投げ出した記憶があるが、linux上なら無問題。
0142NAME IS NULL
2006/11/24(金) 12:35:14ID:LYtHrh60[6] => データベース [7] => ユーザー [8] => アプリケーション [9] => アプリケーション [10] =>データベース
[11] => パソコン [12] => カメラ [13] => Java [14] => API)
このように文書中の語句を抜き出し、配列に格納しております。
そして、同じ要素の語句の個数をカウントして、降順に並び替えて
表示したいのですが、どのようにすれば良いでしょうか?
例えば、カメラ 4,ユーザー 2,データベース 2 といった感じにしたいの
ですが。。。
0145142
2006/11/24(金) 13:04:34ID:LYtHrh600147nobodyさん
2006/11/24(金) 14:14:35ID:bDJYivQE画像アップロードが出来る掲示板を作ろうと思っているのですが、
登録→確認→完了
という3つの手順を踏まえるとして、確認画面で画像を表示させたい場合、
一旦サーバに画像を登録しないと駄目ですよね?
しかし、登録しなかったり前に戻ったりする場合、その画像がサーバに蓄積
されていって無駄になります。
どういう構成の方が効率よくできるのでしょうか?
それともPHPの組み方にもよるのでしょうか?アドバイスお願いします。
0148nobodyさん
2006/11/24(金) 14:17:37ID:???「登録」の時に、確認画面用にテンポラリでサーバに保存してるファイルの
タイムスタンプ見ていって古いファイルを削除すればいい
0149nobodyさん
2006/11/24(金) 14:23:37ID:???a,b,c,d,e,f,g
上の例だとfを表示。
どのようにソースを書けばいいのか検討がつきません。
正規表現で置き換えをしようと思いましたが、どのように書けばいいかわかりません。
どなたかわかる方教えていただけませんでしょうか?
0150147
2006/11/24(金) 14:25:35ID:???すみません、いまいち構造の意味が分からないのですが、、、
確認 → クッキーを発行してファイルのパスを保存
登録 → そのクッキーを読んで現在の時間より古ければファイル削除
と言うことですか?
0151nobodyさん
2006/11/24(金) 14:31:40ID:1uBVtpeJなぜか日本語が文字化けして・・・
0152nobodyさん
2006/11/24(金) 14:33:35ID:???$str = "a,b,c,d,e,f,g";
$data = explode(",", $data);
echo $data[5];
0155nobodyさん
2006/11/24(金) 14:39:10ID:???クッキーとかいらね
要は確認までいったらテンポラリディレクトリにファイルを上げる
正常に完了までいった場合はテンポラリから正ディレクトリへ移す
確認でやっぱやめたってなったファイルはテンポラリに残っていく
テンポラリの中で現在より24時間前とかのファイルだったら
明らかに確認途中であきらめて残ったゴミファイルでしょ
その掃除作業を登録→確認→完了のどこかでやればよいということ
0156nobodyさん
2006/11/24(金) 14:41:50ID:???0157147
2006/11/24(金) 14:50:33ID:???「テンポラリディレクトリ」というのは、画像をアップロードするディレクトリと
別のディレクトリを作って、そこにアップするということですよね?
次に確認画面で下のようなソースを書きました。
$time_stmp=mktime();
echo tempnam($file_name,"$time_stmp");
出力画面には
C:\WINDOWS\TEMP\116207.tmp と出ます。(ローカル上でテストしてるので)
あとはTEMP(テンポラリディレクトリ)の中のタイムスタンプ付きファイルを
調べて、IFで指定時刻のタイムスタンプと比較して古いファイルなら
unlinkする処理を組み込めば、OKということでいいでしょうか?
0159147
2006/11/24(金) 16:03:04ID:???0161nobodyさん
2006/11/24(金) 20:49:40ID:???↓
いくつのファイルをアップロードして送信したかを調べる
$max_num=count($test);
echo $max_num;
としても、ファイルが1つでも2つでもフォームを用意した分だけMAX値が求められます。
例えば、<input type="file" name="test[]">を3つ設置したら
かならずMAX値は3になるような。
どうやったら選択したフォームのみの計算が出来るのでしょうか?
0162nobodyさん
2006/11/24(金) 21:56:58ID:???想像で答えるなら、
foreach ($_FILES['test']['error'] as $e) {
if ($e == UPLOAD_ERR_OK) {
$max_num++;
}
}
ってことがしたいってことかな。「フォームの選択」ってとこの意味がよくわからんな
0164nobodyさん
2006/11/24(金) 22:32:33ID:???ロハってなんすか?
>>141
マニュアルがまだ未整備って感じで、結局PHPのソースを見るって感じ・・・
マクロとか、どっちを使えばいいのかわからないものも多いし・・・
まあがんばってみます
0165nobodyさん
2006/11/24(金) 22:44:58ID:???0166nobodyさん
2006/11/25(土) 05:37:25ID:???感じで指摘したら読み間違いは直らないんじゃ、と今更思った
0167nobodyさん
2006/11/25(土) 06:08:17ID:uP/mQvTw0169nobodyさん
2006/11/25(土) 08:04:58ID:???0170スレ専属の回答者
2006/11/25(土) 09:03:10ID:???0172nobodyさん
2006/11/25(土) 12:15:23ID:???出来ないのでしょうか?
class test{
static $a = array();
function add($val = 'aaa'){
$this->a += array('test'=>$val);
print_r($a->layout);
}
}
$test = new test();
$test->add();
$test = new test();
$test->add(5);
0173nobodyさん
2006/11/25(土) 12:22:01ID:???0175nobodyさん
2006/11/25(土) 12:38:54ID:???0176nobodyさん
2006/11/25(土) 12:39:49ID:???0178nobodyさん
2006/11/25(土) 13:08:30ID:???買い物カゴという「モノ」に商品を追加する「手続き」や、追加する個数という「データ」のように
オブジェクト設計としてはどういう扱いなんでしょうか?
0179nobodyさん
2006/11/25(土) 13:10:36ID:???0180nobodyさん
2006/11/25(土) 13:33:04ID:???0181nobodyさん
2006/11/25(土) 13:53:53ID:???<IfModule mod_php4.c>
php_flag display_errors On
</IfModule>
htaccess自体は効いていて、PHPに関する部分だけ無視される…。
サーバにSSHで入ったら、mod_php4.cがなくて、代わりに libphp4.so がある…。
どうしたらいいんでしょうか?
0182nobodyさん
2006/11/25(土) 13:55:38ID:???汎用的で簡単な関数や定数を放り込んでおくのに使うくらいだな。
■ このスレッドは過去ログ倉庫に格納されています