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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/02/24(金) 22:05:48ID:YHkZgU8b
PHPに関するくだらねぇ質問用スレです。 
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。 

まず読め【PHP マニュアル】 
http://www.php.net/manual/ja/

本スレ【PHP】質問スレッドpart33【php】
http://pc8.2ch.net/test/read.cgi/php/1140027592/l50

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

過去スレは>>2
06966942006/03/10(金) 05:48:20ID:???
×属性型地域型JPドメイン
○地域型JPドメイン
ごめん頭回ってない。もう居ぬわ。
0697nobodyさん2006/03/10(金) 06:43:32ID:+ksaxYfx
http://php.s3.to/bbs/emoji.phps

このプログラムを調べています。

$wを何もしなくても0と1の配列に別れていますが、これはどういうことですか?


この定義していないのに配列で扱うというのは、なぜですか?これを配列で定義すると、どうに分けられた答えが返ってきますか?
0698nobodyさん2006/03/10(金) 07:00:47ID:???
>>697
$w = mb_substr($str, $i, 1, "SJIS");
って行で $w が最初に出て来てるじゃん

mb_substr でググルなりしてみなされ
0699nobodyさん2006/03/10(金) 07:04:54ID:+ksaxYfx
いや、そうじゃなくてこの0と1の変数の意味がわかんないんです。。

戻り値は普通そのsubstrされた文字なのはわかるのですが、なぜ配列になっているのかがわからないです。。
0700nobodyさん2006/03/10(金) 07:37:29ID:???
>>697
このユーザ関数の説明みたいなページは無いの?
0701nobodyさん2006/03/10(金) 08:44:51ID:???
>>697
$wがマルチバイト文字(2バイト)だから
$w[0]$w[1]にわけられる
俺はこういう場合は$w{0}を使うけどね
0702nobodyさん2006/03/10(金) 08:48:48ID:???
$w = "abcde";
の文字列に
echo $w[3]; // dが表示
のように配列でアクセスできることの応用かな
ただし文字列に配列でアクセスするときは{ }が推奨されている
0703nobodyさん2006/03/10(金) 10:50:40ID:???
これ
ttp://jp2.php.net/manual/ja/language.types.string.php#language.types.string.substr

散々出ているが、レッツ!のスクリプトは古く、
かつメンテナンスされていない物が多いので
(特に初心者は)あまり参考にすべきではないと思う
0704nobodyさん2006/03/10(金) 11:40:13ID:???
目的はアク禁なら、事前にドメインを持てばおけ。
にちゃんの解除以来板でも見て候補拾えばよろし。

ソース出したくないなら、そもそもphpは向いてないよ。
mixiみたいに設定ミスで流出の危険は常に有る。
アプリケーション鯖みたいにリクエストだけ別に投げて処理するようにしないと。
0705nobodyさん2006/03/10(金) 11:52:24ID:???
波括弧って1文字しかアクセスできないの?
0706nobodyさん2006/03/10(金) 14:56:54ID:???
ttp://php.s3.to/simple/
レッツPHPのbasic認証のパス失敗したらlog残すみたいな
スクリプト配布しているところ知りません?
0707nobodyさん2006/03/10(金) 15:36:33ID:OI9+vMb4
以下のようなソースを a.php として書いたんですが(UTF-8で)

<?
header('Content-type: text/xml; charset=utf-8');
echo('<?xml version="1.0"?>');
echo('<xmldoc><data>1</data></xmldoc>');
?>

以下のようなエラーが出てしまいます。どうしたら回避できますか?
これより前にヘッダなんか送ってなんかないよ〜。
Warning: Cannot modify header information -
headers already sent by (output started at /usr/local/apache2/htdocs/a.php:1) in
/usr/local/apache2/htdocs/yj.php on line 2
1

環境は
Apache/2.0.50 (Unix) PHP/4.4.0
です。

0708nobodyさん2006/03/10(金) 15:41:13ID:???
>>706
板違い

>>707
<? の前に空白文字(改行やスペース)が入ってるだろ
07097072006/03/10(金) 15:49:35ID:OI9+vMb4
>>708
ありがとうございます、入ってませんでした。

>>707にコピペした以外1バイトたりとも余計なものはありません。。
もちろん
<?
が1行目です。
07107072006/03/10(金) 15:50:56ID:???
あああああ。
ソースを shift_jis で保存しなおしたらでけた。
なんでだ。
0711nobodyさん2006/03/10(金) 15:53:48ID:???
>>710 保存したコードと実際記述したコードが違ったんじゃまいか?
0712nobodyさん2006/03/10(金) 16:38:26ID:???
>>707
多分BOMという余分なものが
0713nobodyさん2006/03/10(金) 16:42:27ID:???
多分爆弾がらみだろうな
0714nobodyさん2006/03/10(金) 16:47:57ID:???
UTF-8N
0715nobodyさん2006/03/10(金) 16:50:04ID:???
>>710
InternalEncodingの設定じゃまいか?
07167062006/03/10(金) 17:10:07ID:???
板違いでしたか・・・どこの板で質問がいいですか?
0717nobodyさん2006/03/10(金) 17:47:46ID:???
PHPでQRコードは生成できますか?
0718nobodyさん2006/03/10(金) 17:53:34ID:???
php qr でぐぐれ一番最初に出てくる
0719nobodyさん2006/03/10(金) 17:58:20ID:???
>>716
PHP-users ML
0720nobodyさん2006/03/10(金) 18:28:51ID:???
>>719
最低だw
0721nobodyさん2006/03/10(金) 19:06:20ID:???
>717なんかの
「PHPで〜できますか?」とか言う質問は

・PHPの組み込み関数で〜
・PHPの関連ライブラリ(pear,peclなど)で〜
・PHPの(サードパーティー)ライブラリで〜
・PHPの能力のうちで〜

のどれなのかをはっきりさせて質問するべきだと思うんだが。

>>716
Web制作orダウソ
0722nobodyさん2006/03/10(金) 19:11:18ID:???
>>721
くだ質だし、この方法なら出来るよって行ってみるしかない気も
0723nobodyさん2006/03/10(金) 19:12:18ID:???
>>722
PHPに関する知識がないのは許そう。
だが、質問者としての常識がないのはいただけない。
0724nobodyさん2006/03/10(金) 19:38:55ID:Zv8Tap21
PHP4 でスタックの実装ってありますか?
push('a');
push('b');
$b = pop();
$a = pop();
echo $a.$b;
"ab"
みたいな事がしたいのですが、どの関数を使えば良いのか分かりません。
0725nobodyさん2006/03/10(金) 19:43:10ID:???
array_push
array_pop
どうぞ。
ってか、別にいらない気もするけど。
0726nobodyさん2006/03/10(金) 19:43:21ID:???
array_push()
array_pop()
0727nobodyさん2006/03/10(金) 19:44:17ID:???
>>724
マニュアルを push で検索。
0728nobodyさん2006/03/10(金) 19:51:00ID:???
>>725
>>726
>>727
ありがとうございます。m(_ _)m
0729nobodyさん2006/03/10(金) 20:01:58ID:???
>>724の人気に嫉妬
0730nobodyさん2006/03/10(金) 20:11:45ID:???
おまいら優しいな
0731nobodyさん2006/03/11(土) 02:09:03ID:???
仕事はじめて一年になります。
何本かプログラムを作ったけどいわゆる入力まわりの、
「記入」「確認」「修正(記入と同じ画面を使いたい)」「完了」
これの条件分岐に関して、getでなんとかしたり、セッションに変な変数入れたり、hiddenで変な変数投げたりといつも、ごちゃごちゃになって、未だ自分の納得出来る方法を確立してません。
特に、確認画面から修正にもどるとこ。
これに関して、定番のロジックのフローチャートみたいなものってどこかにないでしょうか?

$_POSTが無くて、何らかの入力エラーがあったら「記入」
上記をスルーしたら「確認」
修正したい時は「記入」にもどるけど、このときはgetで。
「記入」画面で「確認画面をスキップ」にチェックを入れておいたら「確認」をスルーしてメイン処理(書き込み、DB登録やメール飛ばし)、成功したら「完了」失敗したら「エラー(このエラーはほかのエラーの場合も使う)」
こんな感じでやりたいのですが、皆さんはこの辺はどんな設計にしてますか?
0732nobodyさん2006/03/11(土) 02:22:13ID:???
drupalモジュールの開発をやってみてるんですが。
すでに定義されている変数や定数を一覧表示する関数というか方法は無いでしょうか?
0733nobodyさん2006/03/11(土) 02:29:37ID:???
開発ソフトを使う。
0734nobodyさん2006/03/11(土) 02:32:42ID:???
>>731
> 定番のロジック
HTML_QuickForm_Controller
0735nobodyさん2006/03/11(土) 02:35:55ID:???
>>732
実行中なら
get_defined_vars
get_defined_constants
ソースからなら
http://oss.moongift.jp/intro/item_624.html
0736nobodyさん2006/03/11(土) 02:44:22ID:???
>>735
ありがとうございます!
リンクのツールもかなり便利そうですね。
0737nobodyさん2006/03/11(土) 03:36:09ID:???
>>735
でPHPXrefの公式に飛んでワロタ
07387352006/03/11(土) 05:36:03ID:???
>>737
735の公式サイトのリンクはクリックをカウントしてるのか自サイトですね。
たまにエラーが出るみたい
こっちが直
http://phpxref.sourceforge.net/
0739nobodyさん2006/03/11(土) 09:40:18ID:???
みなさんは、メソッドを作成するときにpublicとpublic staticを
どのように使い分けていますか?
私はインスタンスを生成するのがめんどくさいというだけの理由でほ
とんどのメソッドでstatic宣言を使用しているのですが、これだと、
向上心がないような気がするので、みなさんの意見を聞きたいです。
0740nobodyさん2006/03/11(土) 09:51:36ID:???
>>739
> インスタンスを生成するのがめんどくさい

どんな嫌なことがあったんですか?
07417392006/03/11(土) 09:58:14ID:???
…質問されて改めて考えてみると、特に嫌なことがあったわけではな
いことに気がつきました。
嫌というよりは、例えば$example->example()でできることはstaticを
宣言すればexample::example()でもできるわけで…
つまり、みなさんがどんな使い分けをしているのかを聞きたかっただけ
なんですけが。
0742nobodyさん2006/03/11(土) 10:20:33ID:???
staticじゃexampleの中に$thisが書けないっすよ
07437392006/03/11(土) 10:26:24ID:???
>>742
確かに。でもself::が書けるのでオケィです。
0744nobodyさん2006/03/11(土) 10:35:16ID:???
>>743
え?インスタンスごとの変数はどうするの?
07457432006/03/11(土) 10:46:56ID:???
>>744
あぁ、なるほど!!
インスタンスを複数生成したことがなかったから、意識していません
でしたが、たしかに、staticではインスタンスごとの変数は扱えませ
んね。
すっきりしました。ありがとうございました。
0746nobodyさん2006/03/11(土) 13:20:18ID:???
ワロス
0747nobodyさん2006/03/11(土) 15:19:01ID:???
しょぼいSPAMフィルタリングツールを作ろうと思ってるんだけど、
文字コードが大きな壁になってます。
メールの件名を判断してフィルタリングしようと思ったら
例えば日本語ならiso-2022-jpにエンコードして設定しなきゃいけない
わけですよね?
日本語だけならまだしも他の言語で色々エンコードあると
1言語ずつ対応しなきゃいけないわけで
非常にだるそうなんですが、なにか良い方法ないでしょうか?
0748nobodyさん2006/03/11(土) 15:21:09ID:???
>>747
やる気がないんだったらカエレ!
0749nobodyさん2006/03/11(土) 15:33:48ID:???
ftp_chmodってphp5からしか使えないのね、
そのユーザの権限でchmodしたいので
ftp_chmod使うつもりだったんだが。
php5入れる以外で代替法ないですかね・・・orz
0750nobodyさん2006/03/11(土) 16:01:31ID:???
PEAR::Net_FTP#execute("chmod 755 something.txt")
0751nobodyさん2006/03/11(土) 16:02:19ID:???
>>749
http://jp.php.net/manual/ja/function.ftp-chmod.php
下の投稿に代替案みたいなのが載ってる
0752nobodyさん2006/03/11(土) 17:44:19ID:???
>>747
対応が必要なんだったら、そのだるい方法しかないよ。
前以てフィルタワードを各エンコーディング毎に用意しとくてもあるけど。
0753nobodyさん2006/03/11(土) 18:09:37ID:???
>>747
日本語と英語ぐらいしか来ないんだったら、マルチバイト関数のautoである程度行けるけどね
0754nobodyさん2006/03/11(土) 18:53:48ID:???
>>751
ftp_siteを使えば言いわけね。
俺はお前に土下座するくらい感謝してる、本当にありがとうございます
0755nobodyさん2006/03/12(日) 00:18:43ID:???
>>751
セキュリティ的にはローカルのFTPにアクセスするだけなら安全なのかな
ネットワークを介すとFTPってのはちょっと怖いよね・・
0756nobodyさん2006/03/12(日) 09:25:46ID:???
Strict Standards:
Assigning the return value of new by reference is
deprecated in PEAR.php on line 557

line 557: $a = &new $ec($code, $mode, $options, $userinfo);
line 558: return $a;

PEAR/Auth.phpを読み込んだら、上記のようなエラーが複数出力されました。
これは、どのような意味のエラーなのでしょうか。
また、E_STRICT設定でもエラーが出ないようにするための対処方法も教えて
いただけると助かります。ご回答よろしくお願いします。
07577562006/03/12(日) 10:05:41ID:???
$new を clone に書き換えたらエラーはでなくなりました。
失礼いたしました。
0758nobodyさん2006/03/12(日) 10:30:23ID:???
MySQLのテーブルにPHPスクリプト内で作った配列を「そのまま」入れることって出来ますか?
大垣本で調べたけど、Postgreの関数しか見つかりませんでした。

MySQLでは配列を配列のまま格納することは出来ないんでしょうか・・・。
もしそうなら、みなさんは配列のデータをどう分解してMySQLに収めるのがベストだと思いますか?

僕が考えているのは、たとえば$hairetu[1]〜$hairetu[50]まで50個の値が入ってるとして、
順にfor文で添え字1から取り出していって、DB格納用の変数$DBに入れて「:」などの記号を挟んで
「.」で連結していき、その$DBをMySQLテーブルの「text」フィールドに入れます。

もっとスマートなやり方などはありますでしょうか?
0759nobodyさん2006/03/12(日) 10:32:15ID:???
自己レスですが、上記のやり方だと
連想配列やキーが連続した数字ではない配列では
使えない手法ですよね。
0760nobodyさん2006/03/12(日) 10:36:46ID:???
serialize()使ってる
0761nobodyさん2006/03/12(日) 10:50:11ID:???
phpの公式マニュアルに、

説明
bool isset ( mixed var [, mixed var [, ...]] )

のような表記があります。

この場合は単純なのですが、こういった表記の 「mixed var」や括弧の意味などの凡例は
どのページに明記されているのでしょうか?
07627582006/03/12(日) 10:59:21ID:???
>>760
すみません、「神」と呼んでいいですか?
0763nobodyさん2006/03/12(日) 11:05:08ID:???
>>761
ttp://www.php.net/manual/ja/about.prototypes.php
0764nobodyさん2006/03/12(日) 11:49:30ID:???
>>757
どっかのversionからnewがデフォルトで参照を返すようになったらしい
つまり & new の & が余分
0765nobodyさん2006/03/12(日) 12:20:38ID:LBgD1ivZ
PHPのセッションは
クッキーが有効ならクッキー、
有効でないなら、URLに自動的に付加されますが、
スクリプト側で、セッションにクッキーが使用されているか否かを知るには
どうすればいいですか?
07667612006/03/12(日) 12:22:42ID:???
>>763
ありがとうございます
07677652006/03/12(日) 12:28:39ID:???
あー分かりました
$_COOKIE[session_name()]の有無を調べればいいんですね。
今までセッションの挙動がいまいち分からなかったのですが
PHP側で裏でいったんリダイレクトしてたんですね。
0768nobodyさん2006/03/12(日) 13:02:06ID:???
え?リダイレクトなんてしてない筈だよ。
> URLに自動的に付加
ってことだから、use_trans_sidを使ってると思うけど、
初回のレスポンスはcookieとURL付加の両方をやって
次のアクセス時のリクエストにcookieが含まれていればcookieだけ使うって感じじゃなかったっけ?
0769nobodyさん2006/03/12(日) 13:16:51ID:???
>>768
yes
07707682006/03/12(日) 14:11:57ID:???
>>768
なるほど、最初は両方するんですね。
クッキー判定をするために裏でやっているのだと思ったのですが
そういうことでしたか。
ありがとうございました。
0771nobodyさん2006/03/12(日) 14:38:24ID:???
たとえば、us000999 のような文字列があって、
その次「us001000」を取り出したいのですが、
スマートな方法はないでしょうか?

現在は、力ずくで、文字を分解して、+1して、桁数を数えて…。
見たいな事をしています。
よろしくお願い致します。
0772nobodyさん2006/03/12(日) 14:59:59ID:???
>>771

<?php
$str = 'us000999';
echo $str, PHP_EOL;
$str++;
echo $str, PHP_EOL;
?>

結果
us000999
us001000
0773nobodyさん2006/03/12(日) 15:03:46ID:???
あ、ありがとうございました…。
なんか、苦労してたのがバカみたいです…。
PHP万歳
0774nobodyさん2006/03/12(日) 15:08:52ID:???
>>772
これはびびった。PHPスゲーな。
0775nobodyさん2006/03/12(日) 15:20:19ID:???
すごいけど
逆に怖い気もする
0776nobodyさん2006/03/12(日) 15:44:43ID:???
その辺はPerlのパクリ。
そんなに怖がることもない。
0777nobodyさん2006/03/12(日) 15:45:33ID:whEzuZdE
echo "<a href=\"hoge.html\">ほげほげ<\/a>";

このように</a>のスラッシュはエスケープした方がいいですか?
0778nobodyさん2006/03/12(日) 15:51:39ID:???
>>777
特に展開の必要がないときは、シングルで括れば?
エスケープせずにすむし。
0779nobodyさん2006/03/12(日) 15:52:00ID:???
>>758
似た様な事をやろうとして頭を悩ませてる。
serialize()でやった場合、そのデータをphpmyadminなんかでちょっといじりたいって時にそのserializeしたデータはどんな風に見えるんだろう?
「はてなブックマーク」のタグ的な仕組みを作ろうとしてるけど、こんな場合はやっぱり、区切り文字入れてフィールドに格納。
読み出したときにばらして配列に入れてごにょごにょ、っていうほうが楽そうな希ガス
0780nobodyさん2006/03/12(日) 15:53:19ID:???
>>777
/のエスケープ?何のために?
0781nobodyさん2006/03/12(日) 15:54:07ID:???
>>778
藻前ら、シングル、ダブルどっちでもいい状況のときって、どっち使いますか?
漏れはなんとなくダブル使う。
0782nobodyさん2006/03/12(日) 15:54:49ID:???
>>779
実際にserializeしたのを出力してみればいいじゃない。
区切り文字でくっつけたのと似たような感じで文字列化されてるよ。
0783nobodyさん2006/03/12(日) 15:55:33ID:???
>>781
微妙に速いのでシングルを使ってる。
0784nobodyさん2006/03/12(日) 15:56:36ID:???
>>781
シングルを使う
0785nobodyさん2006/03/12(日) 15:58:34ID:???
>>779
呼び出したときunserializeすればいいだけだが
0786nobodyさん2006/03/12(日) 16:34:26ID:???
>>772
それ、$strが'us999999'までいくと次が'us000000’になるのか。
挙動をちゃんと覚えりゃ、なかなか使えそう。
07877862006/03/12(日) 16:36:24ID:???
うわ肝心なとこ書き換えてなかった...
'us000000’→'ut000000’。戻ってどないすんねん
0788nobodyさん2006/03/12(日) 16:53:19ID:???
(´・ω・`) 知らんがな
0789nobodyさん2006/03/12(日) 16:59:52ID:???
>>772
PHP_EOLってのは環境によって適した改行を勝手に表示って事?
0790nobodyさん2006/03/12(日) 17:19:10ID:???
>>783
前に質問スレでその話題でベンチ計ったけど、エスケープや変数展開がない場合は全員ダブルの方が僅かに速かったよ。
0791nobodyさん2006/03/12(日) 17:22:50ID:???
どんなスクリプトでテストしたの?
処理量はシングルの方が少ないから
テストの方法が悪いか、その他の要因が働いたとしか思えないのだが。
0792nobodyさん2006/03/12(日) 17:45:55ID:???
>>790
とりあえず、100桁の文字(エスケープも変数も含まない)を
10000回printする、ってやつを30回くらい交互に実行させてみた。
結果としては
「不定期に一方が誤差程度に勝つだけで毎回勝敗が違う。故に両者に速度差はほぼ無いと言える」
となったよ。
>>791
なんかPHPってそこの処理はちゃんと最適化してないのかダブルがよっぽど最適化されてるのか
変数の有無で同じ関数使うようにしてるのか知らないけど、シングルだから処理少ないってことはなさげ。
07937922006/03/12(日) 17:53:12ID:???
さらにprintしないで変数に格納するだけってのと、変数にも入れないでただ評価するだけ、
ってベンチマークもやってみた。(printの方が処理コスト大きいんで誤差が把握しにくかったので)
でもいずれも結論としては同じ。どっちが速いみたいな差は全然ない。ほんとに誤差しか違わない。
0794nobodyさん2006/03/12(日) 18:39:00ID:???
('A')
0795nobodyさん2006/03/12(日) 19:02:50ID:???
フォームからPOSTした値(ラジオボタン選択値など)をスクリプトで受け取ったとき、
値に何らかの問題や未入力部分があったときにブラウザの「戻る」ボタンで戻らせたいです。

このとき、あるサーバでは、「戻る」でフォーム画面に戻ると、さきほど入力した値が残っています。
しかし別のサーバで同じスクリプトを置いてみたら、「戻る」でフォームの値がクリアされてしまっています。
これは恐らくphp.iniの設定の違いだと思うのですが、どの設定を直せばいいのでしょうか・・・??
0796nobodyさん2006/03/12(日) 19:20:07ID:???
>>795
残ってる場合 -> ブラウザのキャッシュが使われている(つまり、鯖へのアクセスも無し)
クリアされている場合 -> 鯖から新規取得されている(鯖へのアクセス有り)

てなわけで、キャッシュ周りの設定をチェック(やポリシーの決定を)すれば良いよ。
■ このスレッドは過去ログ倉庫に格納されています