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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/08/06 15:44ID:paJ4kjjQ
・PHP全般の質問スレです。
・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。


■本家
 http://www.php.net/

■日本 PHP ユーザ会
 http://www.php.gr.jp/

■PHP マニュアル
 http://www.php.net/manual/ja/

■PEAR マニュアル
 http://pear.php.net/manual/ja/

過去スレ, 関連スレ等>>2-4


抜けているものがあったら補足願います
0455444,445,44604/08/15 22:31ID:???
なんで勝手にファイルが作られるかねぇ・・・
0456nobodyさん04/08/15 22:36ID:???
PHPでperlのサブルーチンと同じような機能ってやっぱりfunctionでしょうか?
0457nobodyさん04/08/15 22:44ID:???
>>456
でつ。
045845604/08/15 22:52ID:???
>>457
レスありがとうございます。
0459Imo ◆.jC7ANgFY. 04/08/15 23:03ID:???
>>454
preg_match('/[^\w]/', $_GET['mode']) and die('不正クエリ');
これくらいの勢いでもいいんじゃないかってこと。

どうしても"/"や"."がいるのだったら
strpos('../', $_GET['mode']) === false or die('不正クエリ');
$_GET['mode']{0} == '/' and die('不正クエリ');
とかいろいろ試してみるとよろし。その場その場にあった処理が必要だと。
# 上の例は上位ディレクトリを参照させないようにする処理
# 下の例は直接変数と使う場合以外はいらないが、絶対パスを防ぐ処理

それと、いろいろとやっかいなのが"\x00"の処理。
phpでは大丈夫(なはず)だけど気になるので、
$_GET = array_map(create_function('$a',
'return str_replace("\x00", "", $a);'), $_GET);
こんな感じであらかじめ省いておくと安全かもしれない。
# $_POSTや$_COOKIEの時も同様にしておくといい
# 場合によれば改行系列も省いた方がよい場合がある
0460nobodyさん04/08/15 23:08ID:???
preg_match('/[^\w]/', $_GET['mode']) and die('不正クエリ');
0461nobodyさん04/08/15 23:48ID:???
>>459
参照先ディレクトリの制御に限った話でつか。

それは誤動作誘発に通じるルートを叩き潰すって発想で付加的な話。
基本はルートを掘られて利用されるような脆弱性をつくらない事なのでは。
という話も出しておきまつ。初心者が佃煮状態みたいなんで。

- safe_mode を使う
- ライブラリ単体で動作させない (require/include で結果を返すような書き方をしない)
- 外部ライブラリはそれ自体をセキュアな作りにする

とか。定石と普段からの意識とバッドノウハウの排除。
0462カポコン04/08/16 00:33ID:???
色々、試すのはいいけど、試されないように・・・。
0463nobodyさん04/08/16 02:30ID:vS77LDZv
お盆もおわっちゃいましたけど、いかがお過ごしですかw

えと。
127.0.0.1/hoge/ で「hoge」ディレクトリーを作るのなら
mkdir(hoge,0777);で作れるけど、
例えば、127.0.0.1/hoge/hogehoge/hohoge/
でこの「hohoge」を作るにはまず上層の「hoge」と「hogehoge」を作らないといけないわけですが、
この作業を行うにはどんな書き方になるんですか?
毎回階層が決まっていれば問題はないけど、
決まってない場合がわからなくて。
よろしくお願いすます。
0464nobodyさん04/08/16 02:38ID:???
>毎回階層が決まっていれば問題はないけど、
>決まってない場合がわからなくて。

↑がよく解らないんだけど、
必要なディレクトリ名を配列に入れて、その数だけループさせたら?
0465nobodyさん04/08/16 02:40ID:???
>>463
まぬあるにヒントが!
http://jp2.php.net/manual/ja/function.mkdir.php
0466nobodyさん04/08/16 02:47ID:???
>>464さん>>465さんありがとー

今ファイルをアップする部分をつくってて
POSTされたアップロード先のアドレスが毎回違うだろうし、ってことです。
すでに作られたディレクトリー内に、1階層だけディレクトリーを作るのなら
mkdirを1度すればいいんだけど。。。
ヒントページみてみます〜〜

また分からなかったらまたきますw
よろしく!
046746604/08/16 04:38ID:???
自己レス

できました。
丸写しだけど・・・

$dir=split("/", $up_dir);
for ($i=0;$i<count($dir);$i++){
$path.=$dir[$i]."/";
if (!is_dir($path))
@mkdir($path,0777);
@chmod($path,0777);
}
if (is_dir($up_dir))
return 1;

間にいくつかif入れて目的の事は完成です。
お世話になりました!
0468nobodyさん04/08/16 05:54ID:gbbwkQJr
ローカルのファイルのパーミッションを変更するにはどうすればいいでしょうか
0469nobodyさん04/08/16 06:33ID:???
chmod

いや、まてよ・・・まさかと思うが、サーバに置いたPHPスクリプトから、
クライアント側の何かのファイルのパーミションを変更したいってわけじゃないよな?
047046804/08/16 06:49ID:???
>>469
いえ、全てローカルにあります

できました ありがとう
0471nobodyさん04/08/16 08:13ID:???
>>466
つーかmkpathは?
047246604/08/16 08:18ID:???
>>471
どもー
mkpathってphpで使えるんですかね?
perlのだって聞いたことあったんだけど。ちと試してみます〜
0473nobodyさん04/08/16 08:30ID:???
>>472
popen使ってやってみ
0474nobodyさん04/08/16 09:38ID:2LXrMV/7
助けて下さい。質問です。
phpでラップ関数って作れるんでしょうか?
0475軟式PHP04/08/16 09:42ID:???
うん
0476nobodyさん04/08/16 10:25ID:???
abcdef @ hijklmp @ aiueos.
という文字列があって1つ目の@を(1)、2つ目の@を(2)という風に
置換したいのですが、良い方法があれば教えてもらえると助かります。
0477nobodyさん04/08/16 10:37ID:go59Ftbg
>>476
正規表現使えば?
0478nobodyさん04/08/16 10:57ID:???
レスありがとうございます。正規表現でやれるんですねー。
何番目の@か取得する方法が分からないため、正規表現スレで聞いてこようと思います。
$1,$2の数値の部分を取る方法があるのだろうか…。
0479Imo ◆.jC7ANgFY. 04/08/16 11:03ID:???
>>478
とりあえず、こんなこともできたりする。

$data = 'abcdef @ hijklmp @ aiueos.';
echo preg_replace_callback('/@/', create_function
('', 'static $a;$a++;return "($a)";'), $data);
0480nobodyさん04/08/16 11:09ID:???
>>479
まさにそれがやりたかったんです!ありがとうございます。
匿名関数を作って静的変数を使ってるあたりがテクニカルでいいっすね(>_<)
本当参考になりました。謝謝。
0481nobodyさん04/08/16 12:11ID:???
>>480
こんな感じでもいけそう。

$i = 0;
echo preg_replace('/@/e', '"(" . ++$i . ")"', $data);
0482nobodyさん04/08/16 12:55ID:???
>475
その「うん」は >474  に対しての「うん」であるならば、
できれば具体的な内容を教えて頂きたいのですが・・・・
0483軟式PHP04/08/16 13:12ID:???
つーか、何のラッパー作りたいんでしょか。
あなたの考えてる「ラップ」とは違うかもしれませんが↓教えておきます。
http://nx.eth.jp/php/manual/function.stream-wrapper-register.html
0484nobodyさん04/08/16 14:56ID:???
>>460
/[^\w]/ って /\W/ じゃダメなの?

create_functionって何回(というより何千回)も使うと遅くならね?
0485Imo ◆.jC7ANgFY. 04/08/16 15:22ID:???
>>484
それでもいい、というよりかそっちのほうがいい。

create_functionは関数をつくっちゃってるからねぇ、
何回も使うのならば>481のようなものを使ったほうがいい。
そうしないと、なにをするにも遅いプログラムになってくる。
048646604/08/16 15:28ID:???
>>473
お〜またまたレスありがと!
popenもやってみます!

mkpathの方は書き方が悪いのかうまく動かなかったです。

うむ。難しいですねー
0487nobodyさん04/08/16 17:33ID:???
配列に対して htmlspecialchars を適用したいのでつが、適当な関数はありませんか。
array_filter を試してみましたが htmlspecialchars は使えない模様でつ。
0488nobodyさん04/08/16 17:42ID:???
>>487
array_map
0489nobodyさん04/08/16 17:51ID:???
webspaceのレンタル(実際にはしないと思いますが^^;)をする上
でWebからの登録で自動的にディレクトリを割り当てたいと考えて
おります。
ディレクトリを作成すると所有者がapacheになりますが、その
ファイルの所有者を変更したいのです。chownはスーパーユーザで
ないと実行出来ませんとありますが、http://hoge.co.jp/でアクセスさせて
スーパーユーザーで動作させる事は可能なのでしょうか?。
apacheはapache権限です。
0490nobodyさん04/08/16 17:53ID:???
>>488
出来ました、ありがとうございまつ。
0491nobodyさん04/08/16 19:39ID:???
でつまつ厨も出たか・・・夏だな
0492nobodyさん04/08/16 20:07ID:???
スネちゃま!そんなこと言っちゃだめざまつ
0493nobodyさん04/08/16 20:29ID:???
本家サイトからインストーラーがダウンロードできないー
どうしたらいいんだー
マニュアルインストールなんて難しいことはわかりません。
ヘルプミーぷりーず orz
0494nobodyさん04/08/16 21:00ID:???
たまにいるんだよな
でつまつ使っただけで「厨だ」とかぬかすアホが。
0495nobodyさん04/08/16 21:17ID:???
488だか私は別に「まつ$」でも気にしない
そもそも、2ちゃんで礼儀などは期待していない
礼儀知らずが厨かどうかは知らないが、それに食いついてる
494が厨だとしか思えん

>>493
Windows?
049649304/08/16 21:21ID:???
>495
そうです。
0497nobodyさん04/08/16 21:22ID:???
>だけで
条件を満たしていると思われ(厨)
0498nobodyさん04/08/16 21:30ID:???
>>496
ぐぐれば置いてある所もあるけど本家が復旧するのを待ってた方が
良いと思うよ
0499nobodyさん04/08/16 22:17ID:???
DLできるじゃん
0500nobodyさん04/08/16 22:21ID:???
http://www.php.net/downloads.php
installerはむりぽ
0501nobodyさん04/08/16 22:29ID:???
サイトでエラーが出てるからDL出来ないんだよ
ミラーもダメだね
0502nobodyさん04/08/16 22:34ID:???
http://public.www.planetmirror.com/pub/php/distributions/
0503nobodyさん04/08/16 23:01ID:???
>>493
んじゃ、RingServerのミラーからでも。
http://www.dnsbalance.ring.gr.jp/archives/net/www/php/distributions/
php-4.x.x-installer.exe
050449304/08/16 23:08ID:???
>>502>>503
復旧するまであきらめるしかないのかと思ってたら・・・
ありがとうございます。m(_ _)m
0505nobodyさん04/08/16 23:15ID:???
>>493
インストーラパッケージは、ZIPパッケージに同梱されてる
各種DLL(mysql関数だとか、確かmbstring絡みも)が入ってない(足りない)から
殆どの場合、あとでZIPパッケージから足す必要があるよ。気をつけて

それとSJISでPHPのスクリプトを書くなら、
http://www.geocities.jp/rui_hirokawa/php/
じゃないと駄目。
0506nobodyさん04/08/16 23:19ID:???
https://www.stackasterisk.jp/tech/php/phpMvc01_02.jsp
って使えますか?
0507nobodyさん04/08/17 00:28ID:???
>>506
何に?
0508軟式PHP04/08/17 00:35ID:???
 _, ._ ∩
( ゚д゚)彡 サァ!!
 ⊂彡
0509nobodyさん04/08/17 00:46ID:???
おっぱいには使えないね
0510nobodyさん04/08/17 03:43ID:???

PHPとjavascript間で値のやり取りをしたいのですがどうすればよいですか?
0511nobodyさん04/08/17 05:54ID:???
>>510
PHPが外部から受け取る変数は $_GET $_POST $_COOKIE である以上、
javascriptからそれらを操作するものを使う他あるまい?
0512軟式PHP04/08/17 14:07ID:???
 _, ._ ∩
( ゚д゚)彡 サァ!!
 ⊂彡
何か面白いもんつくりてーな。
0513nobodyさん04/08/17 17:09ID:???
どもです (_ _)
ある PHP スクリプトが include/require 等で呼んでいるファイルを全部引っ張る方法って無いでしょうか。

fileA
include('fileB');

fileB
include('fileC'); include('fileD');

とあった場合、fileA が fileB, fileC, fileD を読み込んでいる事を fileA 側から確認出来ないか、といった具合です。
0514nobodyさん04/08/17 17:15ID:???
>>513
ソース読めば確認できるだろうが。
どこで何を読み込むかも管理できずに書いてるのか?
0515nobodyさん04/08/17 17:24ID:???
>>513-514
あまり使われる事は無いが
get_included_files()
0516nobodyさん04/08/17 17:29ID:???
>>514
人様の書きやがったスパゲティなコードの修正なんです。

>>515
ありがとうございます (_ _)
0517nobodyさん04/08/17 18:03ID:Jto412WC
Apache monitor is already started
というエラーが出て
サーバーやPHPの環境設定、ブラウザの設定等に問題がないかも
チェックしたほうがいいかもしれませんね。
と上司にいわれましたが設定のチェックの方法が分かりません。
知っている方教えてください。
0518nobodyさん04/08/17 18:05ID:???
>>517
上司にからかわれてるだけだよ
0519軟式PHP04/08/17 18:06ID:???
(つω;)ヾ(・д・ )ヨシヨシ
0520nobodyさん04/08/17 18:22ID:???
>>519
エラーメッセージを理解できない部下を持った上司も慰めてやれよ
0521nobodyさん04/08/17 20:00ID:???
arrayをハッシュとして使っているのですが、キーを削除する方法がわかりません。
$hash = array('key1'=>10, 'key2'=>20);
array_delete_key('key1', $hash); ← こんな関数ないっすかね?
array_key_exists('key1', $hash); #=> false
0522nobodyさん04/08/17 20:01ID:???
>>521
unset
0523nobodyさん04/08/17 20:01ID:???
>>517
英語くらい訳してみろよ
アパッチのモナカがすでに開始してるって書いてあるじゃん
0524nobodyさん04/08/17 20:33ID:???
>>522
unset($hash['key1']);
でいけました。
そうか、$hash['key1'] 自体がひとつの変数ということか。
どうもありがとうございました。
0525nobodyさん04/08/17 21:24ID:hQEO8cuE
PHPの4.0.3を入れてるサーバがあって
バージョンアップ不可の条件をいただいたのですが
4.0.3のマニュアルのURLご存じの方いたら教えて下さい。
ググったら「最低4.0.6まで上げる事をお薦めします.」とか書かれてて(´・ω・`)
0526nobodyさん04/08/17 21:56ID:???
>>525
普通にその辺のマニュアル使える。
例えば 4.3.0 から入った関数の場合、マニュアルに記載がある。

逆にマイナーバージョン固有のバグとかの場合はマニュアルには載らない。
前後の ChangeLog を地道に追う。

後はエラい人、補足よろ。
0527nobodyさん04/08/17 22:03ID:???
PHPで改行の数を調べるにはどうやって調べるのですか?
052852704/08/17 22:11ID:???
解決しますたw
0529nobodyさん04/08/17 22:28ID:???
>>517
ML に投げようかとも思ったけど、Google に残るのがイヤなのでこっちで。

取り敢えずコンピュータの管理はコントロールパネルからな。
それくらいググれ。

取り敢えず集中砲火浴びる前にここ読んで ML って何なのか掴んだ方がいい。
http://www.hyuki.com/writing/techask.html

で、分からない事全部が勉強だと思って調べまくる。それが当たり前に出来ないとこの仕事辛い。
特に知識系産業は国際間の壁が低く世界的に集約/役割が割れていくからどんどん寒くなる。
技能職って事で目の前の待遇の良さだけを見てるなら考えた方がいい。

それにプロって事は、責任だって相応。
俺は無関係だが、規模のデカい開発投資がプログラムで失敗して営業から展開から全部狂って悲惨な目にあったのを知ってる。
まぁその会社のマネジメントも悪いんだが、俺はたまたま開発担当を別件で知っていてコードもちょっと見た。
一番タチ悪いのはソイツが能力低すぎて、何が悪いのかさえ分かってないって事だ。

ML で何か言ってるが、顧客から見れば 俺初心者なんで とか明後日方向の事情は言い訳にもならない。
甘え捨ててもっと自助努力しる。
0530nobodyさん04/08/17 22:43ID:LR9RAB4Q
PHPからoggをエンコードしてタグを書きたいのですが、
shell_exec('oggenc ファイル.wav -t "タイトル" -a "アーティスト名" > /dev/null &');
のようにすると日本語が######のように化けてしまいます。
(実際はshell_exec()の中身は.shファイルに書いてあってもう少し長いですが、上のように書いても同じ症状でした。)
何か良い方法は無いでしょうか?
環境はLinuxです。
0531nobodyさん04/08/17 22:53ID:???
>>530
oggencは使ったことないけどスクリプトの書かれている文字コードとかを
もちっと検討してみてはどうだろうか
0532nobodyさん04/08/17 23:08ID:???
>>530
Ogg 扱える PHP アプリケーションどこかで見たな、と思って PHP ogg でググってみると
コードいろいろ出てきた。
英語ね。
053353204/08/17 23:09ID:???
補足、
それで他の原因潰しつつ >>531 の言うように文字コード関連にかかってみては、って意味
053453004/08/17 23:20ID:???
LinuxはEUC-JPですよね?
スクリプトも全てEUC-JPで書いたのですが・・・。
試しにXウインドウから.shファイルを動かしてみたらちゃんと日本語になりました。
Xウインドウ無しだと日本語使えないのかと思って、
shell_exec('mkdir フォルダ');
みたいにすると日本語のフォルダ作ってくれたので、
Xウインドウ無しでも使えるみたいですし。

>532
英語ですか・・・。
苦手ですけど一応調べてみます。
0535nobodyさん04/08/17 23:32ID:???
>>534
例えば Fedora は UTF-8 がデフォです。それに PHP の設定や Ogg のエンコード環境は別ではないかと。

あとまぁ英語出来ないと一定以上の事出来ないので。
Ogg とか人があまりやってない事をやろうとすると特に。
053653004/08/17 23:42ID:???
Linux+PHP+ogg+日本語ってのは特殊すぎますか・・・orz
0537nobodyさん04/08/18 00:13ID:???
個人的には好きです。頑張ってください。

# mp3 の ID タグ? 編集ライブラリとかも見たことあるので海外探せば ogg も転がってるかも
# で、それに日本語関連の修正&メモ書き入れて weblog か wiki にでも押し込んでおけば皆幸せ (・∀・)

って無責任に言うだけもな〜 と思ってググってると PEAR で見つけました。
http://pear.php.net/package/File_Ogg
0538nobodyさん04/08/18 00:44ID:???
>>530
タグはUTF8で書き込まないとダメだろ
0539nobodyさん04/08/18 00:50ID:???
>>534
つか、PHP-usersでも最近出てたと思うが、
"PHPがshell関数で動かす環境の"言語等の設定がそもそも何なのよ。
keyword:LANG
0540nobodyさん04/08/18 11:56ID:x3r+WkyO
こんにちはー
最近お世話になりっぱなしですが、よろしくです。

セーフモードがオンのサーバーで
Warning: mkdir(): SAFE MODE Restriction in effect
となってしまうのですが、
オンのサーバーでもディレクトリーを使う方法?
はないでしょうか?

もしくは、無理なのでしょうか?
よろしくお願いします。
0541nobodyさん04/08/18 12:15ID:???
>>540
マニュアル嫁。
それ以外にも色々と制限出るからきっちり目を通しておいた方がいい。
0542nobodyさん04/08/18 12:36ID:???
>>541
うぉーありがと。
ってことはやっぱり代わりに使えるものがあるってことですね?
マニュアル声出して読んでみますw

「セーフモードにより制限を受けるか無効となる関数」
ってページあってそこを見ると自分の使ってる関数が沢山でてて・・・
いやになるw

ありがとさんでした!
0543nobodyさん04/08/18 12:42ID:???
いや… 嫁よ。
マニュアルの使い方を覚えるだけで、PHP は 256 倍楽になるのに。
不用な本買わなくてもいいからお財布にも地球にも優しい。

> mkdir() 処理を行うディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
0544nobodyさん04/08/18 12:48ID:???
>>543
なるほどw
UIDってなんですか?
0545軟式PHP04/08/18 12:54ID:???
vodafoneの端末固定IDです。
0546軟式PHP04/08/18 12:55ID:???
あと、Docomoも。・゚・(ノ∀`)・゚・。
0547軟式PHP04/08/18 13:08ID:???
○| ̄|_ スンマセン
0548541=54304/08/18 14:30ID:???
付き合いきれねぇよ ヽ(´ー`)ノ 俺知らね
0549nobodyさん04/08/18 15:06ID:???
wwwww
0550軟式PHP04/08/18 15:29ID:???
「なるほどw」ってところがポイントだな。
0551nobodyさん04/08/18 15:33ID:???
プロ釣師
0552nobodyさん04/08/18 15:58ID:???
Cannot modify header information - headers already sent by (output started at /usr/home/free/home/market/public_html/mmorpg/index.php:4)
ってなんだよウワァァァァン
0553軟式PHP04/08/18 16:17ID:???
>>552
今すぐCTRL+Fを押して「modify」と入れて検索してみるといいよ。
0554nobodyさん04/08/18 16:17ID:???
>>552
そのエラーメッセージを訳したらどうなる
ちゃんと英語を読め
■ このスレッドは過去ログ倉庫に格納されています