【PHP】質問スレッドpart18【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/06/14 14:36ID:???・新規質問の方は上げてください。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
抜けているものがあったら補足願います
0175nobodyさん
04/06/18 16:52ID:???質問する以前のレベルだな
0176nobodyさん
04/06/18 17:14ID:???遅レスだが、IEの場合キャッシュがオフだとbmpで保存するらしい
明示的にキャッシュをオンにするといいかも
0177nobodyさん
04/06/18 17:25ID:WxV310Yf画像を削除してその後追加すると削除した画像が一度ページに映り、更新しないと後で追加した
画像が表示されません。。画像の削除は別ファイルで行っています。
どうにか画像追加したときにページの更新まで出来ませんか?
0178nobodyさん
04/06/18 17:55ID:w9rleEeTこのディレクトリーにrwxrwxrwxというパーミッションを与えておいて
以下のスクリプトでaaaの中にbbbというディレクトリを作成して、
bbbの中にfileという名前のファイルを作成しようとしているのですが
bbbまでは作成されるもののfileが作成されません。
<?php
mkdir("aaa/bbb");
$OUT = fopen("aaa/bbb/file", 'w');
flock($OUT, 2);
fwrite($OUT, "test");
flock($OUT, 3);
fclose($OUT);
?>
レンタルサーバーでやってましたが、ほかのレンタルサーバーでもダメでした。
どうやらセーフモードで制限を受けているためのようなのですがセーフモードでも
上記の操作を行う方法が他にあるでしょうか?
よろしくお願いいたします。
0179nobodyさん
04/06/18 18:00ID:???0180178
04/06/18 18:04ID:???bbbのパーミッションはrwxr-xr-xです。
オーナーは自分のアカウントでなくapacheというアカウントになっています。
0182nobodyさん
04/06/18 18:13ID:???class test {
function type( $type ) {
$stack = array();
print( gettype( $stack ) );
function test( $test ) {
global $stack;
print( gettype( $stack ) .": グローバルにした時の変数の型" );
print $test;
}
test( $type );
}
}
$t = new test;
$success = "成功" ;
$t->type( $success );
?>
としたときに、
gettype( $stack )
がNULLを返さずに、arrayを返すようにするにはどうしたらいいですか?
0183nobodyさん
04/06/18 18:18ID:???0184nobodyさん
04/06/18 18:25ID:???0185nobodyさん
04/06/18 18:26ID:???どう考えてもおかしい
0186182
04/06/18 18:30ID:???>>182の文はもとは複雑だったので、簡略化してモデルとして書きました。
本当は上記のfunction typeはXMLパーサーで呼び出されるハンドラ関数なんです。
そして、$stackには現在のXML要素を収めたい配列なんですが、
開始要素、データ、終了要素の各functionで$stackを共有させたいのですが、
できなくて調べていたら、global $stackで共有させると、
データ型が失われて、配列として扱えなくなっているんです…。
ググッてみても、良い参考例がなくて…。かといって、クラス変数にしてもちゃんと
扱ってもらえないので、2日ほどはまっています…。
0187184
04/06/18 18:34ID:???class->function(XMLパーサ)->function(XML処理部分の関数)は成り立つのかと
思ったんですが…。
各function(XML処理部分)を別クラスにまとめた方がいいんでしょうか?
0188nobodyさん
04/06/18 19:33ID:???マニュアル読んだ?header()の項目からたどれば、
ttp://jp.php.net/manual/ja/function.session-cache-limiter.php
こことか
ttp://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
ここを見れば判りそうなもんだけど
0189nobodyさん
04/06/18 19:37ID:???global $statck; がnullになるのは当然。
存在しない変数のnull以外の型情報が返る事はありえない。
0190189
04/06/18 19:39ID:???0191nobodyさん
04/06/18 19:45ID:???それはわかっているし、定義をしているけれど、
クラス内のメソッド内で定義した変数をグローバル変数にして
メソッド内のユーザー定義関数からグローバル変数を参照できない場合、
どうしたらいいのかっていうことを知りたいんだ…。
再利用制なんか考えずに、ひとつのファイルにまとめちゃえばいいんだろうけれどさ。
0193nobodyさん
04/06/18 19:53ID:???初歩の初歩すぎて書くのば馬鹿馬鹿しいが、出来ません。
どうやればできると思ったんだ?
グローバル変数を呼び込んでそれを書き換える。
プログラミング言語のスコープ概念を知りましょう。
> メソッド内のユーザー定義関数からグローバル変数を参照できない
さっきも書いたがグローバル変数は参照できる!
ユーザー定義関数はグローバルスコープでやる!
ユーザー定義関数はメソッド内で定義できない。
クラス概念が分かってないようだが、xmlパーサー関数のクラス粒度が
分からないならpearのxml_htmlsaxを読むと勉強になる。
0194nobodyさん
04/06/18 19:55ID:???こいつも釣りだな。
0195nobodyさん
04/06/18 19:58ID:???クラスの振る舞い定義の中に振る舞い定義があるとはw
ハライテー
0196nobodyさん
04/06/18 19:58ID:???0197nobodyさん
04/06/18 20:11ID:???クラスはともかくスコープが分からなきゃハンドラかけんだろ。
それはわかってる、と言いながらその前の指摘を無視して終わりのない話を
はじめてるあたり、やや釣り的な特徴が出てると言えるな。
0198187
04/06/18 22:08ID:???>> メソッド内で定義した変数をグローバル変数にして
> 初歩の初歩すぎて書くのば馬鹿馬鹿しいが、出来ません。
> どうやればできると思ったんだ?
単純に、メソッドとして定義したfunctionに入れ子にしたfunctionが正常に動作したから。
> クラス概念が分かってないようだが、xmlパーサー関数のクラス粒度が
> 分からないならpearのxml_htmlsaxを読むと勉強になる。
クラスとPEARの繋がりを不思議に思ったけれど、実際に Parser.php を読んで
オブジェクト内部でXMLパーサを使用する場合には、
xml_set_object
を利用しないといけないのね。
どうもありがとう。
他はバカばっかだな。
0199nobodyさん
04/06/18 22:45ID:???$stackをグローバル変数にする意味あるの?
class test {
var $stack;
function type( $type ) {
$this->stack = array();
// 以下略
}
}
みたいにすればいいだけの話では。
0200nobodyさん
04/06/18 23:29ID:???なんでネストした関数が動作するとローカルスコープの変数をグローバル化できることになるのか分からん。
これが出来たらスコープもそうだが関数型プログラミングの存在意義そのものもない。
xml_set_objを使えばナビゲータビリティを双方向化できるが、ハンドラクラス内でハンドラをコールする側を
呼べるようになることと、グローバルスコープの変数を参照することとはまるで関係がない。
(ハンドラに特化したクラスのなかでパースするというのも奇怪なクラス関係じゃないか・・・)
しかもparser.phpってPear::XMLのでしょ? >>193のいうhtmlsaxは全く別のパッケじゃなかったっけ。
君たち会話が成り立ってませんよ。
0202nobodyさん
04/06/18 23:35ID:+ev/OK60もういいんじゃない。
0203nobodyさん
04/06/19 00:59ID:???ですよね?
だけどjpgで保存できませんyo
0204nobodyさん
04/06/19 05:58ID:???stream_context_createでhttpのheaderに Range: bytes=256-\r\n を追加してコンテクストリソースを作った。
よしということで、file_get_contents('http://example.com/example.html', null, $context); とやってみたんだけど、
Warning: file_get_contents(http://example. . . ): failed to open stream: HTTP request failed! HTTP/1.1 206 Partial Content
というエラーがでてデータが取れない。
206が返っているからサーバは問題なく処理したようなのだが、
となるとphpが206応答をハンドリングできないということなのだろうか。
結局ソケットストリームでちまちまとやることになったのだが、上の疑問は残った。
コンテクストを使った部分的GETは出来るぞ、とかトリビアがあれば希望。
0205204
04/06/19 06:14ID:???TCPパケット見たらやっぱりデータの受信自体には成功してる。
なんだろう。PHP 5.0.0RC3なんだけど、RCだっつーのにバグかな、、。
0208nobodyさん
04/06/19 18:00ID:???$date = "2004-06-17 12:00:00";
sscanf( $date, "%s-%s-%s %s:%s:%s", &$Y, &$M, &$D, &$H, &$m, &$S );
print( $Y.$M.$D.$H.$m.$s );
を
20040617120000
として出力したいんですが、
2004-06-17
と出力されます。いろいろ試してみた結果、日付に含まれる「-」が原因だとわかったのですが、
意図した出力にするためには、どうしたらいいのかわかりません。
sscanfのリファレンスを見ても、何も書いていないので、
おそらくフォーマット文字列と関係あるとは思うのですが…。
0209nobodyさん
04/06/19 18:17ID:???天然ですか
>>208
http://jp.php.net/sprintf
0210nobodyさん
04/06/19 21:06ID:???どういう方法が一般的でしょうか?
期限をDBへ保存するので、その数字を見たときにすぐ分かるようにもしたいので
time関数以外でしたいのですが。
今のところ、date('YmdGis')の形式の数字を比較という方法を思いついたのですが、ほかに一般的な方法ありますか?
0211nobodyさん
04/06/19 21:25ID:???DBではTIMESTAMP型で記録しておけば、取り出したときにはPHPの文字列型に
なっているはずだから、それを strtotime() で数値 (UNIX epoch からの
通算秒)に変換するとか。
0212vv
04/06/19 22:12ID:???クラスをまとめた.phpファイルをrequireして読み込むと
Echoしていないのにブラウザにクラスの内容が表示されてしまいます
require ("/class.php");
とすると
class userclass { var $name; var $region・・・
という風にブラウザ上部にクラスの内容が表示されてしまいます
これって何??
0213nobodyさん
04/06/19 23:08ID:????>
で囲んでる?
0214nobodyさん
04/06/19 23:22ID:???$date = "2004-06-17 12:00:00";
print(date("YmdHis", strtotime($date)));
0215212
04/06/20 00:15ID:TK4JxxLi須磨祖
0216208
04/06/20 00:54ID:???ありがとう。今実行して動作確認を行って、意図した結果になりました。
ところで、>>209のsprintでどうやったら、意図する結果になるんですか?
思いつく限り、やってみたんですが、実行結果と意図が違うのですが…。
0217208
04/06/20 00:56ID:???おかげで英文形式の日付なんてのも勉強になりました。
http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html#SEC111
0218nobodyさん
04/06/20 03:09ID:???You should press Tablator ten times,
...And EnterKey! :-)
0219nobodyさん
04/06/20 03:09ID:???0220vvv
04/06/20 04:56ID:???無理なんでしょうか?
class userclass{
var $name;
var $address;
}
$class=new userclass;
$class->name="名前";
$class->address="住所";
$value["20040620"]=$class;
$s = serialize($value);
$fp = fopen($path, "w");
flock($fp,LOCK_EX);
fputs($fp, $s);
flock($fp,LOCK_UN);
fclose($fp);
0222vvv
04/06/20 11:22ID:???保存自体ができんのよ
0223nobodyさん
04/06/20 12:15ID:???うちでは上のスクリプトに$pathを設定したら動いたよ。unserializeも確認済み。
0224220
04/06/20 12:49ID:???痛すぎた スマソ
0225nobodyさん
04/06/20 13:19ID:e+KlAhh1,r' /=ミ
/ 彡ll',''´
. / 彡lll
!-- .、 ,、、、、,,, 彡lノ
l,,,,,__ / ___ 'r''゙ヽ
. |`゙'' ./ `'゙'''" .〉,l |
|. ,' //
. ',. ,' , r'
. ゙, ゙'ー ‐` l |
゙、''゙ ,,、二''‐ ノ l、
''''''''7'ヽ ''' / /`〉`゙T''''''''''
l ` 、,,,,、- ' " / /.| |
. | | .l i / ./ | |
| | | l / ./ .| |
. | | | l / / | |
| | | ', / / l .l
【ゴールデンレス】
このレスを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください。
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です
0226nobodyさん
04/06/20 15:33ID:???例えば掲示板の本文($msg)の中のJsky絵文字($E> 等)だけに
htmlspecialcharsを施したくない場合はどうすればいいでしょうか。
0228nobodyさん
04/06/20 16:02ID:6Dgt7SHl$im2 = ImageCreateFromJpeg("test.jpg");
header("Content-type: image/jpeg");
ImageJpeg($im2);
ImageDestroy($im2);
というphpファイルにアクセスしてブラウザに表示させようと
しているのですが、うまく表示されません。(IEだと壊れたイメージ
アイコンになる)
ImageJpeg($im2,"o.jpg");
としてファイルに書き出して、そのファイルにアクセスすると
ちゃんと見れます。
なんか原因わかりますでしょうか。
OS: linux
PHP: 4.1.2
apache: 1.3
GD version: 1.6.2 or higher
となっています。
0229nobodyさん
04/06/20 18:03ID:???0231nobodyさん
04/06/20 18:49ID:???しかしデータの受信に成功してるという部分が読めてないことを考え合わせるとマニュアル権威言霊主義かな。
ファイルが何なのか分かっていないらしいから、一般的なデータ構造についてはまだググってないと見える。
アンチマニュアルのあつまるこのスレではかなりの希少思想者だと言える。
とりあえずエラーを吐いてるのはfile.cではなく別のソース部分だよ、とヒントを与えてみるが、さて。
0232nobodyさん
04/06/20 19:08ID:QviSJ75H和訳できんのかなんていってるんだからただの糞厨房にきまってんだろ。
しかもファイル全体を読み込むからとか言語障害くせーぞ。
すげー無駄だわ。
>>228
スクリプトは問題ないし、GDのバージョンかなあ。
0233nobodyさん
04/06/20 19:39ID:???つーかRedhat?
あれにデフォルトでのってるphpを使うといろいろ苦労が絶えないらしいね。
0234204
04/06/20 20:16ID:???>>231が少し書いているが、これは本質的にはfopenの問題なのでfile_get_contents()だけじゃなく、
fopenのhttpラッパーをとるhttpアクセスすべて(要するにコンテクストをつかったもの)で起こる。
因みに、本家のバグリポートはこの問題の修正には極めて消極的で、
あきらめるしかないようだった。
荒れぎみなのでこの話はこれで終了ということにしてほしい。
以上。
0235nobodyさん
04/06/20 20:32ID:Uv3J3abeバッチファイルからローカルでPHPを処理するプログラムを書きました。
ファイル名の一括置換プログラムなんですが、
foreach($rename as $var){ //$renameは置換条件を記した配列
$n = $newfilename;
$newfilename = preg_replace("/$var[0]/i","$var[1]",$newfilename);
if($n != $newfilename) print "$n\n"; //四行目
}
として、preg_replaceで文字置換を行っているんですが、
日本語ファイルの場合、必ず ー(伸ばす音) が ・ に文字化けします。
四行目では、preg_replaceを通す前と通ったあとが違う場合に変化を表示させようと
したのですが、改名条件にはまったく ー を入れてないのに、
文字が変わってしまいます。
本バージョンで、文字化けなどのバグは報告されたりしてるんでしょうか
ググったら前のバージョンでの文字化けの情報があり、 ←参照ttp://jp.xoops.org/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=1998&forum=11&move=next&topic_time=1063857527
php.iniの設定をいじってはみたのですが変わりません。
0236nobodyさん
04/06/20 20:41ID:???キチンと質問文かけば偉い人が教えてくれるかも。
0237nobodyさん
04/06/20 20:51ID:???そうなるとphpの問題じゃなくなるか。環境しだいですな。
0238nobodyさん
04/06/20 20:55ID:???ところでphpの日本ユーザ会ってアクティブにやってんの?
まるで話を聞かないんだが。
googleの検索順位ではいつのまにかphp研究所を抜いてるね。
0239nobodyさん
04/06/20 22:00ID:PqNZ37ceスクリプトの途中で
いろんなファイルにリダイレクトしたいのですが
どうしたらよいですか?
0240228
04/06/20 22:12ID:???どうも。結局原因不明のままファイルに書き出すように
仕様変更しました。
ちなみにDebian (woody)のパッケージ物でした。
本番環境は自分のいじれない環境なので、自力コンパイル
することもできず。。
0241235
04/06/20 23:01ID:Uv3J3abe文字コードはphp.ini で
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none
にあわせたんですが、どこの設定を見直せばいいのでしょう
参考の参考ていどでもアドバイスがいただければお願いします
0242nobodyさん
04/06/20 23:11ID:???>PHP: 4.1.2
この頃のPHPでoutput_handlerにmb_output_handlerを使っていると、
Content-Typeを見ずに画像もコード変換するので画像が壊れるんだが
(phpinfoのロゴまで壊れてくれる)、その現象じゃないのか?
0243nobodyさん
04/06/20 23:11ID:???0244nobodyさん
04/06/20 23:20ID:???そんなことはない。確かにメジャーな組み合わせだけどね。
Webサーバ用インターフェースはCGIも含めて色々あるし、CLI(コマンドライン)版もある。
0247nobodyさん
04/06/20 23:36ID:???PHP Warning: Unknown(): Unable to load dynamic library '/usr/lib/php/extensions/mysql.so' - libmysqlclient.so.12: cannot open shared object file: No such file or directory in Unknown on line 0
orz
0249nobodyさん
04/06/20 23:44ID:???0250nobodyさん
04/06/20 23:54ID:???>>247のエラーは、php.iniにauto_prepend_fileを設定してあるんではないかと。
外しているかもしれんが。
設定してあったとしても、そういうエラーが出るのは不思議だが、
使ったこと無いので、わからんぽ。
0251nobodyさん
04/06/21 00:19ID:???winの文字コードからスクリプト内で扱っている文字コード(euc-jp)に
コンバートして、書き込み時は逆変換すればおkと思われ。
0252nobodyさん
04/06/21 00:26ID:???Error in argument 1, char 2: option not found r
Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>]
php <file> [args...]
-a Run interactively
-C Do not chdir to the script's directory
-c <path>|<file> Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value 'bar'
-e Generate extended information for debugger/profiler
-f <file> Parse <file>. Implies `-q'
-h This help
-i PHP information
-l Syntax check only (lint)
-m Show compiled in modules
-q Quiet-mode. Suppress HTTP Header output.
-s Display colour syntax highlighted source.
-v Version number
-w Display source with stripped comments and whitespace.
-z <file> Load Zend extension <file>.
できないヽ(`Д´)ノ
0254nobodyさん
04/06/21 00:32ID:???0255nobodyさん
04/06/21 00:39ID:rIRMytTYzlib libjpeg libpng GDをインストールした後、
./configure --with-zlib-dir=/usr/local/lib --with-gd --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/local/lib
make
make install
としたのですが、
なにか他にやることがあるのでしょうか?
OS: linux
PHP: 4.3.6
apache: 1.3
0256nobodyさん
04/06/21 01:36ID:???FAQ を読むこと
0257235
04/06/21 02:16ID:U3ATJTTUアドバイスありがとうございます。
それってphp.iniの設定ですよね?
今色々調べながら苦戦中です。文字コードを変えたら
日本語がまったく表示できなくなったりして
0258nobodyさん
04/06/21 02:31ID:???一応PHP.net等のFAQは見てみたのですが、参考になりそうなのがなさそうでした。
見つけられないだけかもしれません。
PHP付属のがあるので、GDは特に自分ではインストールする必要がなかったのでしょうか
0259nobodyさん
04/06/21 02:48ID:???iniの設定であわせてもいいし、251にあるようにスクリプト内で変換してもいい。
phpで参照する場合には、内部エンコードに合わせ、最終的な出力時にはwinの
コードにあわせて変えればいいだけ。
必要なことは全部マニュアルに書いてあるので、他は色々調べる必要なし。
http://www.php.net/mbstring
要するに内部エンコとwinのエンコが違うなら、当然一手間かける必要があるということ。
文字コードはいつまでもついて回るので自分で分かったと思えるまでやったほうがいいのです。
0260257
04/06/21 03:19ID:U3ATJTTU何度もすみません、ご指定のページを自分でも見つけてやってはみたのですが、
もとのphp.iniに追加モジュールのphp_mbstring.dllをsystem32に追加して
追加モジュールを受けるように php.iniのその行の;をはずしました。
あとは例2にあるようなEUC-JP ユーザ用のphp.iniの設定に直せばいいんですよね
php.iniはそのページの設定どおりに変更したはずなんですが、どうしても
伸ばす音が文字化けが消えないのですが、他にいじるところはあるのでしょうか
preg_replaceでもmb_ereg_replaceでも変わらないのですが・・・
0261nobodyさん
04/06/21 03:28ID:???windowsから受け取ったらeuc-jpに、windowsに渡すときはsjisにコンバートかければよいかと。
mb_convert_encoding($string, 'euc-jp', 'sjis');みたいな感じでつ。
0262nobodyさん
04/06/21 03:29ID:???まあそのへんは適当に(^^);
0263nobodyさん
04/06/21 04:38ID:t8xSnGRb渡す前の中身は "%001%002%003%004%005" なのですが、これを$_GETや$_POSTで拾おうとすると
"\01\02\03\04\05\" という文字列に変わってしまっています。
これを元に戻す、もしくは上手く拾う方法は無いでしょうか?
0264263
04/06/21 09:55ID:???stripslashesでした。
0269nobodyさん
04/06/21 16:30ID:???libmysqlclient.so.12 をPHPがロードしようとして、
見付からなくて止まってるんだな。
find /usr -name libmysqlclient.so.12 で探して、
見つけたディレクトリを /etc/ld.so.conf に書き加えて、
ldconfig しとけ。
0270sage
04/06/21 17:23ID:???umask(0);
if(mkdir("/hoge/hoge", 0707)) {
...
} else {
...
}
これで同名のディレクトリが存在した場合に
Warning: mkdir(/hoge/hoge): File exists in /***/result.php on line --
と、警告がでてしまいます(処理は流れきっているぽい)
できればこの警告を表示させたくないのですが
なにか対処方法はありますでしょうか
0271sage
04/06/21 17:24ID:???umask(0);
if(mkdir("/hoge/hoge", 0707)) {
...
} else {
...
}
これで同名のディレクトリが存在した場合に
Warning: mkdir(/hoge/hoge): File exists in /***/result.php on line --
と、警告がでてしまいます(処理は流れきっているぽい)
できればこの警告を表示させたくないのですが
なにか対処方法はありますでしょうか
0272nobodyさん
04/06/21 17:52ID:???umask(0);
if(!file_exists("/hoge/hoge") && mkdir("/hoge/hoge", 0707)) {
...
} else {
...
}
でどぅ?
単にエラー表示したくないのなら
error_reporting(0);
0273nobodyさん
04/06/21 18:43ID:???0274nobodyさん
04/06/21 18:46ID:???そのエラーの発生要因が判っていて、かつ、
そのエラー発生を防ぐ為だけにとまどろっこしくなる(複雑になる)
のなら、エラー制御演算子
ttp://jp.php.net/manual/ja/language.operators.errorcontrol.php
を使うといいかも。
臭いものには蓋的な解決法なんで、>>272の方がいいけど
■ このスレッドは過去ログ倉庫に格納されています