【PHP】質問スレッドpart20【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/06 15:44ID:paJ4kjjQ・新規質問の方は上げてください。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,446
04/08/15 22:31ID:???0456nobodyさん
04/08/15 22:36ID:???0459Imo ◆.jC7ANgFY.
04/08/15 23:03ID:???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:???0461nobodyさん
04/08/15 23:48ID:???参照先ディレクトリの制御に限った話でつか。
それは誤動作誘発に通じるルートを叩き潰すって発想で付加的な話。
基本はルートを掘られて利用されるような脆弱性をつくらない事なのでは。
という話も出しておきまつ。初心者が佃煮状態みたいなんで。
- safe_mode を使う
- ライブラリ単体で動作させない (require/include で結果を返すような書き方をしない)
- 外部ライブラリはそれ自体をセキュアな作りにする
とか。定石と普段からの意識とバッドノウハウの排除。
0462カポコン
04/08/16 00:33ID:???0463nobodyさん
04/08/16 02:30ID:vS77LDZvえと。
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:???まぬあるにヒントが!
http://jp2.php.net/manual/ja/function.mkdir.php
0466nobodyさん
04/08/16 02:47ID:???今ファイルをアップする部分をつくってて
POSTされたアップロード先のアドレスが毎回違うだろうし、ってことです。
すでに作られたディレクトリー内に、1階層だけディレクトリーを作るのなら
mkdirを1度すればいいんだけど。。。
ヒントページみてみます〜〜
また分からなかったらまたきますw
よろしく!
0467466
04/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:gbbwkQJr0469nobodyさん
04/08/16 06:33ID:???いや、まてよ・・・まさかと思うが、サーバに置いたPHPスクリプトから、
クライアント側の何かのファイルのパーミションを変更したいってわけじゃないよな?
0474nobodyさん
04/08/16 09:38ID:2LXrMV/7phpでラップ関数って作れるんでしょうか?
0475軟式PHP
04/08/16 09:42ID:???0476nobodyさん
04/08/16 10:25ID:???という文字列があって1つ目の@を(1)、2つ目の@を(2)という風に
置換したいのですが、良い方法があれば教えてもらえると助かります。
0477nobodyさん
04/08/16 10:37ID:go59Ftbg正規表現使えば?
0478nobodyさん
04/08/16 10:57ID:???何番目の@か取得する方法が分からないため、正規表現スレで聞いてこようと思います。
$1,$2の数値の部分を取る方法があるのだろうか…。
0479Imo ◆.jC7ANgFY.
04/08/16 11:03ID:???とりあえず、こんなこともできたりする。
$data = 'abcdef @ hijklmp @ aiueos.';
echo preg_replace_callback('/@/', create_function
('', 'static $a;$a++;return "($a)";'), $data);
0480nobodyさん
04/08/16 11:09ID:???まさにそれがやりたかったんです!ありがとうございます。
匿名関数を作って静的変数を使ってるあたりがテクニカルでいいっすね(>_<)
本当参考になりました。謝謝。
0481nobodyさん
04/08/16 12:11ID:???こんな感じでもいけそう。
$i = 0;
echo preg_replace('/@/e', '"(" . ++$i . ")"', $data);
0482nobodyさん
04/08/16 12:55ID:???その「うん」は >474 に対しての「うん」であるならば、
できれば具体的な内容を教えて頂きたいのですが・・・・
0483軟式PHP
04/08/16 13:12ID:???あなたの考えてる「ラップ」とは違うかもしれませんが↓教えておきます。
http://nx.eth.jp/php/manual/function.stream-wrapper-register.html
0484nobodyさん
04/08/16 14:56ID:???/[^\w]/ って /\W/ じゃダメなの?
create_functionって何回(というより何千回)も使うと遅くならね?
0485Imo ◆.jC7ANgFY.
04/08/16 15:22ID:???それでもいい、というよりかそっちのほうがいい。
create_functionは関数をつくっちゃってるからねぇ、
何回も使うのならば>481のようなものを使ったほうがいい。
そうしないと、なにをするにも遅いプログラムになってくる。
0486466
04/08/16 15:28ID:???お〜またまたレスありがと!
popenもやってみます!
mkpathの方は書き方が悪いのかうまく動かなかったです。
うむ。難しいですねー
0487nobodyさん
04/08/16 17:33ID:???array_filter を試してみましたが htmlspecialchars は使えない模様でつ。
0489nobodyさん
04/08/16 17:51ID:???でWebからの登録で自動的にディレクトリを割り当てたいと考えて
おります。
ディレクトリを作成すると所有者がapacheになりますが、その
ファイルの所有者を変更したいのです。chownはスーパーユーザで
ないと実行出来ませんとありますが、http://hoge.co.jp/でアクセスさせて
スーパーユーザーで動作させる事は可能なのでしょうか?。
apacheはapache権限です。
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:???そもそも、2ちゃんで礼儀などは期待していない
礼儀知らずが厨かどうかは知らないが、それに食いついてる
494が厨だとしか思えん
>>493
Windows?
0496493
04/08/16 21:21ID:???そうです。
0497nobodyさん
04/08/16 21:22ID:???条件を満たしていると思われ(厨)
0499nobodyさん
04/08/16 22:17ID:???0500nobodyさん
04/08/16 22:21ID:???installerはむりぽ
0501nobodyさん
04/08/16 22:29ID:???ミラーもダメだね
0502nobodyさん
04/08/16 22:34ID:???0503nobodyさん
04/08/16 23:01ID:???んじゃ、RingServerのミラーからでも。
http://www.dnsbalance.ring.gr.jp/archives/net/www/php/distributions/
php-4.x.x-installer.exe
0505nobodyさん
04/08/16 23:15ID:???インストーラパッケージは、ZIPパッケージに同梱されてる
各種DLL(mysql関数だとか、確かmbstring絡みも)が入ってない(足りない)から
殆どの場合、あとでZIPパッケージから足す必要があるよ。気をつけて
それとSJISでPHPのスクリプトを書くなら、
http://www.geocities.jp/rui_hirokawa/php/
じゃないと駄目。
0506nobodyさん
04/08/16 23:19ID:???って使えますか?
0508軟式PHP
04/08/17 00:35ID:???( ゚д゚)彡 サァ!!
⊂彡
0509nobodyさん
04/08/17 00:46ID:???0510nobodyさん
04/08/17 03:43ID:???PHPとjavascript間で値のやり取りをしたいのですがどうすればよいですか?
0511nobodyさん
04/08/17 05:54ID:???PHPが外部から受け取る変数は $_GET $_POST $_COOKIE である以上、
javascriptからそれらを操作するものを使う他あるまい?
0512軟式PHP
04/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 側から確認出来ないか、といった具合です。
0517nobodyさん
04/08/17 18:03ID:Jto412WCというエラーが出て
サーバーやPHPの環境設定、ブラウザの設定等に問題がないかも
チェックしたほうがいいかもしれませんね。
と上司にいわれましたが設定のチェックの方法が分かりません。
知っている方教えてください。
0519軟式PHP
04/08/17 18:06ID:???0521nobodyさん
04/08/17 20:00ID:???$hash = array('key1'=>10, 'key2'=>20);
array_delete_key('key1', $hash); ← こんな関数ないっすかね?
array_key_exists('key1', $hash); #=> false
0524nobodyさん
04/08/17 20:33ID:???unset($hash['key1']);
でいけました。
そうか、$hash['key1'] 自体がひとつの変数ということか。
どうもありがとうございました。
0525nobodyさん
04/08/17 21:24ID:hQEO8cuEバージョンアップ不可の条件をいただいたのですが
4.0.3のマニュアルのURLご存じの方いたら教えて下さい。
ググったら「最低4.0.6まで上げる事をお薦めします.」とか書かれてて(´・ω・`)
0526nobodyさん
04/08/17 21:56ID:???普通にその辺のマニュアル使える。
例えば 4.3.0 から入った関数の場合、マニュアルに記載がある。
逆にマイナーバージョン固有のバグとかの場合はマニュアルには載らない。
前後の ChangeLog を地道に追う。
後はエラい人、補足よろ。
0527nobodyさん
04/08/17 22:03ID:???0528527
04/08/17 22:11ID:???0529nobodyさん
04/08/17 22:28ID:???ML に投げようかとも思ったけど、Google に残るのがイヤなのでこっちで。
取り敢えずコンピュータの管理はコントロールパネルからな。
それくらいググれ。
取り敢えず集中砲火浴びる前にここ読んで ML って何なのか掴んだ方がいい。
http://www.hyuki.com/writing/techask.html
で、分からない事全部が勉強だと思って調べまくる。それが当たり前に出来ないとこの仕事辛い。
特に知識系産業は国際間の壁が低く世界的に集約/役割が割れていくからどんどん寒くなる。
技能職って事で目の前の待遇の良さだけを見てるなら考えた方がいい。
それにプロって事は、責任だって相応。
俺は無関係だが、規模のデカい開発投資がプログラムで失敗して営業から展開から全部狂って悲惨な目にあったのを知ってる。
まぁその会社のマネジメントも悪いんだが、俺はたまたま開発担当を別件で知っていてコードもちょっと見た。
一番タチ悪いのはソイツが能力低すぎて、何が悪いのかさえ分かってないって事だ。
ML で何か言ってるが、顧客から見れば 俺初心者なんで とか明後日方向の事情は言い訳にもならない。
甘え捨ててもっと自助努力しる。
0530nobodyさん
04/08/17 22:43ID:LR9RAB4Qshell_exec('oggenc ファイル.wav -t "タイトル" -a "アーティスト名" > /dev/null &');
のようにすると日本語が######のように化けてしまいます。
(実際はshell_exec()の中身は.shファイルに書いてあってもう少し長いですが、上のように書いても同じ症状でした。)
何か良い方法は無いでしょうか?
環境はLinuxです。
0532nobodyさん
04/08/17 23:08ID:???Ogg 扱える PHP アプリケーションどこかで見たな、と思って PHP ogg でググってみると
コードいろいろ出てきた。
英語ね。
0534530
04/08/17 23:20ID:???スクリプトも全てEUC-JPで書いたのですが・・・。
試しにXウインドウから.shファイルを動かしてみたらちゃんと日本語になりました。
Xウインドウ無しだと日本語使えないのかと思って、
shell_exec('mkdir フォルダ');
みたいにすると日本語のフォルダ作ってくれたので、
Xウインドウ無しでも使えるみたいですし。
>532
英語ですか・・・。
苦手ですけど一応調べてみます。
0535nobodyさん
04/08/17 23:32ID:???例えば Fedora は UTF-8 がデフォです。それに PHP の設定や Ogg のエンコード環境は別ではないかと。
あとまぁ英語出来ないと一定以上の事出来ないので。
Ogg とか人があまりやってない事をやろうとすると特に。
0536530
04/08/17 23:42ID:???0537nobodyさん
04/08/18 00:13ID:???# mp3 の ID タグ? 編集ライブラリとかも見たことあるので海外探せば ogg も転がってるかも
# で、それに日本語関連の修正&メモ書き入れて weblog か wiki にでも押し込んでおけば皆幸せ (・∀・)
って無責任に言うだけもな〜 と思ってググってると PEAR で見つけました。
http://pear.php.net/package/File_Ogg
0539nobodyさん
04/08/18 00:50ID:???つか、PHP-usersでも最近出てたと思うが、
"PHPがshell関数で動かす環境の"言語等の設定がそもそも何なのよ。
keyword:LANG
0540nobodyさん
04/08/18 11:56ID:x3r+WkyO最近お世話になりっぱなしですが、よろしくです。
セーフモードがオンのサーバーで
Warning: mkdir(): SAFE MODE Restriction in effect
となってしまうのですが、
オンのサーバーでもディレクトリーを使う方法?
はないでしょうか?
もしくは、無理なのでしょうか?
よろしくお願いします。
0542nobodyさん
04/08/18 12:36ID:???うぉーありがと。
ってことはやっぱり代わりに使えるものがあるってことですね?
マニュアル声出して読んでみますw
「セーフモードにより制限を受けるか無効となる関数」
ってページあってそこを見ると自分の使ってる関数が沢山でてて・・・
いやになるw
ありがとさんでした!
0543nobodyさん
04/08/18 12:42ID:???マニュアルの使い方を覚えるだけで、PHP は 256 倍楽になるのに。
不用な本買わなくてもいいからお財布にも地球にも優しい。
> mkdir() 処理を行うディレクトリが実行するスクリプトと同じUIDを有しているかどうかを確認します。
0545軟式PHP
04/08/18 12:54ID:???0546軟式PHP
04/08/18 12:55ID:???0547軟式PHP
04/08/18 13:08ID:???0548541=543
04/08/18 14:30ID:???0549nobodyさん
04/08/18 15:06ID:???0550軟式PHP
04/08/18 15:29ID:???0551nobodyさん
04/08/18 15:33ID:???0552nobodyさん
04/08/18 15:58ID:???ってなんだよウワァァァァン
■ このスレッドは過去ログ倉庫に格納されています