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

【PHP】質問スレッドpart33【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/02/16(木) 03:19:52ID:xwXojaq/
PHP全般の質問スレです。
【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。

過去スレ、関連リンク、FAQ等>>2-10辺り
0002nobodyさん2006/02/16(木) 03:20:44ID:xwXojaq/
前スレ
【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
【PHP】質問スレッドpart31【php】
http://pc8.2ch.net/test/read.cgi/php/1133017632/
【PHP】質問スレッドpart30【php】
http://pc8.2ch.net/test/read.cgi/php/1130190606/
【php】part29【php】
http://pc8.2ch.net/test/read.cgi/php/1120611474/
【PHP】質問スレッドpart28【php】
http://pc8.2ch.net/test/read.cgi/php/1115281031/

関連リンク
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
0003nobodyさん2006/02/16(木) 03:22:12ID:YjyBJiPI
関連スレ
【PHP】下らねぇ質問はここに書き込みやがれpart16
http://pc8.2ch.net/test/read.cgi/php/1139146534/
【PHP】PEAR Part2
http://pc8.2ch.net/test/read.cgi/php/1122899232/
[PHP]フレームワークについて語るスレ2[総合]
http://pc8.2ch.net/test/read.cgi/php/1135847024/
【Smarty】PHPのテンプレートエンジン【Flexy】
http://pc8.2ch.net/test/read.cgi/php/1118799352/
[PHP-users MLヲチ8]巣もいませんでした。
http://pc8.2ch.net/test/read.cgi/php/1132800251/
正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php/1105930285/(落ち)
Webでオブジェクト指向プログラミング
http://pc8.2ch.net/test/read.cgi/php/1133489897/

関連板
データベース(SQL、DBMSの話題はこちら)
http://pc8.2ch.net/db/
プログラム(CLI、アルゴリズム、インタプリタの話題はおそらくこちら)
http://pc8.2ch.net/tech/
Web制作(クライアントサイドの話題は問答無用でこちら)
http://pc8.2ch.net/hp/
0004nobodyさん2006/02/16(木) 03:22:39ID:xwXojaq/
【FAQ】
1. ブラウザに何も表示されないんだけど・・・
 → error_reporting、display_errors、log_errors
2. include/requireに?a=b&c=dのようなパラメータつけたい
 → できません
3. $a1,$a2,$a3...はどうしたら?
 → 可変変数・・・というかむしろ配列使え
4. echo "$arr['hoge']['fuga']"; がうまくいかない
 → {おっぱい括弧}でくくれ
5. echo?print?
 → echoはコンマ区切りで書ける。printは関数。パフォーマンスは気にするな
6. 値渡し・参照渡しのパフォーマンス
 → これまた気にするな
7. csvやtsvを扱いたい
 → まずはfgetcsv
8. ファイル入出力関数(fopen等)でリモートファイル扱う際の限界
 → fsockopenでソケット通信で解決
9. 一定時間ごとに何かしたい
 → cron、タスクスケジューラ
10. 画像処理一般 or GDの限界
 → ImageMagick
11. 画像・音・動画はファイルで保存?DBに保存?
 → 好きにしてください
12. クッキーの情報をユーザから隠したい
 → セッション使え、ただしクッキーとセッションは仕組みが違うから同じように扱うな
0005nobodyさん2006/02/16(木) 03:23:13ID:YjyBJiPI
「エスパーきぼんぬ」「氏ね」「(゚Д゚)ハァ?」等のレスを貰う八ヶ条。
1. ハードウェア、OSのバージョン等には一字一句触れない。
2. 大切な個人情報が漏れるとまずいので、己の行った操作、変更などは秘密。
3. エラーメッセージの類は決して書かない。「エラーが出るんです」で留める。
目の前で生じている現象をそのまま具体的に書くなどもっての外。
事実より俺様の脳内解釈を優先すべし。
4. 独り言文体で必勝。
「…なんだけど、どうすればいいのかなぁ」「何が悪いんだろう?」
5. 「急いでいます」「困っています」等、自分の都合を全面に押し出す。
6. もう試したことを得意げに指摘してくる奴には、厳しく対応。
「それが駄目だったから質問してるんです」「それはもう試してみて駄目でした」
"どう"だめだったのか、本当に実際それを行ったかどうかなんか問題じゃない。
7. ストレートに答えを書かないもったいぶったレスには、逆切れで対応。
「だからどうすればいいんですか?」「分からないなら引っ込んでろやゴルァ」
示されたURL等を参照するなんて態度は、回答者を甘やかすことに他ならないので
絶対に避ける。
8. 情報は小出しに。

「エスパーきぼんぬ」 補足
上の八ヵ条を「一つでも」満たす者は質問者として不適格だということだ。
そのような悪い質問に対して答えられるのは,
質問者の意図をすべて汲み取ることのできるエスパーでもなければムリ,
という意味であって,決して,高度な技術を持つユーザに対する尊称でなはい。
まちがっても「エスパーの方,回答お願いします」なんて痛い質問するな。つーかカエレ。

000612006/02/16(木) 03:27:12ID:YjyBJiPI
あと補足は>>6-10までの間にヨロ
0007nobodyさん2006/02/16(木) 03:34:43ID:YjyBJiPI
[PHPpedia]
PHPの質問スレ、及びPHPのクダ質問スレのFAQをまとめるサイト
http://wiki.2chx.net/php/ (育成中。まだまだこれから)
0008nobodyさん2006/02/16(木) 10:07:02ID:???
<?
function next_comb(& $flags) {
$n = count($flags); $k = 0;
for ($i = $n - 1; $flags[$i]; $i --, $k ++) if ($i <= 0) return false;
for (; ! $flags[$i]; $i --) if ($i <= 0) return false;
$flags[$i] = false;
for ($i ++, $k ++; $k > 0; $i ++, $k --) $flags[$i] = true;
for (; $i < $n; $i ++) $flags[$i] = false;
return true;
}
function flags2list($flags) {
$result = array();
foreach ($flags as $i => $flag) if ($flag) $result[] = $i;
return $result;
}

$n = 5; $k = 3; $flags = array();
for ($i = 0; $i < $k; $i ++) $flags[$i] = true;
for (; $i < $n; $i ++) $flags[$i] = false;
echo implode(", ", flags2list($flags)), "<BR>";
while (next_comb($flags)) echo implode(", ", flags2list($flags)), "<BR>";
print_r($flags);
?>

全スレに教えて頂いた、5C3のコードなのですが、
"a","b","c","d","e"の中から5c3する場合はどのようにすればいいのでしょうか?
0009nobodyさん2006/02/16(木) 11:41:53ID:???
>>8
echo implode(", ", flags2list($flags)), "<BR>";
while (next_comb($flags)) echo implode(", ", flags2list($flags)), "<BR>";
print_r($flags);

を

$array = array("a","b","c","d","e");
do {list($a,$b,$c)=flags2list($flags);
echo $array[$a].", ".$array[$b],", ".$array[$c]."<br>";
}while (next_comb($flags));

に書き換え
で、どうかな?
0010nobodyさん2006/02/16(木) 11:50:21ID:i4nUjG/9
質問させてください。

imap_xxx関数使ってPOP3でメール受信をしようとしてるのですが
so-netのメールだけ受信できません。
imap_openでエラー(Couldn't open stream)になります。

もちろん通常のメーラではそのアカウントで受信できますし
PHPでも他に@niftyや自分で立てているメールサーバからは
受信できました。

パケットを調べたところ
CAPAコマンドを送ったあとにso-netのサーバから
「PIPELINING TOP UIDL APOP」を受信したあと
なぜかQUITを送ってしまいます。

どなたか分かるかたはいらっしゃいましたら
お願いします。
0011nobodyさん2006/02/16(木) 14:49:39ID:???
imapはso-netが嫌いなのかな。
0012nobodyさん2006/02/16(木) 15:13:35ID:???
so-netに尋いてみたら?
まああの会社だとまともな回答は期待でき無そうだが…。
0013nobodyさん2006/02/16(木) 15:45:08ID:???
そもそもPHPの質問じゃない気がするんだが
0014nobodyさん2006/02/16(木) 15:54:04ID:???
so-neとBiglobeのPOPサーバーはなんか設定が変だという噂だけどね。
PDAでも接続できないケースが報告されてるよ。
so-netのFAQにPocketPC向けのメーラー設定方法とか記載されてるけど
その辺は参考にならんのかな。
0015102006/02/16(木) 16:30:00ID:???
みなさんありがとうございます

他に成功しているサーバとの違いは
POP3の「CAPA」コマンドに対してso-netからの応答に
「USER」が含まれてないようです。
これが悪いことなのかは分かりませんが
そのせいでimap_openが次のコマンド(USER)を投げることを
あきらめているような気がします。

Outlookから接続した際のパケットを見ると
「CAPA」コマンドは投げずに「USER」コマンドを投げてるので
imap_openでも同じようにできれば接続できそうな気もしますが
方法が分かりません。

とりあえず暇を見て
so-netに問い合わせてみようと思います。
0016nobodyさん2006/02/16(木) 18:00:08ID:???
>>15
so-netのPOPと思われるサーバ叩いてみたけど
CAPAコマンドに対してはUSER/PASSコマンドで認証が済んでからしか、
レスポンスを返さないようにみえるよ。

でも認証が済んでから、その後にUSER/PASSコマンドは発行しないから
本来CAPAに対してUSER capabilityが返えされるべきであっても
それが返答なくても関係なく動作は出来るんじゃないかなと思わなくもない。
厳密に動作してQUITしてるとしても責められはしないが。

ただソース見てみたけど、imap_open()での実際の処理は
完全にc-clientライブラリにお任せな感じなので、
IMAP関数を使う限り、どうにかできるものではなさそう。
PEARのメール関数を使った方が、クライアント側で対処するなら
自由度が高いと思う。
0017162006/02/16(木) 18:30:05ID:???
PEARにメール"関数"はないワナ。

で、PEARのMail_IMAPクラスは結局imap_open()使うので一緒だった。
0018nobodyさん2006/02/16(木) 19:36:05ID:???
>>9さん
ありがとうございます。
お陰様で出来たのですが、いざ組み込む時にずっと考えているのですが、どうしても先に進まなくなってしまいました。
<?
function next_comb(& $flags) {
$n = count($flags); $k = 0;
for ($i = $n - 1; $flags[$i]; $i --, $k ++) if ($i <= 0) return false;
for (; ! $flags[$i]; $i --) if ($i <= 0) return false;
$flags[$i] = false;
for ($i ++, $k ++; $k > 0; $i ++, $k --) $flags[$i] = true;
for (; $i < $n; $i ++) $flags[$i] = false;
return true;
}
function flags2list($flags) {
$result = array();
foreach ($flags as $i => $flag) if ($flag) $result[] = $i;
return $result;
}

$n = 8; $k = 4; $flags = array();
for ($i = 0; $i < $k; $i ++) $flags[$i] = true;
for (; $i < $n; $i ++) $flags[$i] = false;
$array = array("1000","1500","1300","1200","1800","1600","1100","1400");
$x =($array[0]+$array[1]+$array[2]+$array[3]+$array[4]+$array[5]+$array[6]+$array[7])/2;

do {list($a,$b,$c,$d)=flags2list($flags);
$y = $array[$a]+$array[$b]+$array[$c]+$array[$d];
$z = $x-$y;
$z = abs($z);
echo $array[$a].", ".$array[$b].", ".$array[$c].", ".$array[$d].", ".$z."<br>";}
while (next_comb($flags));
?>
0019続きです。2006/02/16(木) 19:36:39ID:xEsbRgL0
8つの数字を設定して、8C4で、8つの合計を2で割ったものから、8C4の4つの数字の合計を差分を出して、
その絶対値を$zとしたのですが、この$zが一番少ない組み合わせを出したいのです。(はじめに出てくるのがいいのです。)
上の場合だと、$zが50の時一番少ないのですが、組み合わせを書き出した時、上から3つ目ではじめに50と出ているので

「1000 1500 1300 1600」

という組み合わせを結果としてだしたいのです。

$zの値が入っている配列を作る事が出来れば、出来るだろうと思い、
新たな配列変数を作って、forループで毎回の$zの値を代入していこうとは思ったのですが、どうも上手く動作せず悩んでいます。
分り難い&何度も質問してしまい申し訳無いのですが宜しくお願い致します。
0020nobodyさん2006/02/16(木) 20:04:28ID:???
php初心者です。Authモジュールに関して質問させていただきます。
本家pearの方にのっていた、最も簡単な認証スクリプトを実行してみましたが
Fatal error: Class 'DB' not found in /Applications/MAMP/bin/php5/lib/php/Auth/Container/DB.php on line 127
という表示がフォームの送信後にでてしまいます。何が原因なのでしょうか?環境は、macのpantherでMAMPを使っています。


・ちなみに以下のように実行しました(上記URLと同じです)

<?php
require_once "Auth/Auth.php";

function loginFunction()
{
echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">";
echo "<input type=\"text\" name=\"username\">";
echo "<input type=\"password\" name=\"password\">";
echo "<input type=\"submit\">";
echo "</form>";
}

$dsn = "mysql://名前:パスワード@localhost/テーブル名";
$a = new Auth("DB",$dsn,"loginFunction");

$a->start();

if($a->getAuth()) {
echo "hello";
}
0021nobodyさん2006/02/16(木) 21:12:58ID:???
Pearが入ってないから。
0022nobodyさん2006/02/16(木) 21:20:01ID:???
質問ですが、phpによるファイルの作成と、ファイルの上書き、
どちらがサーバーに負担が掛かるものなのでしょうか。
0023nobodyさん2006/02/16(木) 21:33:44ID:???
>>22
どっちも大差ない
0024nobodyさん2006/02/16(木) 21:36:37ID:???
>>22
1000回くらい回すコード書いて、時間計ってみたら?
上書きといっても、内容全部消した場合と追記した場合で違うだろうし。
レポキボン
0025nobodyさん2006/02/16(木) 21:49:57ID:???
>>18
そんな事は出来ない。
諦めろ
0026nobodyさん2006/02/16(木) 22:16:36ID:VwfjUIGO
>>23
>>24
ありがとうございます。
ほとんどphpの知識がないものでレポはできなくて申し訳ないですが、
上書きに変更した途端鯖堕ちしたので、自分のせいかとあせりました。
今は問題なく稼動してるので大丈夫そうです。
0027nobodyさん2006/02/17(金) 01:54:56ID:qKPXZPko
windowsNTで、Apache_2.0.52、PHP5、MySQL4.0.21は
問題なく動作するのでしょうか。
(レス違いでしたら誘導お願いします)
0028nobodyさん2006/02/17(金) 02:23:12ID:???
します。
0029nobodyさん2006/02/17(金) 03:43:23ID:eyDUdvZm
テンプレートに $aaa など変数を書いてfread()で呼び出すとエラーが発生してしまうんですが
問題なく実行させるいい方法はないでしょうか


phpのブログとかでテンプレに変数を直接書き込まれているのを見たのですが
自分がやってみるとエラーが出てしまうんです
0030nobodyさん2006/02/17(金) 03:49:47ID:???
>>29
一体何のテンプレートなのか、
どのようなコードなのか
具体的に書いてくれないと全く見当が付きません。

ttp://php.net/manual/の言語リファレンス(10-21章)を一通り読んでください
0031nobodyさん2006/02/17(金) 04:00:48ID:???
>>29

include
require
0032nobodyさん2006/02/17(金) 09:08:34ID:???
>>19
宿題は自分で汁
0033nobodyさん2006/02/17(金) 10:08:44ID:???
>>30
勝手にエスパー補足してみよう。

最終的な出力結果を
$body
かなんか、適当な変数に入れて出力している。
$body=fread('template.php');
で取り込むとして
template.phpの中身が
<html>
<head>
<title>$site_title</title>
</head>
<body>
</body>
</html>
とかだったりすると
<title>$title_title</title>
がそのまま出力されて困る。

という趣旨の質問ではないかと思う。
0034182006/02/17(金) 12:40:07ID:qUshKop+
>>32さん
宿題では無くて、自作のコードに必要なのですがどうしても出来なくて悩んでいたのですが
取りあえず、出力結果を別のテキストファイルに保存し、別にそのテキストファイルを読み込んで配列に格納するという
事でやっと出来ましたorz

アドバイス及び、コードを教えて下さった方々本当にありがとうございました。
0035nobodyさん2006/02/17(金) 14:55:08ID:eyDUdvZm
>>30
以下がソースです
01.phpの中身↓
<?php
$aaa = "正常に動作しました";
include "a.txt";
?>

a.txtの中身↓
$aaa

>>31
上記のようにしてみましたがうまく行きませんでした

>>33
まさにその通りなんです。説明が下手でしみません
うまく行かないということは記述が間違っているということなんですが
どこがどう間違ってるかわからないんです
0036nobodyさん2006/02/17(金) 15:34:53ID:???
Apacheのログをphpで整形させるプログラムを作っているのですが下記の様な処理をするに当り、
スマートな方法がなかなか思い浮かばずに悩んでいます。

/~aaaa/bbb/ccc.html
/~aaaa/ddd/e.html
/~aaaa/f.html
/~aaaa/g.jpeg

上記のような形式のログが一行ごとに並んでいまして、「/~X/」のXに該当する部分だけを取り出そうと考えています。
そこで最初の/~は正規表現でnullに置き換えましたが/以降をどう処理するかで困っています。

宜しければお知恵をお貸し下さい。
0037362006/02/17(金) 15:41:07ID:???
質問したついでに回答していきます;

>>35
a.txtがtxtファイルだから直に出力されてるんじゃないでしょうか?
変数として動かしたいのであれば<? ?>を書いてphpとして処理させないと変数としては取り扱ってもらえないと思います。
0038nobodyさん2006/02/17(金) 15:46:25ID:???
>>35
a.txt
<html>
・
・
<?php echo $aaa?>
・
・
</html>
0039nobodyさん2006/02/17(金) 15:51:47ID:???
>>36
$path = "/~aaaa/bbb/ccc.html";
preg_match("|/~([^/]+)|", $path, $match);
$user_dir = $match[1];
0040nobodyさん2006/02/17(金) 16:07:05ID:EA7FpTYe
MacOSX10.3.9を使って自宅サーバを運営しています。
phpをやりたいのですが、

(1)
phpが始めからインストールされているそうなのですが、
どうやったら使えるようになるのでしょうか。

(2)
phpはどうやって勉強したらいいのでしょうか?
0041nobodyさん2006/02/17(金) 16:13:06ID:???
おまいがマック板の皮先くんなら放置したいところだが・・・
1. httpd.confの設定をするだけで使える事は使える。
2. ドキュメント。サンプルを見ながらでも結構勉強できる。
0042402006/02/17(金) 16:22:16ID:???
>>41
ありがとうございます!!
俺様のスキルならphpの習得も早そうなので
アドバイス通りのことをやってみます。

ここはunixのスキルアップに役に立つスレなのでまた来ますね。
0043nobodyさん2006/02/17(金) 16:27:58ID:???
>>40
ワロタww
0044nobodyさん2006/02/17(金) 17:37:59ID:???
htmlにphpコードを入れる。
それをphpが動いていない環境でブラウザ(IE)で開くと、
<?php なんたら ?> の部分が見事コメントアウトされて、
phpコードが表示されずにいい感じに表示されるんだが、

<?php $obj->method(); ?> というコードを入れると、->の部分で終わりとみなされて、
phpが動いていない環境でブラウザで開くと、 method(); ?> が表示されてしまう。

お客さんが直接ローカルでIEでみたり、HTMLエディタで編集させようというときに困るかなぁと。
まあ、ブラウザの仕様にもよるんだろうけど、オブジェクトのメソッドは
必ず呼ぶものとして、なんかいい方法無い?
0045nobodyさん2006/02/17(金) 17:40:49ID:???
>>44
っ テンプレートエンジン
0046nobodyさん2006/02/17(金) 17:50:01ID:???
>>45
Smarty使ったんだけど、公開するindex.phpに結局こういうコードが入ってしまわない?

<?php
require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
?>

まあ、お客さんが入力するコンテンツをデータベースとかに保存すればいいんだけど、
小規模レベルのやつなので、テンプレートで、サイト全体のデザイン。
たとえば左にメニューがあって・・・とかで、
コンテンツは、index.php 自体に入れたい。つまりこういうことをしたい。

<?php
require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('name','Ned');
?>
ここにお客さんがHTMLエディタで入力
<?php
$smarty->assign('contents','〜お客さんが入力したHTMLをどうにかして変数にもってくる〜');
$smarty->display('index.tpl');
?>
0047nobodyさん2006/02/17(金) 17:56:40ID:???
携帯でリファラを消して飛ばしたいんですが、

header("Refresh: 0; URL=".$jump);

これでドコモはいけるんだけど、AUでいけないんです。
メタで飛ばすのもAUは無理です。
AUでなんとかリファラ消して飛ばせませんか?
0048362006/02/17(金) 17:58:44ID:???
つLocation
0049nobodyさん2006/02/17(金) 18:00:47ID:???
>>48
ロケだとリファラ消えないんです。
0050nobodyさん2006/02/17(金) 18:02:25ID:???
やっべ名前欄戻ってなかったorz

ちなみに先ほどの正規表現で無事解決できました・・・�dクスでした。
今度はログが大きすぎてタイムアウトして・・・もごもご・・・あ、スミマセンチラシの裏に書いときます

それにしてもログファイルて小まめに整理しないと後で酷い目にあうねorz
0051nobodyさん2006/02/17(金) 18:07:22ID:???
>>46
なんかすごい間違った使い方してる気がするんだが…
お客さんにはindex.tplを編集してもらえばいいんでない?

***.phpにHTMLを入れておきたいんだったらSmartyは使わない方が
すっきりする希ガス

知ってると思うがテンプレートファイルから別のテンプレートをインクルード
もできるから、テンプレート使ってサイト全体のデザインと部品コンテンツ
分けて作成できるよ。
0052nobodyさん2006/02/17(金) 18:41:05ID:???
>>51
> なんかすごい間違った使い方してる気がするんだが…
うん。自分でもそう思っている。

SEO的なところからindex.php?main 見たいにサイト全体を一つのphpで処理したくないんだよね。
(だから実際にはphpファイルでも拡張子htmlで動くようにしています。)
mod_rewriteはなんか複雑だし、レンタルサーバーによっては入ってなさそうだし。
そうするとコンテンツ(ページ)ごとにtplとそれを表示する.phpができてしまってごちゃごちゃしない?

> ***.phpにHTMLを入れておきたいんだったらSmartyは使わない方が
> すっきりする希ガス
いま一応そうしているんだけど、将来、俺はシステム面だけ作りたいし、デザイン方面は
デザイナーに任せたいし、中身はお客さんでも修正できるようにしたいし。どうしたもんかなぁ。

別にSmartyは使わないは使わないでもいいんだけど、この話は横道。
本来の解決したい問題はこっち→>>44 。
0053nobodyさん2006/02/17(金) 20:00:22ID:???
>>44
<!-- <?php $obj->method(); ?> -->
0054512006/02/17(金) 20:14:04ID:???
>>52
>そうするとコンテンツ(ページ)ごとにtplとそれを表示する.phpができてしまってごちゃごちゃしない?
んー
なんとなく言わんとすることはわかるが…
そういうもんだと割りきってしまってるからなぁ…
そもそもテンプレートエンジンって1ページ表示の際のロジックをPHPで、
画面構成をテンプレートで、と分けるのが目的だしね。

若干苦しいが、独自でHTML中に埋め込まれる変数をトークンに対応付けておいて、
サーバに配置する際には必ずsedとかでトークン→PHP変数の置換を行う、とか…
0055nobodyさん2006/02/17(金) 21:42:19ID:+wY6r5/H
>>53
<!-- <?php echo ' --' , '>'; $obj->method(); echo '<', '!--'; ?> -->
0056nobodyさん2006/02/17(金) 21:49:25ID:???
編集するときだけJavaScriptで消すとかは?
0057nobodyさん2006/02/17(金) 21:53:34ID:???
>>29>>35
ワロスw
freadどこ?
0058nobodyさん2006/02/17(金) 23:10:04ID:???
phpでサーバにあるファイルのリネームをしようとコードを書いてます。

$dirName = $_POST['dirName'];
$lastNum = $_POST['lastNum'];
$fileName = "$dirName/$lastNum.dat.gz";

$fileName2 = d."$fileName";
$ret = copy($fileName,$fileName2);
unlink ($fileName);

今あるファイル名の先頭に「d」とつけたいのですが
上記のようなコードを書いても期待通りに動きません。
ファイル名、ディレクトリ名は外部からPOSTしています。

アドバイスをよろしくお願いします。
0059nobodyさん2006/02/17(金) 23:13:19ID:???
>>58
rename
0060nobodyさん2006/02/17(金) 23:28:22ID:???
>>35
01.phpの中身をこうしてみ
<?php
$aaa = "正常に動作しました";
echo preg_replace('/(\$)(\w+)/e', '$GLOBALS[$2]', file_get_contents("a.txt"));
?>
0061nobodyさん2006/02/17(金) 23:29:18ID:???
>>58
> $fileName2 = d."$fileName";
 ↓
$fileName2 = "d$fileName";
0062nobodyさん2006/02/17(金) 23:49:42ID:???
>>59
>>61
ありがとうございます!
うまく動作しました。
renameのほうが鯖負担は少なそうですね。
いまだにphpのストリングス結合の法則が分からん・・
0063nobodyさん2006/02/18(土) 00:38:10ID:???
>>61
$fileName2 = "d".$fileName;
0064nobodyさん2006/02/18(土) 00:41:09ID:???
そのくらいマニュアル読めよな・・・
0065nobodyさん2006/02/18(土) 01:03:08ID:???
>>62
お前が分かってないのは結合じゃなくて文字列そのもの
0066352006/02/18(土) 01:26:15ID:4SCbmboD
>>37
>>38
>>60
うまく変換できました、ありがとうございます
とても参考になりました。
0067nobodyさん2006/02/18(土) 11:43:18ID:???
abcdefghijkl...

3文字ずつ分割して配列にする方法を教えてください。

[0] => abc
[1] => def
[2] => ghi
[3] => jkl
0068nobodyさん2006/02/18(土) 12:04:50ID:???
>>67
これぐらいしか思いつかん、スマン
for ($n = 0; $n < strlen ($a)/3; $n++)
$b[$n] = substr ($a, $n*3, 3);
0069nobodyさん2006/02/18(土) 12:31:35ID:???
>>67
$a='abcdefghijklmn';
$b=preg_split('/(.{1,3})/', $a, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
print_r($b);
0070nobodyさん2006/02/18(土) 12:38:40ID:???
>>67
php5なら
$str = "abcdefghijkl";
$arr = str_split($str, 3);
0071nobodyさん2006/02/18(土) 15:39:50ID:???
PHP5ってまたいっぱい関数増やしてんだなー
0072nobodyさん2006/02/18(土) 17:13:25ID:???
基本的にインタプリタだから関数で一発処理の方がいいからね
0073nobodyさん2006/02/18(土) 17:21:20ID:???
PHPでPerlにあるqq()ってのはありますか?

$abc = qq(<A href="a">).$def.qq(</A>);

みたいなことしたいんですけど、ヒアドキュメントだと
見づらくなっちゃうので、すっきりかける方法がないかな〜と。
0074nobodyさん2006/02/18(土) 17:47:49ID:???
>>73
俺は知らないなぁ。

"(<A href=\"a\">)$def(</A>)";
とやるか
"(<A href='a'>)$def(</A>)";
とやるな。
0075nobodyさん2006/02/18(土) 17:54:29ID:???
>>73
つか、普通にシングルクォートで括れば?

$abc = '<a href="a">' . $def . '</a>' ; (いまさら大文字は無いだろ…)
0076nobodyさん2006/02/18(土) 18:20:45ID:???
その辺ってPHPはPerlに比べると不便だよねー。
\"にしろ . での連結にしろ煩わしいし見づらいし間違っても気づきにくいし。
俺はヒアドキュメント使っちゃう派。
0077nobodyさん2006/02/18(土) 21:32:24ID:???
>>68-70 ありがとうございます。
0078nobodyさん2006/02/19(日) 00:56:32ID:???
>>76
それはお前がPerlに慣れてるからじゃないか?俺はqqとか気持ち悪いから使わないが
0079nobodyさん2006/02/19(日) 01:44:34ID:???
はじめは慣れてないと気持ち悪いものですよ。
いやあperlほど不便なものはない。。
0080nobodyさん2006/02/19(日) 02:17:35ID:???
perlの$_とか好きなんだけどなぁ。
0081nobodyさん2006/02/19(日) 03:04:43ID:???
>>78
大量のエスケープ記号を挟むよりずっと美しい記法だと俺は思うがなぁ。
0082nobodyさん2006/02/19(日) 03:06:31ID:???
そろそろスレ違いだと俺は思うがなぁ。
0083nobodyさん2006/02/19(日) 04:24:56ID:SHjAEm2n

print"<img src="sky.jpg" width="" height="" alt="">";

↑この文章のところでエラーになってしまうんですが
なにかいい方法ないですか?
0084nobodyさん2006/02/19(日) 04:37:32ID:???
>>83
わざと荒らしてるのか?つい直前でその話をしてるとこだろが。
0085nobodyさん2006/02/19(日) 04:46:34ID:???
>>83
こうしろ

?>
<img src="sky.jpg" width="" height="" alt="">
<?php
0086nobodyさん2006/02/19(日) 08:48:59ID:???
この書き方ができるのはPHPのいいとこだよな
0087nobodyさん2006/02/19(日) 14:18:30ID:???
それはロジックと区別がつきにくいからということで、コーディング規約で禁止になってる…
0088nobodyさん2006/02/19(日) 15:06:13ID:???
いいじゃない
釣りにマジレス
しなくても
0089nobodyさん2006/02/19(日) 15:56:15ID:???
つphp-mode.el
0090nobodyさん2006/02/19(日) 17:05:40ID:???
2006/02/19(Sun) 00:00:00

現在この様な形式でJSTでログに記録しています。

これをGMTで
Sun, 19 Feb 2006 00:00:00 GMT

と変換したいのですが簡単な方法ありませんでしょうか。
こんな事なら最初からunixtimeでログとっておけば簡単だったのに・・・ 
0091nobodyさん2006/02/19(日) 18:14:30ID:???
MT質問スレからの移動です。

MovableTypeに以下のスクリプトでtrackbackを送ると
「1 送信元の URL (url) が必要です。」
と帰ってくるのですが、仕様書の記載ではこれでよいはずなのです。
どなたか原因を教えていただけませんでしょうか。

<?php
$url='www.hogehoge.com';
$fp = fsockopen($url,80,$errno, $errstr, 30);
if(!$fp){echo "$errstr($errno)";}
$ping="POST http://www.hogehoge.com/tb.cgi\r\n";
$ping .= "User-Agent:BlogTool\r\n";
$ping .= "Host: http://www.hogehoge.com/tb.cgi/1\r\n";
$ping.="Content-Type: application/x-www-form-urlencoded\r\n";
$ping.="title=Foo+Bar&url=http://www.hogehoge2.com/1.html&excerpt=My+Excerpt&blog_name=Foo";

fwrite($fp,$ping);
$response = "";
while (!feof($fp)) {
$response .= fgets($fp, 4096);
}
fclose($fp);

echo $response;
?>
0092nobodyさん2006/02/19(日) 18:22:59ID:???
仕様書って言われてもどれのことか分からんので適当に「MovableType 仕様書」でググってみた。
そうやって見つけた仕様書では、
パラメータとして title, excerpt, url, blog_nameを使う事ができ、 url だけが必須、とあった。
0093nobodyさん2006/02/19(日) 18:33:27ID:???
>$ping.="Content-Type: application/x-www-form-urlencoded\r\n";
なのにurlencodeされていないのは気にしなくてもいい?
0094912006/02/19(日) 18:34:03ID:???
>>92
お手数おかけします。
(トラックバック技術仕様書 http://lowlife.jp/yasusii/stories/8.html

$pingの最終行にurlを指定しているのですが
これが仮に送信されていないのであれば
phpの書き方に問題があるのではないかと思ったのです。
0095nobodyさん2006/02/19(日) 18:44:22ID:???
>>87
じゃあ、これならOK?
 if(条件) {
  ?><img src="sky.jpg" width="" height="" alt=""><?php
 }
0096nobodyさん2006/02/19(日) 18:50:05ID:???
>>91
仕様書も読まないで想像で回答しちゃうけど、
POST 〜
User-Agent: 〜
Content-type: 〜
ときて
name=value&name=value&name=value...
とくるなら、それって前者がPOSTメソッドのヘッダ送信で、後者がクエリーデータだろ。
ならヘッダとデータの間に1行の空行が必要なはず。
$ping.="Content-Type: application/x-www-form-urlencoded\r\n";
$ping.="\r\n";
$ping.="title=Foo+Bar&url=http://www.hogehoge2.com/1.html&excerpt=My+Excerpt&blog_name=Foo";
でいけねー?
0097nobodyさん2006/02/19(日) 18:52:45ID:???
>>90
strtotime
0098902006/02/19(日) 22:37:05ID:???
>>97
ありがとうございました。解決できました。

2006/02/19(Sun) 00:00:00 で (Sun) とかが入っていても見事に変換できるのですね
0099912006/02/20(月) 00:36:09ID:???
urlencode()
空行を入れる
のいずれも駄目でした…。
思いついてUTF-8に変換してみたりもしたのですが
やはり同じ症状です。
はてさて…
0100nobodyさん2006/02/20(月) 04:23:54ID:???
>>91
多分今回の問題とは直接は関係ないと思うが
> $ping="POST http://www.hogehoge.com/tb.cgi\r\n";
> $ping .= "Host: http://www.hogehoge.com/tb.cgi/1\r\n";
は
$ping="POST http://www.hogehoge.com/tb.cgi/1\r\n";
$ping .= "Host: http://www.hogehoge2.com/\r\n";
だと思う。
0101nobodyさん2006/02/20(月) 07:53:04ID:???
PHPに関係ないね。
■ このスレッドは過去ログ倉庫に格納されています