【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辺り
0016nobodyさん
05/03/04 13:56:36ID:???よーしパパへそくりしちゃうぞー
$i=2;
while(1){
$i*=2;
echo$i,"\n";
if(is_infinite($i))break;
}
0018nobodyさん
05/03/04 15:44:14ID:???INF
で終了。@32bitなLinux
0019nobodyさん
05/03/04 16:29:47ID:???Fatal error: Call to undefined function: is_infinite()
自分には、かみさんがいませんから。
残念!
0020nobodyさん
05/03/04 16:35:56ID:???妊婦
で終了。予定日:3月12日
0021nobodyさん
05/03/04 18:28:58ID:???0022nobodyさん
05/03/06 03:31:13ID:pz614Rae具体的には、ブラウザでサーバー内ファイルの圧縮・解凍操作を行いたいと思っています。
どうすればよいのでしょうか?
【実際のテスト結果】
phpファイルと解凍したいファイルは同じフォルダ内で以下のようにすると・・・
<?php
echo system("pwd\n");
echo system("unzip file.zip\n");
?>
-->(phpファイルの置かれた場所がちゃんと表示される)
-->127
(unzipコマンドの返り値が”127”のみでで解凍されている様子はない)
<?php
echo system("echo hello\n");
?>
-->hello
(正常)
<?php
echo system("rm file.zip\n");
-->0
(正常に削除される)
【環境】
FreeBSD 4.7
PHP4.3.9(apacheのモジュールとして動作)
Apache/1.3.33
0023nobodyさん
05/03/06 04:30:41ID:???アクセス権限を確認しる。
0024nobodyさん
05/03/06 04:37:48ID:???system('unzip file.zip 2>&1')
みたいにして標準エラーの内容を見る、とかしてみたら?
あとはエラーが127だからunzipがちゃんとパスの通った場所にあるのか確認
002522
05/03/06 05:19:00ID:pz614Rae答えになってないかもしれませんが・・・
とあるレンタルサーバーのVPSプランを利用しているんですが、ユーザー名を username とすると
phpinfo()で見る限り、apacheのユーザーと _SERVER["USER"] は usernameになっています。
sshで usernameでログインした場合、 unzip , zip ともに可能です。
念のためですが、 >>22 の 【実際のテスト結果】 はブラウザからのアクセスでの結果です。
>>24
> system('unzip file.zip 2>&1')
を実行すると 1127が帰ってきました。
googleで検索してるんですが検索の仕方が悪いのか このエラーの意味がわかりません。
unzipのパスについては、sshでログインした場合にunzipは可能なのですが、それとはまた違うのでしょうか?
0026nobodyさん
05/03/06 05:48:59ID:???>unzipのパスについては、sshでログインした場合にunzipは可能なのですが、
>それとはまた違うのでしょうか?
違う。両方でwhoamiしてみ。
002722
05/03/06 08:33:52ID:pz614Rae>>24
>>26
感謝!解決しました!
実行権限、コマンドのパス、VPSであることあたりがからんでたようです。
(VPSがからんでるかは微妙ですが)
【結果報告】
whoamiも両方試すと ブラウザからはwhoamiができませんでした。
よく確認してみると、同じディレクトリでもブラウザからとSSHではpwdの出力が違うことに気づきました。
apacheで見えてない(ブラウザからのpwdでは見えてない)上位のディレクトリに whoamiとunzipの実行ファイル(?)があったのでそれをapacheで見えるディレクトリにコピーして、権限設定。
phpのsystemでそのコピーした実行ファイルのパスを指定したら、実行できました。
*表現がおかしいところがあると思いますが、そこはごめんなさい
皆様の助言のおかげで解決しました、ありがとうございました!
0028nobodyさん
05/03/06 18:14:42ID:pWV0LcHNname=AAA&from=BBB&age=CCC
というようになっているのですが
これをPHPで各値を取得するために
$yomi = mb_split("&", $text);
for($i=0;$i<5;$i++){
if(mb_ereg("name=", $yomi[$i])) $ad_name = mb_ereg_replace("name=", "", $yomi[$i]);
if(mb_ereg("from=", $yomi[$i])) $ad_from = mb_ereg_replace("from=", "", $yomi[$i]);
if(mb_ereg("age=", $yomi[$i])) $ad_age = mb_ereg_replace("age=", "", $yomi[$i]);
}
というようにしてます・・
がこれだとスマートじゃないですよね・・
皆様はどうやっていますか?m(_ _ )m
0030nobodyさん
05/03/06 23:18:40ID:???if(ereg("[^._0-9A-Za-z]+", $_FILES['userfile']['name'][0])) {
と記述されている部分があるのですが、
この場合、「ハイフン」も含めるにはどう書けばいいでしょうか?
0031nobodyさん
05/03/06 23:25:13ID:???くだらない質問スレに行ってきます。
0032nobodyさん
05/03/07 09:34:01ID:???としたときに hoge.inc が自分のいるパスを知ることができますか?
0035nobadyさん
05/03/07 15:33:31ID:???session_start();
と記述した後に
header("Content-type: application/octet-stream;");
を使用したいのですが思うように使用できません。
ダウンロードダイアログが表示されるのですが、
"開く"を選択してもファイルを開くことができません。
sessionとheaderは同時には使用できないのでしょうか?
よろしくお願いします。
0036nobodyさん
05/03/07 15:55:21ID:???0037nobodyさん
05/03/07 16:05:42ID:???session_start();
if($_SESSION[go] == 'ok'){
header("Content-type: application/octet-stream");
print "session value is ".$_SESSION[go];
}else{
$_SESSION[go] = 'ok';
print "<a href='$_SERVER[PHP_SELF]'>a</a>";
}
0038nobodyさん
05/03/07 16:34:18ID:???0039nobadyさん
05/03/07 16:38:54ID:???保存は正常にすることができました。
保存したファイルを開くこともできました。
>>37
session_start()で取得した情報に基づきファイルをreadfile()で出力し、
それらを保存、及び開こうとしているのですが、
session_start()を使用した後にheader()を使用すると
保存ができて、開くことができません。
session()とheader()はなにか相性が悪いのでしょうか?
ご教授いただきたいです。
0040nobodyさん
05/03/07 16:46:42ID:???PHP関係無い
0042nobodyさん
05/03/07 17:39:59ID:???マニュアルのheader()の項を読む。
session_start()時にどんなパケットが流れるか見てみる。
対策は確かマニュアルにあったと思うし、メーリングリストに回答がある。
0043nobodyさん
05/03/07 23:17:18ID:PL7b7WJgPHPエディターを使ってWebサイトでの使用を目的としたPHPの勉強をしようとしているのですが、
文字コードについてよく判りません。
エディタでEUCを指定するとブラウザがISOの欧州フォントなどに切り替わり日本語部分が文字化けし、
Shift_JISで保存すると今度は自動的にEUCに変わり文字化けします。
動作確認をIE6.0とFirefox1.0で行っているのですがどちらも同様の反応が出ます。
PHPの保存時の文字とPHPをhtml内で表示させる場合のmeta内での文字コードなどはどのような関係になっているのでしょうか?
どなたか御教授お願いします。
0044nobodyさん
05/03/07 23:29:30ID:???0045nobodyさん
05/03/07 23:38:41ID:???PHPで文字エンコーディングを意識する必要があるのは3個所あって、
1. HTTP入力 - POST,GET等
2. 内部文字エンコーディング - スクリプト自体の文字エンコーディング
3. HTTP出力 - 結果の出力時の文字エンコーディング
詳しい内容は、ttp://www.php.net/manual/ja/ref.mbstring.php
その他に、apacheが付加するcharsetも関係してくる。AddDefaultCharset等。
0046nobodyさん
05/03/08 00:08:13ID:zgtI7JIE>>45
回答有難うございます。
示されたリンク先を見ましたが、ISO-8859-*, EUC-JP, UTF-8の何れかで記述して、
php.iniを書き換えれば良いということなのでしょうか?
0048nobodyさん
05/03/08 01:05:36ID:/emJr0GT以下の3行が書き込まれている test.txt
あいうえお
かきくけこ
さしすせそ
からデータを読み出す際は、$data = file("text.txt"); で読み出せたのですが、末尾の改行が邪魔です。
Perl でいうところの、
open(IN,"text.txt"); chomp(@data = <IN>); close(IN)
を実現しようとすれば、
$fp = fopen("test.txt","r");
while( ( $x = fgets($fp) ) ){
$data[] = chop($x);
}
とするしかないのでしょうか?
0049nobodyさん
05/03/08 01:09:06ID:???(エラーメッセージを画面に出さない)
0050nobodyさん
05/03/08 01:09:15ID:???見て読んで理解しろ。(貴方の既存の知識量等により)場合によっては
理解には別の情報が必要かもしれん。その場合はまたWebとか本から入手。
答えのひとつとして
「理解できなければ、全部'EUC-JP'に統一する」
を挙げておく。
0053nobodyさん
05/03/08 05:23:03ID:???submitで計算をさせるページを作っています。
cookie?などでこの$a〜$eを保存・読み込みをしたいのですが
(出来れば過去数回分を記憶してテキストフィールド以外の場所に表示させたい。)
php初心者で計算させるので精一杯で・・・
検索してもカウンターとかは見つかるんですがこういう手法がみつかりませんでした。
どのような記述で出来るのかご教授お願いします。
0054nobodyさん
05/03/08 06:37:29ID:???0056nobodyさん
05/03/08 07:55:52ID:???マニュアルには使い方の例も結構載ってるので悩むことは無いかと。
ttp://jp2.php.net/manual/ja/function.setcookie.php
005728
05/03/08 13:05:07ID:QMVO20O7返答遅くなってすいません。
そんな便利なコマンドがあったなんて・・有難う御座いますm(_ _)m
0058nobodyさん
05/03/09 01:11:34ID:???id,name
1,a born
MySQLに以上のデータが入っているとして、
$sql="select * from hoge where id=1";
$result=$db->query($sql);
$row=$result->fetchRow(DB_FETCHMODE_ASSOC);
でデータを呼び出すと、name列がaしか出てきません。
半角スペース以降も認識させる方法を教えてください。
必要な情報があれば出しますので!
006058
05/03/09 01:35:32ID:???×でデータを呼び出すと、name列がaしか出てきません。
○でデータを呼び出すと、name列が正しく出てきますが、フォームのtextエリアに入れるとaしか出てきません。
でした。ごめんなさい。よろしくお願いします。
0061nobodyさん
05/03/09 02:01:08ID:???<input type=text value=a born>
0062nobodyさん
05/03/09 02:24:45ID:???0063nobodyさん
05/03/09 02:32:54ID:???その通りでしあ
<input type=text size=50 name=\"name\" value=\"",$row["name"],"\">
ダブルクォーテーションで囲えば正しくフォーム部分にも出てきました。
でもこれで正解なんです?なんか野暮ったい気もするんですが
0065nobodyさん
05/03/09 10:29:04ID:???&を使用する事はできないのでしょうか?
<link>http://〜/a.php?abc=1&def=b</link>
0066nobodyさん
05/03/09 10:39:24ID:???& そのものを書くなら & と書かなければならない。
これは HTML でも同じ事
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に相対パスを計算させる
とはどういう事ですか?
■ このスレッドは過去ログ倉庫に格納されています