【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辺り
006865
05/03/09 10:42:13ID:???あ、そうですよね。失礼しました。
細工をするならリーダーの方で行うしかないのでしょうか?。
また、RSSで&を使用する事はモラル違反とはならないのでしょうか?。
006965
05/03/09 10:43:32ID:???どうにもならないのでしょうか。
007065
05/03/09 10:47:44ID:???ありがとうございますm(_)m
&が見えると先入観が^^;;
0071nobodyさん
05/03/09 12:44:45ID:???0072nobodyさん
05/03/09 12:48:45ID:???0075nobodyさん
05/03/09 13:18:58ID:???Perlの正規表現で有名なサイト(Perlメモ)にある正規表現を
preg_match で使用したところ、
Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset
と怒られてしまいました。
内容から察するに、preg_match でサポートしていない
正規表現だったためのエラーだと思うんですが、
どなたかPHPで動くものをご存知の方いらっしゃいますでしょうか?
文字コードはEUCを想定しています。
007775
05/03/09 17:36:34ID:???有難うございます。
\X を \x にしたところ、
Compilation failed: nothing to repeat at offset
という警告が出ました。
正規表現中のグループ化のカッコ(?: 〜 )
を外したところ、警告はなくなったのですが、
正常な文字でもひっかかるようになってしまいました。。
0078nobodyさん
05/03/10 10:51:45ID:BLVfW5EX今はstripslashesで¥を取り除いて処理しています。
ただサーバによっては文字化けしないので、stripslashesを使うと逆に文字化けするので、
stripslashesを使うのはちょっと怖いです。
これって正しいやり方なんでしょうか?ほかになにかいい方法があるのでしょうか?
よろしくお願いします。
008078
05/03/10 11:21:56ID:???有難うございます。ということは
function convert($str){
$result = htmlspecialchars($str);
if(get_magic_quotes_gpc()) {
$result = stripslashes($result);
}
return $result;
}
こんな感じでよろしいんですよね。
0081nobodyさん
05/03/10 16:07:59ID:???.newというバイナリが入っているんだけど、これは
何なんでしょうか。
0082nobadyさん
05/03/10 16:17:18ID:???<?php
$fp = fopen("log.dat", "a");
fseek($fp, 0);
flock($fp, LOCK_EX);
fwrite($fp, "xxxxx");
flock($fp, LOCK_UN);
fclose($fp);
?>
とやると、ファイルの最後に文字列が追記されていきます。
ファイルオープンモードを"a"で開いて、ファイルの最後ではなく、
最初に文字列を追記することはできますか?
0083nobodyさん
05/03/10 16:40:11ID:???バージョン管理用のゴミか差分じゃないかなぁ。
削除して問題ないですよ。
>>82
関数1つではできませんので、そういう処理をするロジックを書いてください。
0084nobodyさん
05/03/10 16:57:22ID:tcK+MKqwdbから一定時間経っても反応が無いとき(例えば5秒)、
タイムアウトさせる方法ってどうやるのでしょうか??
0085nobodyさん
05/03/10 17:12:06ID:krxtmGDVもとになるファイルの拡張子は
incでもhtmlでも何でもいいですよね?
この中で、この拡張子だと他のよりも読み込みが早い!
なんてのはないですか?
0086nobodyさん
05/03/10 17:37:08ID:???0087nobodyさん
05/03/10 17:47:38ID:???「ファイルネームによって読み込みの速度が違うのではないか?」
なんて、頭が固い私には全く思いつかなかった。
0088nobodyさん
05/03/10 18:44:56ID:???「a01」
というファイル名と
「a000000000000000000000000000000000000〜0000000000000000000000001」
というファイル名ではスクリプト全体としての速度は違うかもよ。
読み込み自体は変わらんと思うけど。
0090nobodyさん
05/03/10 19:15:55ID:???まさかそんな大事なことを無視してDBの使い方に終始してんじゃねーだろうな
0091nobodyさん
05/03/10 23:22:12ID:???を参考に XML-RPC を勉強してます。
例のように渡す値は 2 つだけ、と固定の場合は分かりましたが、
渡す値が可変の場合はどうしたらいいでしょうか?
例えば、果物の名前と個数を複数個渡す、という場合です。
0093nobodyさん
05/03/11 00:36:54ID:???ディレクトリエントリキャッシュあたりのような
偶然に左右される要素が影響してくるので、
キニスルナつーか気にしてもどうしようも無いって感じだろうね。
元質の話に戻ると、
拡張子は何でもいい、つーか拡張子が無くてもいい、
PHPの中の人はそのファイルに<?phpがあるかどうかだけ気にしている。
つー所でいいんでなかろうか?
0094nobodyさん
05/03/11 03:33:23ID:???ここを参考に機種依存文字を判定するFunctionを作っているのですが、
どうしても機種依存文字以外の文字も検出してしまいます。
$str = '文字列';
if (is_kisyu_sjis($str)) {
print "true";
} else {
print "false";
}
function is_kisyu_sjis($str) {
$ascii = '[\x00-\x7F]';
$sjis_twoBytes = '[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]';
$sjis_pattern='[\xA0-\xDF]|[\x87\xED\xEE\xFA-\xFC][\x40-\x7E\x80-\xFC]';
if (preg_match("/(($ascii|$sjis_twoBytes)*?)($sjis_pattern)/", $str)) {
return true;
}else {
return false;
}
}
正規表現がマズってますかね?
0095nobodyさん
05/03/11 22:42:09ID:???0096nobodyさん
05/03/11 23:43:35ID:???つか、正規表現はスレ違いかと
0097nobodyさん
05/03/12 00:44:49ID:???009894
05/03/12 16:03:01ID:???検索ですか・・
0099nobodyさん
05/03/12 23:00:23ID:???現スレまでに入って無いのって何か理由あったっけ?
とりあえず
正規表現道場@2ch Part4
http://pc5.2ch.net/test/read.cgi/php/1105930285/
0100nobodyさん
05/03/13 04:53:03ID:???PHP Version 4.3.10
EXPAT Version 1.95.6
XSLT support enabled
Sablotron Version 1.0.1
$data = xslt_process($xslt, $xml, $xsl, NULL);
上記からコンバートはできるのですが、書き出されたhtmlの
文字コードがutf-8になってくれません。
xslt_set_encoding($xslt, "UTF-8");
と指定すると、
Fatal error: Call to undefined function: xslt_set_encoding()
となりおかしいです。
PHP 4.3.10ではxslt_set_encoding()が使えると思うのですが。
0101nobodyさん
05/03/13 05:22:51ID:???Fatal error: Call to undefined function: xslt_set_encoding()
にならなかった。何が違うだろ。
0103nobodyさん
05/03/13 07:23:25ID:???|#ifdef HAVE_SABLOT_SET_ENCODING
|PHP_FE(xslt_set_encoding, NULL)
|#endif
みたいになってるし、マニュアルには
|Sablotronバックエンドを使用する際、このオプションは
|Sablotronにエンコーディングサポートを付けて
|コンパイルした場合のみ利用可能です。
とあるよ。xslt使ったこと無いから具体的にどうするのか知らないが。
0104nobodyさん
05/03/13 07:30:56ID:???こんなコメントも付いてた。
|The user has to explicitly compile sablotron with sablotron encoding functions
|in order for SablotSetEncoding to be enabled. config.m4 automatically checks for this...
0105nobodyさん
05/03/13 12:46:53ID:owz6Nafxincludeを利用して、メニューを埋め込むようにしたんですが、
階層が変わると、menu.php内に書かれたリンクが相対パスでは
上手くいかなくなるんですが、
絶対パス以外でなんか良い方法はありますか?
0106nobodyさん
05/03/13 13:08:42ID:IhUUdOoo・実際の動作を司っている「b.php」
という2つのファイルがあります。
b.phpはinclude("a.php");でa.phpの設定を受け継いでいます。
そのb.phpで出力された変数「$2ch」をa.phpで使うにはどうすればいいでしょうか。
0107nobodyさん
05/03/13 13:11:58ID:???0109nobodyさん
05/03/13 13:32:40ID:j3cG5KiD0111106
05/03/13 13:51:11ID:???変に例を作ったのが墓穴を掘りました。実際には文字から始めてます。
>>108
すいません忘れてください。
変数に変数を代入することは可能でしょうか?
例)
<form>
-略-
<input type=text name=yyyyy value=>
</form>
$zzzz = "<a href=$yyyyy>";
というように。
0112105
05/03/13 14:02:04ID:4ktgufgkmenu.phpにサイトマップやヘルプなどへのリンクを張って
includeを使用して、全ファイルで共有したいのですが、
サイトマップなどへのリンクを相対パスで記述した場合、
フォルダの階層が変わると、上手くいきません。
menu.phpのincludeは
<?include($_SERVER['DOCUMENT_ROOT'] . 'menu.php') ?>
を使用して、階層が変わっても対処できたんですが、
同じような感じでmenu.php内のリンクに対しても対処方法はないでしょうか?
0113nobodyさん
05/03/13 14:13:13ID:???・htmlでbase要素を用いる
・メニュー内のリンクを/からのパスにする
・menu.phpに相対パスを計算させる
0114105
05/03/13 14:29:21ID:4ktgufgkmenu.phpに相対パスを計算させる
とはどういう事ですか?
0119100
05/03/13 19:14:17ID:???どうやって指定するのでしょうか。
--with-xslt-sablot以外になさそうなのですが。
./configureの中身は読んでみましたがさっぱりでした。
0120nobodyさん
05/03/13 21:02:24ID:???読むのならむしろ libsablotron の configure とか /usr/include/sablot.h かと。
0121nobodyさん
05/03/13 21:15:58ID:???だからexpatはともかく、sablotは使っとらんので知らんがな。
>--with-xslt-sablot以外になさそう
それはPHPのconfigureオプションであって、PHPで該当するオプションは
sablotの設定を見て自動で設定するからいらない。
コメントで書いてあるのは、それ故「必要ならsablotの設定をちゃんとしろ」ってこと。
0122100
05/03/14 03:18:42ID:???ないみたいです。
gingerall にいったら、新しい1.0.2が出てたのでそれをインスコ中
0123100
05/03/14 05:32:21ID:???http://bugs.php.net/bug.php?id=21427
これを参考にしたんですけど。
●Sablot-1.0.2
$ ./configure --with-expat=/usr/local --with-iconv=/usr/local
●php-4.3.10
./configure --with-apxs2=/usr/local/apache2/bin/apxs \
--enable-mbstring \
--enable-mbstr-enc-trans \
--enable-mbregex \
--enable-zend-multibyte \
--with-zlib \
--with-mysql=/usr/local/mysql \
--with-zlib-dir=/usr/lib \
--with-gd \
--with-jpeg-dir=/usr/local \
--with-png-dir=/usr/local \
--with-xml \
--with-dom=/usr/local \
--enable-xslt \
--with-xslt-sablot=/usr/local \
--with-iconv-dir=/usr/local \
--with-expat-dir=/usr/local
expatとiconvのインストールディレクトリ合わせてるんですけど
だめなんですよ。
0124nobodyさん
05/03/15 02:58:15ID:hZ3yLB9y携帯で着メロのダウンロードサイトを作成しているのですが、
開発環境のWindows版ではうまく動作するのですが、
本番環境のLinux版ではダウンロードしようとするとで502エラーを返してきます
fopen(ファイル)
fput(ファイルの中身吐き出し)
fclose
って方法で接続端末に着メロを出力しているのですが、
なぜかうまくいきません。
502エラーってことはApacheの設定が悪いのでしょうか?
そして、対処法はどのようにすればよろしいでしょうか?
0127nobodyさん
05/03/15 21:24:22ID:???0128nobodyさん
05/03/16 22:49:46ID:???00分になりアクセスがあったらファイルを出力し次の00分になるまで出力はなし。見たいな考え方でいいですか?
この考え方だと一回もアクセスがないと出力されないことになりますが、何か便利な関数があるんですか?
0129nobodyさん
05/03/16 23:10:09ID:???これが使えないようなら、データ投入時や表示時になんとかするしかない。
表示時(アクセス時)に必要なデータをかき集められるものなら、表示時に時間をチェックして誤魔化す。
データ投入時にあらかじめページを作成しておいて、表示時の時間チェックと組み合わせるのもありだな。
実行環境ややりたい事が分からんことには、可能か不可能かさえも分からんよ。
0130nobodyさん
05/03/16 23:49:33ID:???背景が透過gifな画像をリサイズした場合に透過ではなくなるのですが、
これを透過のままリサイズ出来ないのでしょうか?。
出来るのであれば参考になるサイトまたは方法を教えてください。
0131nobodyさん
05/03/17 10:53:09ID:???基本は、>>129が言うように、OSの自動処理を使う。
連鯖などでcrontabが使えない場合、いかにしてトリガを引くか、それを考える。
・WEBアクセスの際に前回処理時間と比較しトリガ発生→アクセス無ければ無意味
・自宅のPCのタスクスケージュラや、DiCE等で定期的にトリガプログラムへアクセス →PC付けっぱなし必須
・携帯電話などで自分でトリガプログラムに定期的にアクセス → 鬱陶しい、眠れない、パケ代かさむ
さぁ、どれにする?
0132128
05/03/17 11:48:17ID:???リナックスのことワカメだから本買ってしらべてみます
0134nobodyさん
05/03/17 17:42:24ID:???こんな感じ。フルカラーじゃないから汚いけど。
$src_info = getimagesize ($src_path);
$src_image = imagecreatefromgif ($src_path);
$dst_image = imagecreate ($dst_width, $dst_height);
$trans = imagecolortransparent ($src_image);
if ($trans) {
imagepalettecopy ($dst_image, $src_image);
imagefill ($dst_image, 0, 0, $trans);
imagecolortransparent ($dst_image, $trans);
}
imagecopyresized ($dst_image, $src_image, 0, 0, 0, 0, $dst_width, $dst_height, $src_info[0], $src_info[1]);
imagegif ($dst_image, $dst_path);
0135128
05/03/17 18:11:56ID:???使ってるサーバーがカゴヤなんだけど
cron設定はノーサポートでおしえてくれないや
自分なりに考えてみたんだけど
カゴヤ管理画面のCRON設定 で
*/1 * * * * /home/カゴヤアカウント/public_html/count.php
のみ入力してみたんだけどでなにがちがうんですかね?
/bin/sh: /home/カゴヤアカウント/public_html/count.php: cannot execute binary file
ってなのがメールで送られてくるんだけど
エロイ人教えてください
0136nobodyさん
05/03/17 18:24:21ID:???エロくはないけど、
たぶん、
*/1 * * * * php /home/カゴヤアカウント/public_html/count.php
だろうね。
それでもエラーが出るようなら、phpのパスを調べれ。・
0137128
05/03/17 18:41:56ID:???/bin/sh: php: command not found
のエラーのメールがきますわ
count.phpのパーミッソンハ705
中身は
<?/* シンプルカウンタ by ToR tp://php.s3.to 2000/10/18 */
$fp = @fopen("count.txt","r+") or die("ファイルが開けません");
$count = fgets($fp, 64);
$count++;
rewind($fp);//set_file_buffer($fp, 0);
flock($fp, LOCK_EX);
fputs($fp, $count);
fclose($fp);echo $count;?>
何がちがうんですかね?
0138nobodyさん
05/03/17 18:45:35ID:???>>136 wrote
> それでもエラーが出るようなら、phpのパスを調べれ
環境変数、特にコマンドの検索場所を指すPATHが違う。
0141128
05/03/17 19:10:27ID:???できたよありがとうぅ
こんなん何処でおしえてもらうん?
専門学校かね?
んまありがとー
0142130
05/03/17 19:11:49ID:???ありがとうございます。
imagecolortransparent()の返り値が0の場合があるのでif ($trans) {の分岐を外して
実行しているのですが、返り値が0以外の場合には透過になりません。
$trans = imagecolortransparent ($src_image);
imagepalettecopy ($dst_image, $src_image);
imagefill ($dst_image, 0, 0, $trans);
imagecolortransparent ($dst_image, $trans);
パレットをコピーし透過になる色で塗りつぶし、その色を透過に指定しているので
正しく透過出来そうだと想うのですが、これはフルカラーではないという所が問題
なのでしょうか?。
imagecreatetruecolor()で作成した場合は正しく利用できないのでしょうか。
塗りつぶしをしているので問題がある場合もありそうですが、とりあえず
$trans = 0で指定しています。
0143nobodyさん
05/03/17 19:52:29ID:???AnHttpDでISAPI経由でPHPを動かしているのですが
ISAPIだと設置した掲示板やチャット等で、IPやHOSTの情報を取得してくれません。
CGI経由だと取得してくれるのですが、この問題を解決する方法はありますか?
■バージョン
PHP 5.0.3
AnHttpD1.42n
0144nobodyさん
05/03/17 20:22:09ID:???PHPのバージョンを変えてみるという手がある。
が、「問題を解決する方法」としては選択しづらいだろうね。
つか、なんでバージョンでその辺が変わるのかねぇ>PHP
サーバ側とのAPIが変わってるわけでもないのに。
0145143
05/03/17 20:25:16ID:???スクリプト上で取得の方法を変えたら出来ました。
(前)$ip = getenv("REMOTE_ADDR");
(後)$ip = $_SERVER["REMOTE_ADDR"];
お騒がせしますた(;´д`)
0147nobodyさん
05/03/17 21:12:04ID:PAcs7vRbrequire_once('../main.inc');
と相対パスで一つ上を指定したいんだけど、open_basedirをどう設定すればいい?
0150nobodyさん
05/03/18 10:44:51ID:0xXwO3moAUTO指定でEUCに変換すると
preg_replace("/(\r\n|\r)/","\n",$str);
$str = mb_convert_encoding($str,"EUC","AUTO");
毎回ではないのだが、頻繁にエンコードに失敗するのですが
Warning: mb_convert_encoding(): Unable to detect character encoding in hoge.php on line ○○
何故?改行コードでエンコードの判断してるの?
エンコードしてから改行コードの変換をすれば良いって問題なんかな?
formはSJISで、PHPのバージョンは4.3.4です。
0151nobodyさん
05/03/18 11:00:56ID:???SJISでスクリプト掻いてますか
EUCですか?
0153nobodyさん
05/03/18 11:44:31ID:???formがSJISならSJISで来る確率が高かろうから'auto'じゃなくて
'SJIS, EUC-JP, UTF-8, JIS, ASCII'とでも指定してみれば
私はhiddenに判定文字列入れてmb_detect_encodingやってるけども
0156nobodyさん
05/03/18 14:09:11ID:???0157nobodyさん
05/03/18 15:47:30ID:H8eZrdKtErrorDocument 404 /404.php
として404をPHPに飛ばしてるのですが
このPHPで本来どこにアクセスされたのかを
知ることってできますか?
0158nobodyさん
05/03/18 16:06:59ID:???0160nobodyさん
05/03/18 17:05:03ID:???0162nobodyさん
05/03/19 00:12:12ID:???ファイルの行数を取得したいのですが、
極力負荷を低くやりたいです。
ファイルのサイズはデカくて、
1行の文字数は不定なのですが
なにかウマい方法はないでしょうか?
0164nobodyさん
05/03/19 00:53:10ID:???0165nobodyさん
05/03/19 00:57:40ID:???>>163
す、すみません…
バイナリは扱ったことがないので分からないのですが
もう少し詳しく教えていただけませんか?
>>164
ファイルがかなりデカいので、fileで読み込むと悲惨なことになりそうです…
■ このスレッドは過去ログ倉庫に格納されています