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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/08/25(土) 22:11:08ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

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

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

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

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0124nobodyさん2007/08/28(火) 12:46:04ID:???
ファイル入出力やフィルタリングは
外部ファイルにクラスを作って使い回していますが何か?
0125nobodyさん2007/08/28(火) 13:08:32ID:???
>>123
作っといたほうが楽
0126nobodyさん2007/08/28(火) 13:09:11ID:???
>>124
質問に質問をぶつけておまえ頭悪いだろ
0127nobodyさん2007/08/28(火) 13:13:10ID:???
まぁ、確かに関数より記録リソースの操作モジュールでも作っといたほうが色々楽だろうけどねぇ。
0128962007/08/28(火) 13:53:56ID:y77U9tuf
自己解決しました。

$mlfr = "From: " . mb_encode_mimeheader("あああ<test@hoge.com>");



$mlfr = "From: " . mb_encode_mimeheader("あああ") . "<test@hoge.com>";

とすることで正しくFromヘッダが送信されました。
niftyのメールサーバは何か特殊なんですかね・・・。
0129nobodyさん2007/08/28(火) 13:56:39ID:Vlzye/6Z
$data = array(
 array('id'=>1,'cnt'=>5,'title'=>'hoge'),
 array('id'=>2,'cnt'=>4,'title'=>'foo'),
 array('id'=>3,'cnt'=>0,'title'=>'bar')
);

こんな配列があったとしてcntの順にソートしたいのですが可能でしょうか?
どんな方法で出来ますでしょうか?
0130nobodyさん2007/08/28(火) 13:59:22ID:YkG/SsxW
>>4の簡易FAQの5ですが
print <<< DOC
<form method="POST" action="$_SERVER['SCRIPT_NAME']">
DOC;
のように他の文字列が隣接してないのにエラーが出てしまうのは、
どういう解釈がされるからなのでしょうか?

あと変数を波括弧で囲む時
{$_SERVER['SCRIPT_NAME']}
${_SERVER['SCRIPT_NAME']}
の2種類の書き方がありますがこの違いってなんなのでしょう?
0131nobodyさん2007/08/28(火) 14:24:19ID:GM5VT/dP
$format="%-s %-35s %-60s %-s";
printf($format, $a, $b, $c, $d);

1行目にある「%-s」や「%-35s」などにあるマイナス文字はどのような意味
なのでしょうか。
0132nobodyさん2007/08/28(火) 14:32:21ID:???
オプションの符号指定子。これは、 数値で符号 (- あるいは +) を使用するよう指定します。 デフォルトでは、数値が負の場合の - 符号のみが使用されます。 この指定子により、正の数にも強制的に + 符号をつけることができます。 これは PHP 4.3.0 で追加されました。
0133nobodyさん2007/08/28(火) 14:33:14ID:???
マニュアル読まないクズは市ね
0134nobodyさん2007/08/28(火) 14:35:54ID:???
>>129
cntでソート用の配列作ってarray_multisort( )
>>131
文字列の場合は-は左詰で表示
0135nobodyさん2007/08/28(火) 18:30:13ID:???
$sumの値がokでなければループ

while ($sum != "ok"){
..........
}

これでできないんですがどこがおかしいのでしょうか
01361352007/08/28(火) 18:32:18ID:???
すみません、>>1読むの忘れてきたのと、
マニュアルに載っていたのを見ていませんでした
出直してきますね
0137nobodyさん2007/08/28(火) 18:34:42ID:wOTpbT+K
フォームに\だけを書いてポストして
$_REQUESTを表示させると\\になります
この現象は何ですか
0138nobodyさん2007/08/28(火) 18:36:13ID:???
>>137
エスケープ
0139nobodyさん2007/08/28(火) 18:38:35ID:wOTpbT+K
>>138
これを中止させるにはどうすればいいですか?
0140nobodyさん2007/08/28(火) 18:40:05ID:???
>>139
エスケープを解除する関数
「PHP エスケープ」出てくるんじゃね?
0141nobodyさん2007/08/28(火) 18:45:15ID:???
>>139
PHP.INIのマジッククォートを停止させる
0142nobodyさん2007/08/28(火) 18:49:44ID:???
>>140-141
ありがとうございました
0143nobodyさん2007/08/28(火) 18:49:48ID:???
function en_stop($str)
{
$tmp=ereg_replace("[\][\]","\x5c",$str);
$tmp=ereg_replace("[\][']","'",$tmp);
$tmp=ereg_replace("[\][,]",",",$tmp);

return $tmp;
}
0144nobodyさん2007/08/28(火) 19:43:38ID:???
>>合ってるとオモ
動かないか?
0145nobodyさん2007/08/28(火) 19:44:29ID:???
>>135
0146nobodyさん2007/08/28(火) 19:44:51ID:???
内部コードutf8、pcサイトutf8、携帯サイトsjis
で運用しようと思っています。
この運用だと、ポストされるエンコードがsjisとutf8になりますよね
sjisだった場合は当然utf8に変換しないといけないのですが、
mb_detect_encodingは
携帯の絵文字が混ざった文章もちゃんとsjisと判定できるのでしょうか?
あるいはもっといい方法があれば教えて下さい
0147nobodyさん2007/08/28(火) 19:50:54ID:???
>>146
できる
0148nobodyさん2007/08/28(火) 21:27:05ID:???
まぁまぁ、そう熱くならずに自分のおならの臭いを嗅いでエクスタシー感じようよ
0149nobodyさん2007/08/29(水) 02:34:35ID:???
>>147
そうなんですか
絵文字はsjisの範囲内で実現してるんですね
ありがとうございました
0150nobodyさん2007/08/29(水) 06:42:45ID:uYM+HrXL
$test = "テスト";

$template = <<<_TMP_
テンプレートです。
タイトル:{test}
おしまい
_TMP_;

preg_replace('/{(.*)}/', '$$1', $template);

{hogehoge}を$hogehogeに格納されている値に置き換えたいのですが
何か良い方法はありませんでしょうか?

このやり方では、「$test」と出力されてしまいます
0151nobodyさん2007/08/29(水) 08:42:05ID:???
>>150
<?php
$test="テスト";
?>
テンプレートです。
タイトル:<?=$test;?>
おしまい
0152nobodyさん2007/08/29(水) 09:19:27ID:uYM+HrXL
>>151
早速のご回答ありがとうございます

「テンプレートです。
タイトル:{test}
おしまい 」
これは外部ファイルとして保存しておいて
呼び出してから文字列の置き換えを行いたいのです
0153nobodyさん2007/08/29(水) 09:25:27ID:bOc70w1/
拡張子phpにしてincludeでおk
0154nobodyさん2007/08/29(水) 09:54:17ID:uYM+HrXL
何度もすみません
詳しく言うと、アップーロードにて一般の方にテンプレをUPしてもらい
そのテンプレを元に作成したいのです
なので、拡張子はtxtがメインになると思います
0155nobodyさん2007/08/29(水) 10:17:47ID:???
>>154
アップロードしてもらって移動した時点で拡張子を変えればおk
0156nobodyさん2007/08/29(水) 10:18:17ID:???
>>154
指定先にファイルがあれば拡張子がなくてもincludeできる
0157nobodyさん2007/08/29(水) 10:51:00ID:???
>>154
preg_replace('/{(.*?)}/e', '$$1', $template);
0158nobodyさん2007/08/29(水) 11:06:55ID:???
>>154
外部のユーザからアップロードされたファイルをincludeして実行するという話を
本気にしてはダメだ。eスイッチも同様。

動的にやりたいならpreg_replace_callbackで。
そうでないなら preg_replace(//,array("hoge"),array($hoge)); とか。
0159nobodyさん2007/08/29(水) 11:14:14ID:???
>>148
理由は単純で殺人未遂だから。

おならには、硫化水素という有毒なガスが含まれていて、
量によっては即死する。
つまりおならによって人が死ぬことも理論的にはありえるわけで、
そのような殺人未遂行為(不可罰であるが)が、人から嫌がられるのは当然。
0160nobodyさん2007/08/29(水) 11:27:16ID:uYM+HrXL
>>157-158
ありがとうございます

preg_replace_callbackを参考に

$test = "aaaaaa";

$text = <<<_TEXT_
test
{test}
test
_TEXT_;

function getVar($matches){
$matches = trim($matches[1]);
global $$matches;
return $$matches;
}

$text = preg_replace_callback("/{(.*)}/","getVar",$text);

echo $text;

としてみると見事に解決しました。
0161nobodyさん2007/08/29(水) 12:08:32ID:???
Basic認証をしてアクセス管理をしているのですが、
ブラウザを閉じない限りログアウトできませんよね?
再度認証できる方法はないのでしょうか?

0162nobodyさん2007/08/29(水) 12:25:58ID:???
日本語でおk
あと>>1
0163nobodyさん2007/08/29(水) 12:29:31ID:???
すいません、やはりBASIC認証では無理みたいですね。
失礼しましたm(..)m
0164nobodyさん2007/08/29(水) 12:50:14ID:???
>>159
DHMOの危険性に比べたら、とてもとても
0165nobodyさん2007/08/29(水) 13:26:20ID:???
>>160
それでいいのなら別にいいのだけど、
その実装だとテンプレートをアップロードできる人が
変数を全部参照できることになるから注意してね。

つまり、$mysql_passwordにパスワードを入れとくとやばいとかそういうこと。
0166nobodyさん2007/08/29(水) 13:34:48ID:uYM+HrXL
>>165
ありがとうございます
特に重要なものは取り扱わないので大丈夫です
0167nobodyさん2007/08/29(水) 13:39:40ID:???
>>166
個人的にはテンプレート用の配列のみを置換するようにした方が便利だと思うよ。
$replaceStr['test'] を {test} に置き換えるとか。
0168nobodyさん2007/08/29(水) 17:24:45ID:???
ヒアドキュメントの中に関数(例えばif)などを入れて動作させることは可能でしょうか?
以下のようにやってみたのですが出来ないようです。

echo <<<EOF
I am <?php if($test == 1) {echo 'hoge'} ?>
EOF;
0169nobodyさん2007/08/29(水) 17:29:18ID:???
1はtrue
0170nobodyさん2007/08/29(水) 17:32:42ID:???
>>168
無理
0171nobodyさん2007/08/29(水) 17:40:06ID:???
>>168
echo は与えられた文字列を出力するだけ。
eval() なら出来る。
0172nobodyさん2007/08/29(水) 19:48:55ID:???
ヒアドキュメント内はすべて文字列として出力されちゃうんじゃない?
一度ヒアドキュメントを抜けないと無理だと思う
0173nobodyさん2007/08/29(水) 22:36:27ID:???
mysql_connect関数の第一個目のパラメーターはホスト名なんですが
ホスト名が無い場合は使えないんでしょうか
0174nobodyさん2007/08/29(水) 22:37:21ID:???
ひあどきゅめんとにはいるまえにいふなりなんなりへんすうをしょりして
ひあどきゅめんとないにへんすうをいれれば
ふつうにできるじゃん。
0175nobodyさん2007/08/29(水) 22:39:20ID:???
>>173
localhostか127.0.0.1でいいんじゃ。
0176nobodyさん2007/08/29(水) 22:47:26ID:???
>>174
さすが行政書士だなw
漢字も満足に書けないんだなぁwww
0177nobodyさん2007/08/29(水) 23:06:07ID:???
>>174
妊婦かよ!
0178nobodyさん2007/08/29(水) 23:18:35ID:???
>>175
そう書いておけばたしかに動くんです
そうしておきます
0179nobodyさん2007/08/30(木) 00:08:26ID:6umYOf5a
多階層のxmlのパースで困っています
domxmlを利用しています
このような感じです
<one>
<title>
<main>あ</main>
<man>
<blue>
<a>い</a>
<b>う</b>
</blue>
<pink>
<a>え</a>
<b>お</b>
</pink>
</man>
<woman>
<blue>
<a>か</a>
<b>き</b>
</blue>
<pink>
<a>く</a>
<b>け</b>
</pink>
</woman>
</one>


<two>
(↑の同じ構造)
</two>
01801792007/08/30(木) 00:12:36ID:6umYOf5a
このような多階層のXMLで、twoの要素を全て、変数に入れたいのです。
(配列ではダメです)

まずは、

$dom = domxml_open_file("xmlのURL");

$root = $dom->document_element();

$node = $root->get_elements_by_tagname('two');

みたいに書いたのですが、ここから効率のよい取得方法が分かりません。
自分で書いてみたプログラムは200行ぐらいになりました。。。

どなたかご教授ください。
0181nobodyさん2007/08/30(木) 01:27:14ID:???
utf8でhtmlソース吐く時って
BOMを付加するべき?しないべき?
0182nobodyさん2007/08/30(木) 01:32:25ID:???
つけてはいけない
0183nobodyさん2007/08/30(木) 01:34:41ID:???
つけてはいけないをつけてはいけない
0184nobodyさん2007/08/30(木) 01:40:21ID:uPaIz1km
携帯絵文字一文字だけでdetect_encodingしてみました
mb_detect_orderは("sjis, UTF-8, EUC-JP")
すると、utf-8で判定されたり、euc-jpで判定されたりしました

太陽(f89f):UTF-8
ATM(f8c9):euc-jp

これは「絵文字だけでエンコーディングを判定するのは無理ぽ」
ということでしょうか?
またshift-jisを最初に設定しているのにマッチしていないのが気になります
判定方法にバグでもあるのでしょうか?
0185nobodyさん2007/08/30(木) 01:51:22ID:???
>>184
絵文字は外字領域(SJISで未使用の範囲)を使ってるので
SJISコードとして判定されないのが正しいとオモ
0186nobodyさん2007/08/30(木) 02:44:58ID:???
preg〜ってなんて発音してる?
0187nobodyさん2007/08/30(木) 02:46:56ID:???
ぴーしーあーるいーれげっくす
0188nobodyさん2007/08/30(木) 02:54:56ID:cbvqe7SV
>>186
プレグ


csvファイル専用関数を使うメリットってありますか?
普通のファイル操作系の関数で全然問題ないのですが
0189nobodyさん2007/08/30(木) 03:04:22ID:???
>>176
sohoスレにかえれクズ
0190nobodyさん2007/08/30(木) 03:06:10ID:???
Perl Regexの略だよね?
そうだとおもうからpとregをわけてピーレグって読んでるけど
0191nobodyさん2007/08/30(木) 03:29:17ID:???
preg_matchのことを
プレグマッテと読んでるが
人それぞれだな
0192nobodyさん2007/08/30(木) 03:31:21ID:???
matchはマッチだろ・・・
0193nobodyさん2007/08/30(木) 03:35:43ID:???
プレグマッチ
プレグマッチアール(オールだがついついアールと読んでしまう
プレグリプレイス
01941862007/08/30(木) 03:57:17ID:???
プレグが多くて安心した
0195nobodyさん2007/08/30(木) 03:59:03ID:???
犯人はヤスw
0196nobodyさん2007/08/30(木) 04:37:15ID:cbvqe7SV
require_once('config.php');

で、

Warning: require_once(1) [function.require-once]: failed to open stream: No such file or directory
Fatal error: require_once() [function.require]: Failed opening required '1' (include_path='.;C:\xampp\php\pear\')

というエラーが出てしまいます。
「No such file or directory」はファイルがないということですが、同じフォルダにその名前のファイルが存在します。
他に何か思い当たることはないでしょうか・・・?
0197nobodyさん2007/08/30(木) 04:45:29ID:???
大文字小文字とかじゃねーのw
0198nobodyさん2007/08/30(木) 04:50:46ID:cbvqe7SV
すみません、超初歩的なミスでした
or die()ってできないんですね

返り血考えるの忘れてました
0199nobodyさん2007/08/30(木) 09:58:09ID:???
殺人事件キタコレ
0200nobodyさん2007/08/30(木) 10:01:26ID:???
>>199
>>195
0201nobodyさん2007/08/30(木) 10:18:40ID:3muSx8fZ
お願いします。

PHPである項目を、セレクトボックスでの選択か、もしくは
テキストボックスへの入力にさせたいのです。

つまり、セレクトボックスでの選択かテキストボックスに入力かが
されていればOKで、両方になにもない場合のみ「選択しろ」という
エラーメッセージを出したいのですが、どうしたらいいですか?

// 営業所コード
if($_POST['g_c'] == '') {
$err_u .= '[営業所コード]が未選択です。<br>';
}
// 営業所の名前
if($_POST['g_n'] == '') {
$err_u .= '[営業所の名前]が未入力です。<br>';
}

現在エラーメッセージを出させる記述はこうなっているのですが、
この場合はどちらかが未入力・未選択でもエラーが出ます。
[営業所コード] か、[営業所の名前] どちらかが選択・入力されていればOK
というようにはどうしたらいいのか、すみませんが教えてください。
0202nobodyさん2007/08/30(木) 10:24:45ID:???
||
0203nobodyさん2007/08/30(木) 11:00:36ID:Qqw8XwhJ
array_push()に関して質問なのです
array_push()はどんな利用目的で使うのが正しいのでしょうか?
マニュアルを見る限りarray_push()をつかうなら関数を呼ぶオーバーヘッダ
のない$array[] = のほうが良いとかいてありました。
02042012007/08/30(木) 11:03:53ID:3muSx8fZ
解決しました、&& でいけました。ありがとうございました。
0205nobodyさん2007/08/30(木) 11:15:13ID:???
>>203
自分でインデックス管理して最後尾に追加するなりのコードを
書くなら$array[] =...でいんじゃね。
0206nobodyさん2007/08/30(木) 11:17:27ID:???
>>203
pop, shift, unshiftと作ってpushも作らざるを得なかっただけなので使う必要なし
配列に配列を加えるときには使ってもいいよ
似たような関数にarray_merge( )もあるけどね
0207nobodyさん2007/08/30(木) 11:44:06ID:Qqw8XwhJ
>>205-206
ありがとうございます
0208nobodyさん2007/08/30(木) 13:30:39ID:???
>>184
SJIS-win
0209nobodyさん2007/08/30(木) 14:33:45ID:OWaQUMa6
ラフなログイン認証コードを書きたいのですが
basic認証よりはセッションで管理するほうがいいですか?
0210nobodyさん2007/08/30(木) 14:38:00ID:???
>>209
basic認証はログアウトがだるくなるからやめたほうがいい
0211nobodyさん2007/08/30(木) 14:47:36ID:OWaQUMa6
ありがとうございます。
セッション使うことにします
0212nobodyさん2007/08/30(木) 17:43:29ID:bLGc1mde
http://mu-tuyukusa.arekao.jp/
良ブログ ですか?
0213nobodyさん2007/08/30(木) 18:00:15ID:???
悪ブログ ですよ?
0214nobodyさん2007/08/30(木) 18:02:30ID:???
むしろゴミブクロ
0215nobodyさん2007/08/30(木) 18:30:42ID:???
PerlからPHPに現在移行をしております。

Perlの場合、日本語や絵文字を処理することを考慮し、例えばSJISで
画面を出力する場合でも、ソースはEUC、処理内でJcode等を使用
してSJIS出力するようなことをしておりましたが、PHPの場合はどの
文字コードで書くのが一番問題等発生しにくいのでしょうか。

ご教示いただけますと幸いです。
0216nobodyさん2007/08/30(木) 18:35:39ID:???
ISO-2022-JP
0217nobodyさん2007/08/30(木) 18:36:08ID:Qqw8XwhJ
>>215
基本的なことはperlと同じ
0218nobodyさん2007/08/30(木) 18:59:53ID:???
>>217
早速のご返答、有難うございます。

PHPをよくSJISで書く方がいらっしゃるので、日本語処理関係が
充実しているのかなと多少期待してしまってました。
SJISでデータを受けてEUCに変換してSJISに戻すというのが
非常に手間だったので。。

同じくEUCで書きたいと思います。
ご教示有難うございました。
0219nobodyさん2007/08/30(木) 19:20:40ID:???
今時EUC(笑)
0220nobodyさん2007/08/30(木) 19:22:31ID:???
アルファベットを数字に変換する関数とかないでしょうか。
aaa05130
といった感じのIDを使用しているのですが、
これを一意な数字列に変換したいのれす
0221nobodyさん2007/08/30(木) 19:27:09ID:???
ord
0222nobodyさん2007/08/30(木) 19:34:26ID:???
>>219
携帯サイトを作っているのですが、ソースからSJISにしたほうが
都合いいのでしょうか。
0223nobodyさん2007/08/30(木) 19:34:43ID:???
>>219
今時、EUCというが、処理コストの関係で、
EUCにせざるを得ない現場はたくさんあるぞ。
あまり知ったかぶりするなよw
■ このスレッドは過去ログ倉庫に格納されています