トップページphp
1001コメント326KB

【PHP】下らねぇ質問はここに書き込みやがれ 72

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2008/08/16(土) 12:01:25ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 71
http://pc11.2ch.net/test/read.cgi/php/1216291372/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0819nobodyさん2008/08/31(日) 19:07:14ID:???
>>818
その通りです。
クラス内のメンバ変数にアクセスできないけど。
0820nobodyさん2008/08/31(日) 19:11:25ID:???
>>818
インスタンス化が面倒だからって全てstaticにしようなんて思うなよ?
どういうものをクラスメソッドにするかわからないうちは全てインスタンスメソッドでいい
0821nobodyさん2008/08/31(日) 19:44:07ID:???
(';ω;`)ブワッ
皆やさい
こんなグズ初心者に教えてくれて
0822nobodyさん2008/08/31(日) 19:44:55ID:???
やさいじゃない
やさしいだ
(';ω;`)ブワッ
0823nobodyさん2008/08/31(日) 19:47:32ID:HhFxH+qJ
ブログなどで見かけるデザインとロジックの分離を勉強したいのですが、
ソースをみてもさっぱりわかりません

どのような仕組みでデザインとロジックをわけているのでしょうか?
0824nobodyさん2008/08/31(日) 19:48:37ID:???
俺ニンジンだけどその質問分かりません
0825nobodyさん2008/08/31(日) 20:06:49ID:???
>>824
ニンジンには、聞いていません。せいぜい、馬に食べられてください。
0826nobodyさん2008/08/31(日) 20:08:38ID:???
僕ダイコンですが馬に食べられますか?
0827nobodyさん2008/08/31(日) 20:25:48ID:???
>>823
主にテンプレートエンジン
0828nobodyさん2008/08/31(日) 20:51:22ID:???
>>823

------hoge.php-------
<?php

$hoge = 'test';
$foo = 'aaaa';


require_once('hoge.html');

?>

------hoge.html------
<html>
<body>
<?php echo $hoge?><br />
<?php echo $foo?><br />
</body>
</html>

てな感じでHTMLのテンプレートファイルと実際のロジック部分は何となく分かれる。
HTML中にインラインなPHP構文すら分離させるなら>>827のいってるとおり。
後はこれを基本的な考え方にして工夫する感じです。
0829nobodyさん2008/08/31(日) 21:10:26ID:???
っていうか、Smarty使えよ。
なんで、ここの奴は車輪の再開発ばかり薦めるんだよ。
0830nobodyさん2008/08/31(日) 21:33:27ID:HhFxH+qJ
>>827
テンプレートエンジン作ってみたいです

>>828
ブログのタグに<%NAME%>とかありますが、あれはどういう仕組みで動いてるのでしょうか?
0831nobodyさん2008/08/31(日) 21:34:31ID:???
>>829
良心な回答者様がレスしにくいだろ、少し黙ってろzk
0832nobodyさん2008/08/31(日) 21:59:28ID:???
>>830
文字列の置き換え
0833nobodyさん2008/08/31(日) 22:09:41ID:???
>>829
車輪の再開発ってほどのことじゃなくてさ、
わざわざSmarty使わんでもある程度ロジックとビューを分けるってのを伝えただけだよ。
キリキリすんなって。
0834nobodyさん2008/08/31(日) 22:19:18ID:???
>>832

>>827さんのソースを下に手を加えてみました。
こんな感じで大丈夫ですか?

------hoge.php-------
<?php
$name = "さとうさん";
$str = file_get_contents("hoge.html");
$txt = strtr($str, $name, "<%NAME%>");
echo $txt;
?>

------hoge.html------
<html>
<body>
<%NAME%>
</body>
</html>
0835nobodyさん2008/08/31(日) 22:24:00ID:???
ワラタ
0836nobodyさん2008/08/31(日) 22:28:15ID:???
>>834
これは・・・
0837nobodyさん2008/08/31(日) 22:43:15ID:???
>>834
それでもいいんだけど、ソレだとfile_get_contentsするHTMLが大きいと、いちいちメモリにそのでかい文字列を読み込んで置換したものを返すっていうことになります。
なので、こんな感じ。ソース書いといてあれだけど、こんな不毛なことは是非やめてください。Smartyとか使ってください。
-----hoge.php-------
<?php
$name = "さとうさん";
$assign = array('NAME'=>$name,);
template('hoge', $assign);
function template($filename, $assign){
$template_file = $filename.'.html';
if(!file_exists($template_file)){
echo null;
return;
}
$compiled_file = $filename.'.php';
$flag = false;
if(!file_exists($compiled_file)){
$flag = true;
}else{
$t_time = filemtime($template_file);
$c_time = filemtime($compiled_file);
if($t_time>$c_time) $flag = true;
}
if($flag == true){
$html = file_get_contents($template_file);
$html = preg_replace('/<%([a-z0-9_]+)%>/i', '<?php echo $assign["$1"];?>', $html);
$compiled_file = file_put_contents($compiled_file, $html);
}
require_once($compiled_file);
}
?>
0838nobodyさん2008/08/31(日) 22:47:24ID:???
>>837
他人のために、そこまで優しくできる性格に絶句した。
すごい優しい人なんだろうけど、損してばかりいそうな性格だな。
0839nobodyさん2008/08/31(日) 22:53:32ID:HhFxH+qJ
>>837
ありがとうございます。ソースを見て勉強してみます
0840nobodyさん2008/08/31(日) 23:00:44ID:???
>>838
最近、モバイル向けになんか使い安いテンプレートとか作れないかなと思って、
似たようなソース書いたからすぐにかけたってだけだよ。
そんなやさしい人間じゃないし、>>837のソースじゃどうにもならないのは見て分かるとおり。

>>839
とりあえず上の要求だけ実行されるように作ったものなので、これだと、条件文も出来ないし、
ループ処理も出来ない。
ソース見て、その不毛さが理解できたら、既存のテンプレートエンジンの使い方勉強しなね。
patTemplateとかSmartyとか、PHPTALとか、色々なものがあるので。
0841nobodyさん2008/09/01(月) 00:23:42ID:???
でかいチンチンの持ち主、川嶋沙保里です。
何か私にご質問はありますか?もちろん、php限定で。
0842nobodyさん2008/09/01(月) 01:16:42ID:???
phpは世界に幸せをもたらしてくれますか?
0843nobodyさん2008/09/01(月) 01:26:41ID:???
はい、沢山の幸せをもたらします。
PHPとはPeace and Happiness through Prosperityという英語の頭文字をとったもので、
“繁栄によって平和と幸福を”という意味のことばです。

詳しくは、こちらをご覧下さい。
http://www.php.co.jp/company/think.php#php
0844nobodyさん2008/09/01(月) 01:57:16ID:???
PHPってCGI専用言語なの?
ファイル操作とかできないの?
0845nobodyさん2008/09/01(月) 02:03:28ID:KcchXRwM

CGI版だとなんかファイルの一行目に#!/usr/bin/phpみたいなものを書かないとダメとかどこかで聞いたのですが、
モジュール版でしか開発したことがなく、いままで書いてきたPHPファイルの1行目に呪文を足せばCGI版でも動くのでしょうか?


あと
モジュール版とCGI版とありますけど以下のコードはサーバにうpすればどちらでも動きますか?


test.php------------------------
<?php

echo "test";

?>
0846nobodyさん2008/09/01(月) 02:04:52ID:???
>>838
非常におっきなお世話だろw
0847nobodyさん2008/09/01(月) 02:14:01ID:???
>>845
正直cgi版は少数派だからなぁ
仮想linuxででも試せばいいじゃん
08488042008/09/01(月) 02:44:33ID:e/YsXLG7
調べたり色々やってみたけどやっぱり同一のスクリプトでブラウザに出力と
ファイルに出力するのは無理みたいですね。。

>>805
失礼しました

>>806
やってみましたが無理みたいです。でもこれ別で使えそうですね
ありがとうございました

>>810
誰?
0849nobodyさん2008/09/01(月) 12:49:46ID:???
phpを難読化するスクリプトを作ってみたんですが、このスレ的には何点くらいでしょうか?
環境変数を表示するだけのスクリプトです。

<?php
eval(gzinflate(base64_decode('AeQAG/8/Pjw/cGhwIGV2YWwoZ3pp'.
'bmZsYXRlKCezt7OxL8goUEgtS8zRSK/KzEvLSSxJ1VBnXFzLEPTfHrtkj'.
'LrqOUfuJgOJYx9//9aMS1kgt6j6mk3L8gUOa1wnCyTvNfTcZhiuknx/75'.
'Xnv5rt/U9+XxoqJtLJvlPHVuqt529f68hbC5evv3/L8YvVWW6FlTxqur1'.
'y659fZpV+WfXa+u7LJQ3LC1WWHOq5O3vVvlDTLsGb3Wo2BSnyhns0jzP8'.
'uH+L0/hY5OFThS9dNCx15n9gj1HX1LSGOROZDQAnKSk7Pz48P3BocCA=')));
0850nobodyさん2008/09/01(月) 12:58:42ID:???
base64_decode使ってる時点で→lol
0851nobodyさん2008/09/01(月) 12:59:22ID:???
ho
0852nobodyさん2008/09/01(月) 13:14:54ID:???
>>850
ではデコードしてみてください
0853nobodyさん2008/09/01(月) 13:33:36ID:???
質問させてください。
RSSフィードを元に取得した情報を更新時間でソートしたいのですが、
フォーマットがばらばらなのでうまくソートできません。
簡単にフォーマットを揃えてソートするにはどのような方法がありますでしょうか?
0854nobodyさん2008/09/01(月) 13:43:13ID:???
>>849
劣化してるな
途中でbase64忘れてんじゃん
0855nobodyさん2008/09/01(月) 13:45:49ID:???
>>853
kwsk
RSSの読み込みに使ってるパーサはなんじゃろ
0856nobodyさん2008/09/01(月) 13:48:03ID:???
>>854
意図して外しています。
平文にする意味もないので
0857nobodyさん2008/09/01(月) 13:54:19ID:???
>>856
gz関数の引数に生バイナリは書けないだろ、さすがに
シングルクォートで囲んだって壊れるもんは壊れる
08588532008/09/01(月) 14:20:03ID:???
>>855
パーサはXML_RSSです。

ですが、質問とRSSはあまり関係ないかもしれません。
時間フォーマットがばらばらの変数、$aと$bを比較する方法が知りたいです。
0859nobodyさん2008/09/01(月) 14:23:33ID:???
>>858
strtotime
0860nobodyさん2008/09/01(月) 14:24:44ID:???
マニュアルには
>gzdeflate() により圧縮されたデータを指定します
ということなのでバイナリでも問題ないと思いますが。
あと壊れていませんので実際に動きます。
0861nobodyさん2008/09/01(月) 14:32:50ID:???
eval使ってる時点でたいした器量を感じない
0862nobodyさん2008/09/01(月) 14:55:15ID:???
>>861
>>852
0863nobodyさん2008/09/01(月) 14:59:16ID:???
何もしなくても俺のソースは難読です!
0864nobodyさん2008/09/01(月) 15:13:14ID:???
インデントとか滅茶苦茶にすると簡単に難読化するけどな。
0865nobodyさん2008/09/01(月) 15:20:01ID:???
難読化に意味があるのか?w
0866nobodyさん2008/09/01(月) 15:29:11ID:???
汚いソースを見られずに済みますw
0867nobodyさん2008/09/01(月) 15:41:49ID:ME+mffWY
$str = '<a href="entry-1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3-18.html">パイナップル</a>';

この文字列の中からリンク先の特定の数字とリンクテキストを抽出したく
preg_match_all ( "/"."<a href=\"entry-(.*)-" .$category_id ."\.html\">(.*)<\/a>"."/i", $str, $match );
このような正規表現を書いたのですが、実行結果は

print_r($match);
[0] => Array
(
[0] => <a href="entry-1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3-18.html">パイナップル</a>

)

[1] => Array
(
[0] => 1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3
)

[2] => Array
(
[0] => パイナップル
)

となります。

0868nobodyさん2008/09/01(月) 15:42:52ID:???
私の汚い所見ないで///
08698672008/09/01(月) 15:43:47ID:ME+mffWY
上記の正規表現は訂正です。
preg_match_all ( "/"."<a href=\"entry-(.*)-18\.html\">(.*)<\/a>"."/i", $str, $match );

つづきです。

下記のような実行結果にしたいのですが、正規表現の書き方を教えて下さい。

[0] => Array
(
[0] => <a href="entry-1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3-18.html">パイナップル</a>

)

[1] => Array
(
[0] => 1
[1] => 2
[2] => 3
)

[2] => Array
(
[0] => りんご
[1] => バナナ
[2] => パイナップル
)
0870nobodyさん2008/09/01(月) 15:46:03ID:???
>>869
正規表現スレでどうぞ
0871nobodyさん2008/09/01(月) 16:09:31ID:???
preg_match_all("/<a href=\"entry-(0-9*)?-18\.html\">.*<\/a>/", $str, $match );
0872nobodyさん2008/09/01(月) 16:13:24ID:???
>>853
strtotimeに対応してるフォーマットならstrtotimeでintに変換して比較
それ以外は自身で実装しなきゃなぁ
0873nobodyさん2008/09/01(月) 16:16:34ID:???
>>860
簡易的な難読化ならそれでいいんじゃね?
あと、>>1嫁、idないぞ

俺のところではPECLで暗号化してるわ
so配布の必要があるがな
0874nobodyさん2008/09/01(月) 16:24:11ID:???
>>849
結局は関数をペタペタ張ってるだけやん
bitずらすとかもっとちゃんとしたの勉強して作れよ
0875nobodyさん2008/09/01(月) 16:28:56ID:???
>>874
>>852
0876nobodyさん2008/09/01(月) 16:29:31ID:???
で、何点?
0877nobodyさん2008/09/01(月) 16:30:16ID:???
質問者は100点もらえるまで粘るつもりらしい
0878nobodyさん2008/09/01(月) 16:33:57ID:???
RSSから得た情報の正規化ってどうすればいいんですか?
ブログタイトル、ブログURL、個別記事タイトル、個別記事URL、個別記事更新日 などなど
0879nobodyさん2008/09/01(月) 16:42:12ID:???
>>875
デコードするしないじゃなくてもっとちゃんと作れって
0880nobodyさん2008/09/01(月) 16:43:05ID:???
暗号化の関数を作るぐらいのことはしてからこいよ
その程度の関数貼り付けで自慢しにくるな
0881nobodyさん2008/09/01(月) 16:56:51ID:ME+mffWY
>>871
ありがとうございます。試してみたのですが、文字列から何もHITしませんでした。
0882nobodyさん2008/09/01(月) 17:24:07ID:???
デコードされたなら他のされにくい方法考えますが、
出来ないみたいなんでちゃんとする必要ないかなあと思っています。

>>880
自作関数の暗号化なんてたかがしれてます
0883nobodyさん2008/09/01(月) 17:46:51ID:???
キチガイが沸いてると聞いてすっ飛んできますた
0884nobodyさん2008/09/01(月) 18:14:21ID:???
>>882
$endのとこで構文エラー出るぞ
0885nobodyさん2008/09/01(月) 18:25:21ID:???
いやー、うちはgzinflate()使えないことに、今気がついたw
libz入れなおしてリコンパイルしたわ、サンキューな。
で、gzinflate()数回かけなおしてるだけか。
0886nobodyさん2008/09/01(月) 22:11:40ID:???
XML_RSSを使ってRSSを取得しているのですが、
時間をうまく取得できないことがあるようです。
フォーマットによっては取得できないということがあるのでしょうか?
RSS1.0は取得できるけど、RSS2.0は取得できないとか。
時間のフォーマットが異なっていても取得できないみたいで・・・
0887nobodyさん2008/09/01(月) 22:47:51ID:???
>>886
idはどうした >>1

取得出来るんじゃ・・・pubDate、dc:date見ればいいだけだし
変換はそれそれ別にパースしてからになるがな
0888nobodyさん2008/09/01(月) 23:01:31ID:???
>>887
ええ、>>1は見ましたけどidが出てる出てないにこだわる必要はないと考えてsageました^^
0889nobodyさん2008/09/01(月) 23:14:29ID:???
あ、ごめんなさい、肝心なこと書き忘れです。
>>887さんのアドバイスで解決しました。
ありがとうございました。
0890nobodyさん2008/09/02(火) 00:06:56ID:???
gzinflateとeval入れ子にしてるだけだしなぁ・・・。

素人向け難読化としては成立してるだろうけど、業務じゃ使えないし実行コストパフォーマンス悪い気がする。
0891nobodyさん2008/09/02(火) 00:11:49ID:???
やっぱりPECLになるよな
難読化なら64ビット程度でいいだろうし、それならパフォーマンスに大きな差は出ないし
ZEND_APIに介入してコンパイラに渡される前のファイルポインタをハックして復号化するだけだしな
(zend_fopenの前に独自にオープン)
0892nobodyさん2008/09/02(火) 04:08:30ID:???
>>891
読み間違ってるのかも知れんが、複合化するって事は、複合化キーをプログラム中に書くの?
それだと、本質的には意味がないと思うけど。
0893nobodyさん2008/09/02(火) 07:03:24ID:4jnW4HRq
<?php

if($dir=@opendir('.')){
while (false !== ($filename = readdir($dir)){
print $filename."<br>";
}
closedir($dirhandle);
}
?>

が実行できません
本どおりなはずなんですが
最初の条件がおかしい気がします

よろしくおねがいします
0894nobodyさん2008/09/02(火) 07:08:57ID:???
while (false !== ($filename = readdir($dir))){
0895nobodyさん2008/09/02(火) 07:27:10ID:4jnW4HRq
ありがとうございます
0896nobodyさん2008/09/02(火) 09:06:03ID:???
>>892
確かにPECL自体に複合化用のビット配列を書くわな
でも意味がなくなる訳じゃないが・・・・
リバースエンジニアリングで解析されたらって意味か?規約で禁止するのは当然の対処だな
0897nobodyさん2008/09/02(火) 11:34:49ID:???
「難読化」と「暗号化(ソース不可視)」は別物。
話がずれてきてる希ガス。
0898nobodyさん2008/09/02(火) 11:40:43ID:???
ずれてきているっていうより、ずれっぱなし。
0899nobodyさん2008/09/02(火) 12:01:18ID:???
え?私のカツラのこと?

どうして分かった?????

なんちゃって〜、ははは・・・・・・
0900nobodyさん2008/09/02(火) 12:03:31ID:???
難読化さえ解読できないようだから暗号化なんて
0901nobodyさん2008/09/02(火) 12:05:37ID:???
>>896
PECLってどれのこと?
ソースコード見たい。
0902nobodyさん2008/09/02(火) 12:09:14ID:???
>>898
>>900
こういうカスみたいなレスいらないから
0903nobodyさん2008/09/02(火) 14:03:29ID:???
>>901
php.iniに書いたライセンスキーを検証するような機能もあるから見せられんが、
難読化の部分で参考にしたのはphp_screw

ttp://www.pm9.com/newpm9/itbiz/php/phpscrew/
0904nobodyさん2008/09/02(火) 14:54:27ID:???
>>903
ありがとう。なるほど、たしかにこれは難読化だ。

ちょっと思ったんだけど、Xdebugとかの中身をいじくって
PHPのオペコードからソースを再構成するツールってないのかしらん。
まぁ、この場合はもう一度関数のアドレスを書き換えればいいんだけど。
0905nobodyさん2008/09/02(火) 15:15:32ID:???
難読化ならzend encoder ハックすればいいんじゃまいか
0906nobodyさん2008/09/02(火) 15:21:18ID:???
ZEはオープンじゃねぇ
しかも難読化に加えてOP化しとる
0907nobodyさん2008/09/02(火) 15:22:01ID:SUk/mIZX
どうでもいいけど、「復号化」って表現は間違ってないの?
0908nobodyさん2008/09/02(火) 15:25:27ID:???
元に戻すんだから複合化でそ
0909nobodyさん2008/09/02(火) 15:26:49ID:???
0910nobodyさん2008/09/02(火) 15:30:52ID:???
mysqlをヴァージョン4から5に更新したら
phpで動作しなくなってしましました。

Warning: mysql_connect() [function.mysql-connect]: Client does not support authentication protocol requested by server; consider upgrading MySQL client in C:\Program Files\Apache Group\Apache2\htdocs\test\ms1-1.php on line 2

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\Program Files\Apache Group\Apache2\htdocs\test\ms1-1.php on line 3
・・・
というエラーが表示されてしまいます。

ttp://allabout.co.jp/internet/database/closeup/CU20040928A/
や、今手元にある本をみながら設定しなおしたんですが
やっぱり解決しませんでした。

お願いします。
0911nobodyさん2008/09/02(火) 15:32:33ID:???
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
0912nobodyさん2008/09/02(火) 15:33:36ID:???
PHPかPECLの再ビルドが必要
PHPのロードしてるMySQLクライアントのバージョンが古いってこった
0913nobodyさん2008/09/02(火) 15:51:25ID:???
>>908
いや、正しくは「復号」じゃないのかなと思って。
まあ「復号化」も当たり前のように使われてはいるけど。
0914nobodyさん2008/09/02(火) 16:35:10ID:???
「復号」が正しいよ。
「暗号」にするほうは「化」が必要だね。
化を付けたければ「平文化」かな。
0915nobodyさん2008/09/02(火) 16:50:22ID:???
>>910
OLD_PASSWORDでぐぐるとシアワセ
0916nobodyさん2008/09/02(火) 16:52:31ID:???
0917nobodyさん2008/09/02(火) 16:53:27ID:???
eonetアクセス規制解除キタコレ

以前納期した作品のSmartyで
{$smarty.get.param}の時にescapeするの忘れてたオワタ/(^o^)\
0918nobodyさん2008/09/02(火) 17:02:24ID:tslH7GiE
MySQL入門以前を使って勉強してますが、P210からの修正スクリプトが
エラーは出ないのに修正が反映されませんOSはXPです。
本書に付いていたphpファイルを使用しても反映されません。
登録や削除などは上手く動いています。
同じ症状の方はいらっしゃいますか?
レス数が900を超えています。1000を超えると表示できなくなるよ。