トップページphp
990コメント299KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/05/03(土) 22:52:16ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは970が立ててください立たなかった場合は980よろ

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 67
http://pc11.2ch.net/test/read.cgi/php/1207863515/
◆質問する時の注意
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を必ず明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくはトリップをつける事。

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

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0786nobodyさん2008/05/20(火) 12:40:09ID:???
標準出力への出力を文字列として取り込むことってできますか?
つまりこんな関数があるとき、

function hoge() {
echo "hogehoge";
}
$a = `hoge()`
// $a = "hogehoge" となる

ということがやりたいのですが。
0787nobodyさん2008/05/20(火) 13:08:12ID:???
>>786
http://jp2.php.net/manual/ja/book.outcontrol.php
0788nobodyさん2008/05/20(火) 13:13:01ID:???
>>784
そのページよりは
http://www.php.net/manual/ja/language.operators.php
の方がいいでしょ。

代入演算子は right結合だから
$a = $b = $c は $a = ($b = $c) として評価
07897862008/05/20(火) 15:14:45ID:???
ありがとな解決した
0790nobodyさん2008/05/20(火) 20:01:58ID:???
すいません、質問です。
echoで自分の定義したオブジェクトを指定した場合に特定のメソッドの結果を返させたいのですが、どうやれば良いのでしょうか。

例:
($barはfooクラスのインスタンスであるとして)
echo $bar;
ってしたときに
echo $bar.toString();
のような動作をさせたいのですが。
0791nobodyさん2008/05/20(火) 20:09:02ID:???
あわわ、javaのつもりで書いてしまった。
正しくは
echo $bar->toString();って感じです。
echoが通常呼び出す文字列変換メソッド?を書き換えられれば良いのでしょうか。よくわかりません。
0792nobodyさん2008/05/20(火) 20:28:34ID:???
toString()が文字列返せばいいだけでわ?
0793nobodyさん2008/05/20(火) 20:41:24ID:???
toString()略したいんです。明示的に変換が必要な場合はともかく、
デフォルトではなんかのインターフェイスを呼んでおいてほしいです。toString()が存在するかどうかすら隠ぺいしておきたい。
なるべくソースコードをすっきりさせるために…
0794nobodyさん2008/05/20(火) 20:42:27ID:???
オブジェクトをStringにキャストするのが間違ってる
これは明示的に変換が必要なケースだろ
0795nobodyさん2008/05/20(火) 20:48:21ID:???
PHP5なら__toStringで可能かもしれない
0796nobodyさん2008/05/20(火) 20:51:10ID:???
これだな。
http://jp.php.net/manual/ja/language.oop5.magic.php
0797nobodyさん2008/05/20(火) 21:08:54ID:???
>>796
おお、まさにこれです! ありがとうございました!
0798nobodyさん2008/05/20(火) 22:17:15ID:aFyFy0AF
shift_jisのxmlファイルをfile_get_contents()で変数にいれて
mb_convert_encoding()でShift_JIS→UTF-8に文字コードを変換して
simplexml_load_string()でxmlのデータを扱うおうとしてるけどエラー出るから助けてくれ

エラーは「Entity: line 1: parser error : switching encoding: encoder error」って出てるけどエンコード系でダメなの?

コードは下な感じ
<?php
$_xmlFile = file_get_contents( "etc.xml" );
$_xmlFile = mb_convert_encoding( $_xmlFile, "UTF-8", "Shift_JIS" );
$_xml = simplexml_load_string( $_xmlFile );
?>

ググッたらsimplexml_load_string()はUTF-8でないとダメ!って見つけてこうやってんだけど
他に何かありますか?
0799nobodyさん2008/05/20(火) 22:22:38ID:???
xml見せてみ
0800nobodyさん2008/05/20(火) 22:37:15ID:aFyFy0AF
xmlは下な感じ。実際わ<no_xxx></no_xxx>がもっと続いてる
xmlは別のjavaプログラムからShift_JISで出力してる

<?xml version="1.0" encoding="Shift_JIS" ?>
<data>
<no_001>
<date>2008/05/20</date>
<comment>あいうえお</comment>
</no_001>
</data>

>>798のmb_convert_encoding()の返り値の$_xmlFileを
var_dump()でみたら2バイト文字は文字化けしてないんですけど・・・
エラー的には1行目がおかしい?(文字コード関係?)
0801nobodyさん2008/05/20(火) 22:42:19ID:???
encoding="Shift_JIS"って言ってるのにUTF-8のxml送り込んだらそりゃPHPタンも困るんでは・・・
0802nobodyさん2008/05/20(火) 22:48:54ID:???
>>798
"Shift_JIS"だっけか?
"sjis"じゃね?
0803nobodyさん2008/05/20(火) 23:21:06ID:???
>>798
XMLファイルの中でエンコードが指定されてるから、ファイルの文字コードが正しければ、
mb_convert_encoding は不要。
0804nobodyさん2008/05/20(火) 23:38:22ID:???
レスあり

>>801
Shift_JISで出さないとxmlファイルの一部が文字化けしちゃうんだよね
mb_convert_encoding()がなんとかしてくれると思ったんだが

>>802
試してみたが"sjis"でも変わらなかった


>>803
実はxmlファイルをjava側で出力してる時に全角ハイフンの文字化け対策で
ファイル出力のときの文字コード指定はWindows_31Jにしてるんだけど・・・それが原因だったりするのかな(文字コードが合ってないってことで)
文字化けしてないんで大丈夫と思ってるんだけど(xmlにはWindows-31J指定できないんでShift_JISにしてる)
0805nobodyさん2008/05/20(火) 23:46:18ID:???
>>804
>xmlにはWindows-31J指定できないんで

これ本当?Windows-31J は IANA文字コードセット名だから使えて良い気がするんだけど。
PHPもサポートしてるし。
http://www.php.net/manual/ja/mbstring.encodings.php

とりあえず全角ハイフン無しのデータ作って読み込めるところまでやった方が良いんじゃね。
0806nobodyさん2008/05/20(火) 23:50:24ID:rMEOfKkX
リファレンス元をunsetしても、リファレンス先がunsetされません。
これはどのように理解すればいいでしょうか?

$a = 'hoge';
$b =& $a;
var_dump($b);

$a = 'poge';
var_dump($b);

unset($a);
var_dump($b);

0807nobodyさん2008/05/21(水) 00:01:15ID:???
>>806
ほいほい
http://jp2.php.net/manual/ja/language.references.unset.php
08087862008/05/21(水) 00:02:21ID:???
>>787
他のob_関数を使っているときなど完璧ではないようですが、
これしかないのでしょうか。ありがとうございます。
08097822008/05/21(水) 00:47:56ID:???
>>783-785
ありがとう
助かりました ほんとにありがとう<(__)>
0810nobodyさん2008/05/21(水) 01:40:53ID:???
静的なクラスのメソッド内で、自分のクラスの情報って得る子と出来ますか?
名前とか。
0811nobodyさん2008/05/21(水) 01:57:50ID:???
>>810
あんまりマトモなやり方じゃないが debug_backtrace で一応取れる。
マトモな方法があったら自分も知りたい。

http://jp.php.net/manual/ja/function.debug-backtrace.php

0812nobodyさん2008/05/21(水) 01:58:57ID:???
良く考えたら __CLASS__ で十分な気がしてきた。
0813nobodyさん2008/05/21(水) 02:29:38ID:???
getで送信したphp内のheaderでheader("Location: $url");にtarget_blankを指定するにはどうすればよいでしょう?
0814nobodyさん2008/05/21(水) 02:55:49ID:???
ちょw
0815nobodyさん2008/05/21(水) 03:08:53ID:???
>>812
おおおおお、って思ったけど、継承使うと基底クラスの名前でるんだよね。
0816nobodyさん2008/05/21(水) 09:04:09ID:???
>>815
class BOO {
static function booo() {
}
}

class FOO extends BOO {
}

FOO::booo();

で、booo関数内で "FOO" を取得したいという意味なら、キビシイ気がする。
多分無理なんじゃなかろうか。
0817nobodyさん2008/05/21(水) 12:23:44ID:???
ファイル別にしてなら面倒だけど出来なくもないんだけどね。
でもそれだと意味が無いよなぁ。

User::Create();
とかやりたいけど。Factoryでいいか。
0818nobodyさん2008/05/21(水) 13:42:40ID:8D+5rC/5
非統合型メタ検索ってありませんか?
簡単そうだからみんな作らないのかな・・・
利用するだけの俺にはサッパリだが。

作り方の載っているサイトでもいいのでどなたか教えてください。
0819nobodyさん2008/05/21(水) 14:20:55ID:???
staticなクラス名云々は5.3から新しい機能が実装されるから
それまで待つ
0820nobodyさん2008/05/21(水) 17:51:04ID:7+lnnayN
すみません、聞きます

mysqlにデータを登録するとき、<p style="color:red;">A</p>のような文字列を入れたい場合は
htmlspecialchars()をすべきなんでしょうか?
addslashes()でやったところ上手くいかなかったのですが、html〜をしたら上手くいきました
でも、本を読むとhtml〜は引き出したデータをhtmlに出力するときに使うものと
あるので、変なことをしている(どこかに手違いがある?)のかと心配になっています。
どうなんでしょうか?
環境はphp5 mysql5 apache2です
よろしくお願いします
0821nobodyさん2008/05/21(水) 17:59:21ID:???
>>820
マイエスキューエルリアルエスケープストリングを使う
0822nobodyさん2008/05/21(水) 18:00:21ID:???
本が正解

addslashedで何がダメだったのか不明だが、prepareを使うとか
mysql限定でいいならmysql_real_escape_stringとかそのあたりで好きなの使え
0823nobodyさん2008/05/21(水) 18:31:09ID:???
文字のエンコードによってはどうのこうの、だったよな。
忘れたけどとりあえず>>821-822でFA
0824nobodyさん2008/05/21(水) 22:41:35ID:2LrwwB21
質問です。

prototype.jsのAjax.Requestを用いてPHPから値を取得したいのですが、PHP側からはどのように値を返せばよいのでしょうか?

例として、js側は…

new Ajax.Request(
  'return.php',
  {
    method: 'post',
    parameters:Form.serialize(this),
    onComplete:function(request){
      alert(request.responseText); // ここの受け取り方もいまいち自身がありません…
    },
  });

とすると、return.php側ではどのように返せばよいのか…単純に return "foo"; ではダメでした。
よろしくお願いします。
0825nobodyさん2008/05/21(水) 22:45:04ID:???
>>824
echo "foo"

まあ普通はJSON形式の文字列を返すけど
0826nobodyさん2008/05/21(水) 22:48:37ID:???
あ…標準出力なんですね。ありがとうございます!
0827nobodyさん2008/05/21(水) 22:56:12ID:???
というか、ウェブアプリは標準出力しか返せないからw
レスポンスコードとかヘッダとか一部の小さいやつ除く)
0828nobodyさん2008/05/22(木) 00:11:42ID:b0IxLnKb
教えてください
メールで画像を送ったら縮小されてまたメールで帰ってくるcgiかphpとかありますか?
かなり困ってます!
0829nobodyさん2008/05/22(木) 00:42:00ID:???
あります
0830nobodyさん2008/05/22(木) 01:35:10ID:6+GQhqgH
超初心者です。

sakuraのレンタルサーバ借りてるのですが、簡単なお小遣い帳のCGIがありましたら、ご教授ください。
0831nobodyさん2008/05/22(木) 01:54:57ID:???
探してます系はスレ違いです
このスレは作る人を対象としたスレです
0832nobodyさん2008/05/22(木) 02:58:49ID:???
お小遣い帳のCGIってなんだよw
0833nobodyさん2008/05/22(木) 03:40:10ID:???
いいな。お小遣い帳CGI。
いついつにいくらお小遣いをもらったとか、次の日にママンに内緒で銀行からお金振り込んで
モリタポ買っちゃったとか、そういうのを書き留めておきたいと。で、世界中に公開したいと。

ずっと前にWeb制作板の「こんなCGI探してます」スレが埋まって、
誰も次スレを立てないまま現在に至ってるからこうなるんだろうか。
0834nobodyさん2008/05/22(木) 12:16:13ID:AwS6iPvU
dateの逆関数がほしいです

$timestamp=***("Y年m月d日",$date);
みたいな。
strtotimeは規定の形式じゃないといけないですし
なんか無いですかね?
0835nobodyさん2008/05/22(木) 13:01:01ID:???
mktime
0836nobodyさん2008/05/22(木) 13:01:28ID:mji3QyC6
>>834
fscanf()
0837nobodyさん2008/05/22(木) 14:16:54ID:???
>>836
fscanfが壊れています
0838nobodyさん2008/05/22(木) 14:51:56ID:???
number_formatを使ったときに「-0.8」などは
「-0」と返ってくる。
0の時はマイナスが要らないのだけど、どうすりゃいいの?

正規表現で-0だったらreplaceで0にするとかやるの?
どうカクのよ
0839nobodyさん2008/05/22(木) 15:02:27ID:???
>>838
number_format(round(-0.8, 0))
とか
08408382008/05/22(木) 17:35:01ID:???
>>839
ありがとう!
デキターーー
0841nobodyさん2008/05/22(木) 20:30:37ID:pnGKUbbW
Thu May 22 20:30:37 +0000 2008 みたいな日付フォーマットを変換してくれる関数とかないかな?
半角スペースでsplitかexplodeしろって話かな…
0842nobodyさん2008/05/22(木) 21:31:21ID:???
>>839はまずいだろw
0843nobodyさん2008/05/22(木) 21:41:35ID:???
>>841
strptime
ただし環境による
0844nobodyさん2008/05/22(木) 21:55:54ID:???
>>841
strtotime
08458202008/05/22(木) 23:01:35ID:???
>>821-823
すごく遅れてすみません、アドバイスありがとうございました
参考にして勉強します、ありがとう
0846nobodyさん2008/05/22(木) 23:24:56ID:???
ある関数の中でオブジェクトを生成して、それを return で返す場合、
そのまま返すのと、&を付けて参照で返すのと、違いってありますか?
例えば、以下の2つの関数で戻り値に何か違いはあるでしょうか?

function &bar1(){
$obj = new Foo();
return $obj;
}

function bar2(){
$obj = new Foo();
return $obj;
}
0847nobodyさん2008/05/22(木) 23:51:32ID:???
>>842
自分は、>>838 でも >>839 でもないけど、そのやり方のどこかマズイの?
マジわからん。
0848nobodyさん2008/05/23(金) 00:12:31ID:???
number_formatでdecimalを省略してる場合は>>839でもいいけど、そうでない場合がマズイってことじゃね?
0849nobodyさん2008/05/23(金) 00:20:03ID:???
>>848
-0.8 が -0 になるって時点で、小数部の桁数は0 なのは自明じゃないかって思ってたんだけど、
そういう理解でいいのかな。

どうもありがとう。
0850nobodyさん2008/05/23(金) 00:56:38ID:AusPFJ9q
$sql = "SELECT FROM no_url WHERE url='$url'";
$res = mysql_query$sql,($conn);

if(mysql_num_rows($res)==1){
echo "そのURLは登録できません";
}

と言うように、MySQLで禁止URLリストの中を検索して
URLが一致すればエラーメッセージを出したいです。
ただ、URLの書式が「http://hogehoge.com」「http://hogehoge.com/
と、/を付けるか否かだけでも違うURLと見なされてしまいます。

どのようにしてURLチェックをすればよろしいのでしょうか?
0851nobodyさん2008/05/23(金) 01:00:17ID:???
正規表現
0852nobodyさん2008/05/23(金) 01:01:00ID:???
いやらしい
0853nobodyさん2008/05/23(金) 01:11:26ID:???
>>849
>>849がおそらく想定しているであろう仕様の範囲内だったら、>>839でも問題ないです。
ただ、「-0だったら0にする」という目的に対しての>>839は、
後々いろんな副作用に悩まされるかもね。と言いたかったわけです。
0854nobodyさん2008/05/23(金) 01:20:04ID:h/rWmUOt
検索キーワード"+"や"<"をinputに入れても、ちゃんと引数が渡されない。
どうしたらよいんでしょうか? 他には大文字記号が文字化けする。
エンコードはSJIS→SJIS
0855nobodyさん2008/05/23(金) 01:38:00ID:???
>>853
どうもありがと。
良く見たら質問がおかしいな。 -0.8 だったら -1になるし。-0.08の間違いかね。

>>854
何がどう渡らないのか、サンプルコード載せたら?
0856nobodyさん2008/05/23(金) 01:47:42ID:kzFC2aJn
<?php
$strPsList = passthru('/bin/ps ax');
?>

linuxのpsコマンドの結果を変数に代入する処理です。

変数へきちんと結果が格納されるのですが、
コマンドラインで上記のファイルを実行すると
ターミナル上にもpsコマンドの結果が表示されて困ってます。。
どうすれば解決するでしょう??

0857nobodyさん2008/05/23(金) 01:47:51ID:1yGfTtCF
Fatal error: Smarty error: the $compile_dir 'templates_c' does not exist, or is not a directory. in C:***
って何のエラーを言っているんですか?
0858nobodyさん2008/05/23(金) 01:55:41ID:nxQoYtgS
すみません、クダ質ですが
echo "<input type=\"hidden\" value=\"htmlspecialchars($_POST['var'])\" />";
っていう表現、できないんでしょうか?
0859nobodyさん2008/05/23(金) 01:56:32ID:???
>>856
popenじゃダメなの?
0860nobodyさん2008/05/23(金) 02:39:08ID:???
>>857
訳した通り
>>858
エスケープかシングルクオーテーション
0861nobodyさん2008/05/23(金) 02:54:11ID:h/rWmUOt
>>857
コンパイルファイルが見つからない。
つまり構文エラー
0862nobodyさん2008/05/23(金) 02:57:03ID:h/rWmUOt
>>857
コンパイルされてない
0863nobodyさん2008/05/23(金) 03:06:14ID:???
大丈夫か
0864nobodyさん2008/05/23(金) 03:11:13ID:???
>>857
'templates_c' does not exist
0865nobodyさん2008/05/23(金) 08:43:10ID:???
>>858
echo "<input type=\"hidden\" value=\"".htmlspecialchars($_POST['var'])."\" />";
0866nobodyさん2008/05/23(金) 13:40:51ID:z2YBLdy6
PEARのPagerについてです。
Googleの検索結果のようにxx件中 yy-zz件表示というのをやりたいのですが、
xx件中はPager::numItems()で解決したのですが、現在の表示位置(yy-zz)を返してくれる関数がありませんでした。

何かうまい具合に解決する方法を教えて下さい。
0867nobodyさん2008/05/23(金) 14:14:41ID:Yvld99GN
perPageとgetCurrentPageIDから作れば
0868nobodyさん2008/05/23(金) 14:20:25ID:???
Pager::getLinks()にお任せでも良いような気がするけど
0869nobodyさん2008/05/23(金) 14:21:08ID:???
何かぴったりの関数があったんですが非推奨なので迷ってます。
0870nobodyさん2008/05/23(金) 15:36:18ID:zGb3lfL6
至急

web経由でfaxを送信したいのですが、
どのようにすればいいですか?
fax機とwebサーバー機は接続されています。
webサーバー機から通常のfax印刷で送信することは可能です。

大変申し訳ないのですが、急いでいますので詳しく教えて下さい。
0871nobodyさん2008/05/23(金) 15:44:57ID:???
faxとサーバはどう接続されているんだ。
急いでるんだ、早く答えろ。
0872nobodyさん2008/05/23(金) 15:45:05ID:???
急いでるのならFAXサーバを買うとかASPサービスを使うとかあるだろ
0873nobodyさん2008/05/23(金) 16:13:21ID:zGb3lfL6
ご回答ありがとうございます。
faxとサーバーはLANで接続されていて、
例えばサーバーから印刷する際に、プリンターをfax機(複合機)を選べば、
電話番号の画面が出て、入力するとfaxが普通に送れます。

それを、このwebサーバーにつながっているブラウザクラインとから、
ボタンを押すと、特定のデータをfaxとして送信できる、とまぁこういう訳です。
宣しくお願いします。結構急いでいます。
0874nobodyさん2008/05/23(金) 16:19:57ID:???
そんなに急いでるんだったら、2chで相談せず業者に金払って
教えてもらえばいいと思うんですよね。
0875nobodyさん2008/05/23(金) 16:21:52ID:zGb3lfL6
ちょーーー、このレスの存在意義を全否定するレスww
0876nobodyさん2008/05/23(金) 16:23:55ID:???
どこも全否定しとらんだろ
時間は金で買うもんだよ、坊や
08778742008/05/23(金) 16:31:42ID:???
「大至急!カンマで区切られた文字列をひと区切りずつ配列に代入するような関数を探しています。
 とにかく急いでるんですが困っています。急ぎですので早急に回答お願いします」

という質問だけのスレなら、確かに存在意義を全否定したことになるんでしょうけど。
0878nobodyさん2008/05/23(金) 16:45:06ID:???
>>870
回答が欲しいのは分かりますが、
「至急」
と要求するのはマナー違反ですよ
0879nobodyさん2008/05/23(金) 16:49:54ID:???
つか 至急どうにかなる問題じゃないよね
>870がどう考えてるか知らんが、結構大変
>872が正解だよ
0880nobodyさん2008/05/23(金) 17:01:25ID:zGb3lfL6
至急と書いたのはすみませんでした。

ただやりたいことは、
サーバー側でブラウザからのリクエストデータに特定のキー(fax送信要求コマンド)と値(fax番号)が入っていたら、
サーバーに繋がっているネットワーク対応のfax複合機にfaxをしろと
命令をphpからだす方法が分かればいいだけですので、なんとかなりませんでしょうか?
0881nobodyさん2008/05/23(金) 17:12:19ID:zGb3lfL6
ちなみに、どうしてこんな仕様になっているかというと、
本日行われたクライアントの本社の沢村という店舗運営統括部長が、
どうせなら本社のパソコンからボタン一発で各店舗にfaxを流せないか、
という一声でこうなりました。
「全部、電線で繋がっているんだから、後は電気信号をうまく出せばいいだけの問題だろ?」と言われて、
「確かにそうですね。来週のリリースに乗っけておきます」と返事をしてしまったのですが、
帰ってやり方がわからず困っています。
0882nobodyさん2008/05/23(金) 17:18:51ID:???
しゅくだいはじぶんでとこうね
0883nobodyさん2008/05/23(金) 17:26:10ID:???
わからない事は持ち帰って検討させていただきます、が基本だろう
ちなみにできないと思っても最初の返答は一緒だが
0884nobodyさん2008/05/23(金) 17:44:42ID:???
>>881
必死なのは伝わるけど名前出してリアルを再現しても答えてもらえるというわけじゃないよ。
>webサーバー機から通常のfax印刷で送信することは可能です。
これがカギでしょ。どういうコマンドを裏で叩いてるかわからないことにはどうしようもない。

>>883
持ち帰りは情報流出になりかねないからどんな些細なことでも禁止されてるんじゃない?
0885nobodyさん2008/05/23(金) 17:53:47ID:???
>>884
あ、クライアント常駐の派遣やSESだとそうだね
その場合は単純に検討してみますでいいんだけど

帰ってやり方が云々って書いてあるから、社外打ち合わせの場の話かと思って
■ このスレッドは過去ログ倉庫に格納されています