【PHP】質問スレッドpart27【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
05/03/03 22:41:23ID:???・新規質問の方は上げてください。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-10辺り
0579nobodyさん
2005/04/08(金) 18:27:44ID:???FirefoxやOperaでは問題ないのにWin-IEでは実行されません(画面真っ白)。
スクリプトの内容は単なるdocument.writeの羅列です。
同じ内容のJavascriptを普通のjsファイルに書いて読み込めば実行されるのですが・・・
また、そのPHPファイルを直接IEから呼び出すとちゃんとダウンロードされます。
何かIE特有の注意点等ありますでしょうか?
0580nobodyさん
2005/04/08(金) 18:53:23ID:???マルチ
>>579
JavaScriptはよく知らないからアレだけど
HTMLのscriptタグ内にtype=text/javascript入れるとか
phpでheader()でContentーtype:text/javascript入れるとか
0581579
2005/04/08(金) 18:58:51ID:???どうもです。
一応そこらへんはやってるはずです。
phpのheaderではContent-type: application/x-javascriptを吐いてます。
Contentーtype:text/javascriptもやってみましたが同じでした(´・ω・`)
0582nobodyさん
2005/04/08(金) 19:06:02ID:???0584579
2005/04/08(金) 19:39:11ID:???サーバ側の設定の問題でしょうか・・・他のサーバでも試してみます。
[PHPスクリプト]
<?php
header("Content-type: application/x-javascript");
print("document.write('TEST');");
?>
[HTMLファイル]
<body>
<script language="javascript" type="text/javascript" src="http://hoge.com/test.php"></script>
</body>
0585nobodyさん
2005/04/08(金) 19:43:24ID:???<script type="text/javascript" src="test.php"></script>
[PHP]
<?php
header('Content-type:text/javascript');
print 'document.write("テスト")';
?>
でうまくいくんだが(IE6SP1)
0586nobodyさん
2005/04/08(金) 19:49:50ID:???WinXP + Apache2 +PHP5.0.4 では問題なし
あとhttp://hoge.com/は他人のサイト。http://example.com/を使う。
0587nobodyさん
2005/04/08(金) 19:57:50ID:???原因でした・・・3回ほど吊ってきます・・・どうもありがとうございました orz
0588nobodyさん
2005/04/08(金) 20:15:17ID:???function Hoge(&$arg)
これと
function & Hoge($arg)
のちがいわなんですか>?
0589nobodyさん
2005/04/08(金) 20:45:48ID:PH5IR/1K例えば、
http://example.com/login.php
↑のような認証ページを用意し、ログインをさせます。
その際にセッションなりで保持したIDとパスワードを用いて、
ftp://example.com/
↑のようなFTPサーバにブラウザでログインさせたいと思っています。
通常のやり方だと、WEBでログインさせ、再びFTPでも認証ダイアログから
ログインさせるか、あるいはURLに
ftp://ID:[email protected]
↑のようにIDパスワードを混ぜることになり、どちらも不本意です。
どうにかならんものでしょうか?
0590nobodyさん
2005/04/08(金) 21:07:52ID:???探してもなかったもんで・・・
0591nobodyさん
2005/04/09(土) 01:45:25ID:BWP/VWkuこんなことがしたいでつ
こういうのを組むのに参考になるサイトだけでいいんで教えてください
0592nobodyさん
2005/04/09(土) 03:14:41ID:???unix系なら cronjob で好きな時に wget --mirror すればいいだけだろう。
windowsは知らない。
0593nobodyさん
2005/04/09(土) 03:32:30ID:???リファレンス渡し http://www.php.net/manual/ja/language.references.pass.php
リファレンスによる返り値 http://www.php.net/manual/ja/language.references.return.php
0594nobodyさん
2005/04/09(土) 09:46:58ID:???リファレンスによる返り値でマニュアル読んでたんですけど
わからないです。
マニュアルには リファレンスを返すことは、結合する変数を見付けるために
関数を使用し たい場合に便利です・・・
pear のMDBとかはじめのconnectionなどで使われています。
結合する変数・・・ うーん難しい
0595nobodyさん
2005/04/09(土) 10:17:11ID:???Returning by-reference is useful - リファレンスで値を返すことは便利だ
when you want to use a function - 関数を使おうとする時に
to find - 見つけるために
which variable a reference should be bound to. - どの変数をリファレンスと結びつけるか
リファレンスで値を返すのは便利やねん。
どんな時に便利かつーとな、どの変数をリファレンスと結びつけるかを関数でやろうとする時やねん
0596nobodyさん
2005/04/09(土) 10:53:53ID:???レンタルサーバーのさくらで、PHPを使ったサイトを作ってます。
2年間、問題なくうごいていたのですが、何の変更も
していないのに急に動かなくなりました。
さくら側で何か変更したのかと思いきや
何もしていないと言われました。
唯一変更したとすれば、アパッチのmod_rewriteを使用できるように
しました。。。とだけ言われました。
質問が抽象的ですが、いままでうごいていたのに
うごかなくなった場合、どこから手をつけていけば良いのでしょうか?
0597nobodyさん
2005/04/09(土) 11:10:36ID:???0598596
2005/04/09(土) 11:25:03ID:???本当に助かります。
具体的には、クリック数をカウントするリダイレクトが
使用できなくなっているのが1つ。
require_once("password.php");
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$selectdb = mysql_select_db($DBNAME, $con);
//クリック数をインクリメントするSQL文を発行
$sql = "update sample set clickcount = ifnull(clickcount, 0) + 1
where no = $no";
mysql_query($sql, $con);
//指定されたURLへリダイレクト
header("Location: " . $url);
$con = mysql_close($con);
もう一つは フォームからのデータの受け渡し系が
うまく作動しておりません。
またまた抽象的なのですが、
どこから手をつけていくと、原因を発見できるのでしょうか?
0599nobodyさん
2005/04/09(土) 11:56:43ID:???思えないんだが・・・
データをあげてphpinfo見てみそ
0600nobodyさん
2005/04/09(土) 12:07:15ID:???ttp://www.sakura.ne.jp/news/20050325-001.news
0601nobodyさん
2005/04/09(土) 12:58:22ID:???0602596
2005/04/09(土) 13:01:48ID:???本当にありがとうございます。
早速、見て見ました。
すると、 register_globals が OFF
でした。以前は ON が仕様でしたが
いつのまにか OFF に・・・・
おいおい 連絡してこいよ
と思いましたが、まぁ原因が分かったので
よかったです。
私のサイトはONじゃないとうごかないものが
ほとんどでして・・・・
ON が OFF になる。
これだけで大きく被害を受けました。。。。
0603nobodyさん
2005/04/09(土) 13:05:47ID:???オイラなら素直にスクリプトのデバッグをするけども。
きちんとエラー処理をしてれば速攻で問題個所を絞れそうな・・
0604nobodyさん
2005/04/09(土) 13:10:17ID:???得ようしたんですが、
$_SERVER["REQUEST_URI"]
$_SERVER['QUERY_STRING']
などの情報が取得できないようです。
$_SERVERを$_ENVに変えたり、serverVar("URL")とか試したりしたんですが、
全て値を得ることが出来ませんでした。
他に呼び出された完全なURLを取得する方法などはございませんでしょうか…。
無料のHPスペースなのでhtaccessを触ったりとかそういうことはできませんです。
0605nobodyさん
2005/04/09(土) 13:12:36ID:SXkH7OvC256進数(つまり1バイト文字全て使う)に直そうと単純に$string = chr($int)として$stringを入れようとすると、
SQL文のダブルクオーテーションが消えてしまったり、あるいは増えてしまったりしてMySQLに格納出来ません。
何か良い方法は無いでしょうか?
0606nobodyさん
2005/04/09(土) 13:16:17ID:???0607nobodyさん
2005/04/09(土) 13:25:32ID:SXkH7OvCMySQLのリファレンスに、インデックスを使う際は対象となるデータの桁数が短いほうが良いと書かれていたからです。
データ容量も落とせると思うし。
0608nobodyさん
2005/04/09(土) 13:36:58ID:???そもそもブラウザが#以降の文字列を鯖に送出していない。
ブラウザのhttpリクエスト・レスポンスヘッダを見るツールがあるのでそういうので確かめてみるとよい。
ieHTTPHeaders、proxomitron、パケットキャプチャー等。
0609nobodyさん
2005/04/09(土) 14:50:00ID:???桁数の問題って、そんなに対象のフィールドに入れるデータが
数字が膨大な長さのデータばかりなのか?
よっぽど特殊なデータとか膨大なレコード数になるとかでもない限り
素直に整数型で入れればと思うが
ミクロレベルの問題を凄い上の層でどうにかしようとしてる感が
0610nobodyさん
2005/04/09(土) 15:30:06ID:SXkH7OvCMySQLは符号無しbigintでも20桁くらいしか扱えませんよね。
それをオーバーしてしまうのです。
その長い10進数の文字列を左から3桁ずつで区切ると各区分のパターン数は256以内に収まります。
そこで、各パターンに0〜255までの数字が1対1に対応するよう割り振り、(最小完全ハッシュのような事)
その数量を256進数に直し、区切っていたものを再結合して一つの文字列にしてMySQLに格納したいのです。
区切らずに全桁で考えたほうがパターン数が節約出来ますが、検索時の事情でそれは出来ません。
3桁の区分ごとに専用のフィールドを用意する事も速度の低下とHDD使用量の増加になってしまうので、
やはり一つの文字列として一つのフィールドに格納したいのです。
0611nobodyさん
2005/04/09(土) 15:44:49ID:???アップしたときに××.
php.txtと出ますが、問題ないでしょうか?
0612nobodyさん
2005/04/09(土) 15:47:55ID:???普通にphpファイルとして動作させるのなら.txtは要らない。
0615nobodyさん
2005/04/09(土) 15:56:09ID:???0617596
2005/04/09(土) 16:18:04ID:???なんなくうごくのですが、
危険ですよね。。
でも引数ってregister_globals OFFだと
どうやって渡すのですか?
register_globals ONでしかうごかない
プログラムしか掛けません。。
どなたか、OFFで動かすテクニックというか
そんなサイトにでも誘導していただけませんか・・・
0619nobodyさん
2005/04/09(土) 16:23:33ID:???0620nobodyさん
2005/04/09(土) 16:23:50ID:???0622nobodyさん
2005/04/09(土) 16:28:27ID:???はじめに(初歩の初歩)ぐらいは読もうな。
http://www.php.net/manual/ja/tutorial.php
最もその中で書かれてるハイパーリンク先の詳細が重要
0623nobodyさん
2005/04/09(土) 16:40:38ID:???【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/l50
0625605
2005/04/09(土) 17:11:13ID:SXkH7OvCそれだと必要な機能は出来ますが、
MySQLのリファレンスによるとインデックスを使う際は対象となる文字列の桁数が少ない方が良いらしいのです。
1桁に使われる文字の種類数が少ない事で桁数を減らした場合と同様な効果があるとしたらくたびれもうけだけど。
(これがありえそうで怖い)
でもHDD使用量が抑えられるという効果は確実にありそうだし出来ればやりたいのです。
0626589
2005/04/09(土) 17:26:34ID:fpNXc15C>>589もよろしくお願いします。。。
0627nobodyさん
2005/04/09(土) 17:26:57ID:???その数値がどれくらいユニークなのかは知らんが、先頭の数バイト分だけ
インデックスを作成することもできるよ。
alter table hoge add index (column(4))
見たいな感じでね。
ま、しかしHDDのお値段と復号やらなんやらの手間とを天秤にかければ・・・
てなことも考慮した方が良いのでは。
0628nobodyさん
2005/04/09(土) 17:35:07ID:???認証ページにて、
1.認証に成功→サーバ内にセッション情報を保存して該当ページへリダイレクト
2.認証に失敗→認証ページへ戻る
FTPの該当ページではセッション情報を検索して、存在すればアクセス許可。
なければ認証ページへリダイレクト。
セッション情報の保存法はcookieでもセッションでもファイルでもDBでも
お好きなように。検索のためのキーはリダイレクトするときに渡す必要が
あるのでGETにするしかないので、セッション作成毎にユニークなIDを作成する。
こんなところか。
あ、当然セッション情報は有効期限を設けて定期的に消去する。
普通はログオフ時に削除すればいいんじゃね。
盗聴が怖ければSSLで暗号化するしかないんじゃないの?
と、とりあえず適当に書いてみた。推敲もしてません。
0629589
2005/04/09(土) 19:04:25ID:fpNXc15C> FTPの該当ページではセッション情報を検索して
↑これ、具体的にどうしたら良いのでしょうか?
FTPのページではPHP等は動かせないですよね?
0630nobodyさん
2005/04/09(土) 19:47:32ID:6OokWNUOトップページにて認証を行いアカウント等セッションに登録して別ページにheaderで飛ばします。
ここではセッション内容が正しく表示されます。
次にこのページから適当なページに<a href〜でリンク先に飛びます。 このページでもセッションは表示されます。
続いてブラウザを閉じずに認証ページにURL指定か戻るとかで移動して違うアカウントで入ります。
headerで飛んだページは2つ目のアカウントが正しく表示されます。
が、この後このページから先ほどの3ページ目へリンクで飛ぶと前のアカウントのデータが表示されてしまいます。
リミッターはnocache lifetimeも0にしているのですがどうしてなんでしょうか?
取得するだけのページならsession_start()だけでいいですよね?
0631nobodyさん
2005/04/09(土) 19:54:09ID:???ファイルをダウンロード(orアップロード)させたいんでしょ?
プロトコルにhttpを使うかftpを使うかは関係なく、
urlを直打ちしてダウンロードさせなければよいのでしょ?
そのための認証ページを作るという意味なんだけど・・・
0632nobodyさん
2005/04/09(土) 21:15:02ID:???サーバーとしてファイルの数が多くなるというのは良くないのでしょうか?
0633nobodyさん
2005/04/09(土) 23:52:34ID:???クラス概念が有る様ですが、ディストラクタの起動する要因が判らない
ので、知っていたら教えて下さい。
0634nobodyさん
2005/04/09(土) 23:58:39ID:???ちょっと書き方がわるかった。
要はhttpでもftpでもいいが、ユーザがアクセスできるところにファイルを
置いては認証もへったくれもないという事。
だからダウンロードさせるファイルはブラウザでアクセスできない場所へ
置いておいて(※)、ダウンロードのページではまず認証状況を確認し、次に
phpを使ってファイルを読み取り、ftpのヘッダと共にファイルを送信してやる。
とこういう流れになるかと。
※たとえばApacheでDocumentRootを/usr/local/apache/htdocsにしてるなら、
/usr/local/apache/Download(適当)/に置いておけば、url直うちでは
たどり着けない。
0636nobodyさん
2005/04/10(日) 00:03:44ID:???0640nobodyさん
2005/04/10(日) 03:02:33ID:???SOHOとしてはレン鯖とかホスティング鯖に普通に入りだしたら移行
っつーか移行せざるを得ない、結局みんなが使い出したらかw
0641nobodyさん
2005/04/10(日) 07:20:50ID:???同じく...なんだけど、php3->php4のときは共存できたので、
未だにphp3のままのところがあるわな。
php4とphp5は(通常)共存できないので、中小企業向けレン鯖は当面php4のままだろう。
レン鯖のphp5対応鯖に新規or乗換する蔵が出てくるのはいつのことなんだろう。。。
0642nobodyさん
2005/04/10(日) 09:04:55ID:???Zend製品は対応してる。PHPAは全然動き無いし、
MMcacheは開発休止してる。
スクリプトキャッシュじゃないけど、VM最適化パッチはかなり効くね。
PHP5.1だけじゃなくて、PHP4.4とかで入れてくんないかな。
0643nobodyさん
2005/04/10(日) 12:00:23ID:???0644nobodyさん
2005/04/10(日) 12:59:48ID:jGzXhnVHこれを↓で変換すると
$message = preg_replace( "/(.+?)(選手|さん|様)?$/" , '$1選手', $message);
「中田選手、小野選手、中村選手、用務員選手、警備員選手、柳沢選手」
となってしまいます。
「中田選手、小野選手、中村選手、用務員、警備員、柳沢選手」
となるように(語尾に「選手」「さん」「様」がついていない場合はそのままにしておくように)
するには、どのように書き換えたら良いですか?
0645nobodyさん
2005/04/10(日) 13:26:17ID:???mb_ereg系を使って方がよさげ。
$message=mb_ereg_replace('([^、])(選手|さん|様)' , '\1選手', $message)
0646nobodyさん
2005/04/10(日) 13:46:51ID:jGzXhnVHお答えありがとうございます。
ごめんなさい、mb_ereg_replaceのように実験的なステータスにある関数は使えないんですよ。
0647nobodyさん
2005/04/10(日) 14:08:09ID:???そうなのか。いっそ単純に
$message=preg_replace('/(さん|様)/' , '選手', $message);
でいいんじゃね。>>644も「、」が区切りと認識してないし。
0648nobodyさん
2005/04/10(日) 14:11:22ID:???こう書くと区切りの「、」がそれなりに機能するかな。
$message=preg_replace('/(さん|様)(、|$)/' , '選手$2', $message);
0649nobodyさん
2005/04/10(日) 14:14:59ID:jGzXhnVH>>648
出来ました。
そうでした。なんか難しく考えすぎてたみたいでした。
ありがとうございます!
0650nobodyさん
2005/04/10(日) 14:38:57ID:???mb_ereg_replaceは、今はもう実験的位置づけじゃないよ。
http://jp2.php.net/manual/en/function.mb-ereg-replace.php
0651nobodyさん
2005/04/10(日) 18:05:37ID:???2次元目の配列の個数で、
1次元目をソートすることはできますか?
ランキングっぽいことをやろうとしているんですが…
0652nobodyさん
2005/04/10(日) 18:14:29ID:???multisort使えば出来そうですね
おさわがわせいかましt
お騒がせしました。
0653nobodyさん
2005/04/10(日) 18:27:15ID:???なんというか、質が落ちたな・・・
0654nobodyさん
2005/04/10(日) 18:28:19ID:???0655nobodyさん
2005/04/10(日) 18:45:34ID:???0656nobodyさん
2005/04/10(日) 18:46:28ID:???「効率的な」とか「高速な」ソートを作るという訳でなければ、
要するにアルゴリズムが理解できないプログラマといえる。
まあ色んなプログラマがいるからソートの仕組みが組み立てられない
ことが即駄目プログラマとは言えないけど、概ね駄目。
0657nobodyさん
2005/04/10(日) 18:55:28ID:???変なたとえだけど、鉛筆をカッターで削ってた時代の人が、機械でガ〜〜ってやってる若者を見て、今時の若者はカッターも使えんのか、みたいな感じなんだよ。
0658nobodyさん
2005/04/10(日) 19:08:28ID:???そんな経験ない?
0659nobodyさん
2005/04/10(日) 19:30:15ID:???質問スレなんて必要ないわけだが。
PHPが普及してきたからこそ、質問スレは盛り上がるし
質問は増えてくるのに、それをみて
レベルが下がったというのは如何な物か。
0660nobodyさん
2005/04/10(日) 19:39:15ID:???>>653
こういう事をさらさら言えるほうが、人間として質が落ちてる気がするよ。
0661nobodyさん
2005/04/10(日) 19:42:57ID:???うん?平均的にレベルが下がったのは事実だよね。
いいんじゃないの。平均が下がったお陰で
マニュアル読まずにこういったスレに書き込んでも、
怒られることもなしに誰かしら教えてくれるような
環境が出来た訳だから。英語が読めなくても誰か
翻訳してくれるしね。
0662nobodyさん
2005/04/10(日) 19:45:16ID:???0663nobodyさん
2005/04/10(日) 19:58:13ID:???給料いくら?
0664nobodyさん
2005/04/10(日) 20:10:10ID:???0665nobodyさん
2005/04/10(日) 20:23:06ID:???2chのこんなところにいんなよpu
0666nobodyさん
2005/04/10(日) 20:38:13ID:???俺の知り合いの奴らなんてみんな月の手取り30〜40ぐらいでひ〜ひ〜言ってるが、普通はそんなもんだろ。
俺はリーマンやったことないから分からんが。
知り合いに>>653みたいな事を言う職業プログラマがいるんだが、年収350万ぐらいだって聞いて
なんか惨めだな〜と思って。
俺は大学時代な〜んも勉強せずに、5年程前フリーターやりながら趣味で覚えたperl⇒PHPレベル。
今年の確定申告で250程国に貢いできたといえば、年収も分かるだろ。
大した事はないが、それでもそこらのリーマンよりはよっぽど稼いでるわけで。
何が言いたいかというと、くだらん事にこだわらずに効率よく結果を出しゃぁいいんだよって事だ。
苦労せずとも結果が出せるに越した事はない。
自己満足の世界に陶酔しても、金が稼げるわけでもなし。
>>665
携帯関連とか株関連の板見た事無いみたいだね。
年収1000万程度(スレによってはカス扱い)の奴なんか腐る程いるぞ。
0667nobodyさん
2005/04/10(日) 20:38:29ID:???どんどん便利になっていくし使う人への敷居も低くなっていく
でもそれを先人が「使う人間のレベルが下がった」だけで
割り切ってしまうのもなんだかなあ
0668nobodyさん
2005/04/10(日) 21:02:23ID:H4Hn0Vk9ディレクトリの所有者とスクリプトの所有者が一致していなければ
いけないらしいので、PHPスクリプトを自動生成するスクリプト内で、
//makephpfile.php
$filep = fopen("test.php","w"); //open file
chown("test.php",'username');
flock($filep, LOCK_EX);
fputs($filep,$dat); //write data
fclose($filep);
としたのですが、スクリプトファイルの所有者がapacheになってしまい
ファイルの読み込みなどがうまくいきません。
スクリプトを生成するファイル(makephpfile.php)とそれが入っている
ディレクトリの所有者は、usernameで統一しています。
誰かいい解決方法を知っていたら教えてください。
よろしくお願いします。
0669nobodyさん
2005/04/10(日) 21:16:07ID:???昔はよかったとか、今はミーハーなファンばっかりだとか言う奴いるけど
そういうのと同じじゃない?
0670nobodyさん
2005/04/10(日) 21:41:42ID:???0671nobodyさん
2005/04/10(日) 21:48:57ID:???0672nobodyさん
2005/04/10(日) 22:26:19ID:???ファイルの所有者を変更できるのはふつうrootだけ
というわけで別の方法を考えた方が良さそう。管理者にgidで
チェックするようにしてくれって頼むとか。
0673nobodyさん
2005/04/10(日) 23:14:44ID:???ereg_replace("^.+?\.","*****.",$str);
これで下の様に頭の部分を隠したいのですがエラーが発生してしまいます
何かPHPの記述方法があるのでしょうか?
*****.hoge.tokyo.ne.jp
0674nobodyさん
2005/04/10(日) 23:29:59ID:???フォルダの残量は disk_free_space を使って表示できたのですが、
使用量をどのようにして表示させようか悩んでいます。
ちなみに、PHPはセーフモードで動いています。
$dir_space = `du -sb ./test`;も使おうとしましたが、うまくいきません。
ご教授よろしくお願いします。
0675nobodyさん
2005/04/10(日) 23:30:42ID:???ereg_replace("^[^\.]+(\..+)$",\\1 ,$hoge)
質問です
ファイルに書き込みをしていますが
fputs($fp, 'うんうん'."\n")
を2回繰り返しても改行されず「うんうんうんうん」になってしまいます。どこがおかしいのですか?
0676nobodyさん
2005/04/10(日) 23:51:06ID:???ドットの否定で逝けましたヒントありがとん
ereg_replace("^[^\.]+","*****" ,$str);
1. \n --> <BR>
2. \n --> \r\n
とかかな
■ このスレッドは過去ログ倉庫に格納されています