【PHP】質問スレッド Part5
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/09/11 14:15ID:FWA0CpdU■本家
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あたりにきっと誰かが……。
0587583
02/10/27 00:29ID:QX87Ao09しょぼいですが、こんな感じです
if(ereg("http://",$done)){
$ldone = $done;
// URL
$urladd = mb_ereg_replace("[^0-9a-zA-Z\/:.]","",$ldone);
// LINK
$mdone = "<A HREF=\"".$urladd."\" target=\"_blank\">".$urladd."</A>\n";
$new .= mb_ereg_replace($urladd,$mdone,$done);
}
0588583
02/10/27 00:38ID:QX87Ao091行に1つ以上ある場合の処理が…わかりません。
パターンマッチした回数を取れれば、それをfor文で書けばいいのか。
でも、$number = ereg("http://",$text);
$textに2つurlが入っていてもなぜか$numberには1しかはいらない。
for文とそんなんじゃない。
一行のereg_replaceで全て差し替え出来ます。
がんばれよ。
0590583
02/10/27 00:44ID:QX87Ao09了解です。
できるがわかったのでがんばってみます。
ありがとうございました。
0591nobodyさん
02/10/27 00:58ID:???0592582
02/10/27 01:12ID:???なんのこっちゃ。
0594nobodyさん
02/10/27 02:09ID:???マニュアルよめ
そのままズバリな関数あるだろ
0596583
02/10/27 08:58ID:QX87Ao09どうしても、1つの行に違うURLがあると、一度のmb_ereg_replaceで
変更できませんでした。
何かヒントをもらえないでしょうか?
あなたが、>>587で書いたパターンを使うと、
$html = ereg_replace(
'(http://'.
'[0-9a-zA-Z\/:.]*)',
'<a href="\\0" target="_blank">\\0</a>',$text);
かな。
\\0ってのがみそ。マニュアルをもっと読もうな。
後はマッチパターンをぐぐるかRFCを読んで精度をあげてな。
がんばれよ。
0598nobodyさん
02/10/27 11:38ID:Xr/mnh9j0599583
02/10/27 22:53ID:QX87Ao09ありがとうございます。
マニュアルに載っているものを質問してしまい
申し訳ありませんでした。
0600nobodyさん
02/10/28 00:37ID:omMjIkHW作成しようと思っています。
そこでjcode.pl(文字コード変換)を使用していたのですが、
以下のサイトを見たところ
>ttp://dokokano.com/php/php_charset.html
>出力をShift_JISにする場合は、入出力部分の文字コード変換のためのコードを書く必要があります。
ということは、EUCにすればurldecode関数によって
QUERY_STRINGの内容を日本語に変換することが
できるということでしょうか?
0601nobodyさん
02/10/28 01:13ID:K9SZmaup素直に新しめのバージョン(マルチバイト対応)使ったら?
あんさん情報ソースが古すぎ。
php4.0.6以降に対応した書籍を買うか、
ttp://jp.php.net/manual/ja/ref.mbstring.php
を読んで出直し。
0603nobodyさん
02/10/28 01:15ID:???リクエストを変数に入れてから変換するのが扱いがラク。
/* EUC-JPからSJISに変換 */
$str = mb_convert_encoding($str, "SJIS", "EUC-JP");
/* SJISからにEUC-JP変換 */
$str = mb_convert_encoding($str, "EUC-JP", "SJIS");
0604nobodyさん
02/10/28 04:19ID:RrSU6wqcフォームから送る値に「+」を含むと、
それが空白になってしまうことが分かりました。
以下のテスト用ファイルtest.phpでテストしても、
やはり空白になります。
<?php
echo $_GET["var"];
?>
<form method=get action="test.php">
<input type=hidden name="var" value="test+test">
<input type=submit value="go">
</form>
これはどうすればいいのでしょうか?
0605nobodyさん
02/10/28 04:34ID:eMSdzrbE本文は改行から始まりません?
mb_send_mail()だと先頭に改行は付かないんですが、
mail()でも改行から始まらないようにするのはムリですか?
0606nobodyさん
02/10/28 05:08ID:???0607nobodyさん
02/10/28 11:41ID:???しっかりtest+testと表示されますた。
>>605
mail()使ってますが、そんな現象は起こっていません。
PHP Version 4.1.2
0608nobodyさん
02/10/28 12:37ID:???(flock, mkdir, symlinkなど)
どのロック方法が一番良いのでしょうか。
実際にスクリプトを作っている方はどの方法を
使っていますか?
0609nobodyさん
02/10/28 12:42ID:KUu9Ng1Nあー俺昔それで同じ質問した記憶があるわ。
結局何が原因だったのかはちょっと思い出せないけど、結果のレポートも
してあるはずだから、このスレの過去ログをmail()で検索すればどっかにあると思う。
0610604
02/10/28 14:50ID:RrSU6wqcまじっすか? ソース見ても空白になってます。何でだろう??
>>606
ヒント?
確かにgetで渡されてるURLのパラメータみたら%2Bと表示されてるけど、
$_GETに入っている値が既に空白なのでどこで直せばいいの?って感じです。
設定が間違っているのだろうか…鬱
0612604
02/10/28 18:26ID:RrSU6wqc試してみたら正常に動作したので、あれ? と思って調べると、
連鯖→4.2.3
テストマシン→4.2.2
だったので、4.2.2に直すと、正常に動作しました。
本当に4.2.3固有の問題なのかは分かりませんが、
動いたので良しとしまする。
0613nobodyさん
02/10/28 19:58ID:OVLPNyBEバックグラウンドでプログラムを走らせる実験として
test.phpというプログラムとtest_back.phpという
プログラムを作りました。
=======test.php==========
<?php
system ("/home/sites/home/test_back.php > /dev/null &");
echo "OK";
?>
=======test_back.php========
<?php
sleep (30);
?>
=====================
という風に、test.phpから、test_back.phpを
呼び出して、30秒間sleepするものです。
しかし、ps で確認しても、うまく呼び出されていないようです。
そのため、test.phpのほうの > /dev/nullを抜いて試してみた
のですが、すぐにOKが表示されるので、やはり呼び出されていないようです。
色々と調べて、自分では、間違っていないつもりなのですが、
問題点が、分かりましたら是非、教えてください。お願いします。
0614nobodyさん
02/10/28 20:39ID:h954DWc8それともネタ
0615605
02/10/28 21:06ID:???過去ログ見ました!
解決しました。
メールのヘッダの最後に改行があると、本文の頭に付いちゃうのね…
俺の場合、追加ヘッダの最後の改行を取ったら解決しました。
ありがとうございました。
0616613
02/10/28 21:18ID:OVLPNyBEネタじゃないです。本当にやりたいことは別にあるのですが、
それ以前に、プログラムがうまく動かないので、問題の洗い出しのため
簡単にして試してるだけです。
このシンプルなコードでさえ、動かないので・・・(・ω・)
0617nobodyさん
02/10/28 21:49ID:???tmpfile();でできたファイルの名前を取得する術はないのでしょうかー。
0618nobodyさん
02/10/28 21:56ID:h954DWc8HTML入門
PHP入門
PHP文法書
■ グロバールリンク
ある別なサイトへリンクする際に使用します。リンク先のURLは(http://で始まる)で入力します。
<A HREF="★">〜</A> ★=URL
又、<A HREF="★">内にTARGET="_blank"を設定するとリンク先のページが、新しいWIndowを開いて表示されます。〜には、リンクを示す文章を入力します。
0619nobodyさん
02/10/28 22:03ID:???最近の若いもんはマニュアルが読めないのか?
漢字が分からんのか?
ひらがながわからんのか?
まあ、術と言っちゃなんだが、
マニュアルの 「XXXファイルシステム関数」 を見れば答えが見つかるかも知れないな。
0620nobodyさん
02/10/28 22:31ID:???0621nobodyさん
02/10/28 22:51ID:h954DWc8system 関数や、exec 関数の関数リファレンスを見ると、
次のような記述があります。
「この関数を使用してプログラム実行を開始し、
バックグラウンドで実行したままにしたい場合には、
プログラムの出力をファイルまたは他の出力ストリームに
リダイレクトする必要があることにも注意して下さい。
さもないと、PHPはそのプログラムの実行が終了するまでハングします。 」
この文章の意味は、下記のプログラムのように記述しなさいという意味です。
system("/home/your/bgprog $arg1 $arg2 > /dev/null &");
test_back.php のパーミッションは?
0624nobodyさん
02/10/28 23:36ID:h954DWc8system関数は外部プログラムを呼ぶための・・・
何で、Webホルダーのphp自身を呼ぶの
0625613
02/10/28 23:56ID:OVLPNyBE644で駄目だったので、755にしました。
>>624
本当は、ブラウザからだとタイムアウトになるかな?程度の数の
メールマガジンを発行するようなシステムにしたいのです。
それがうまくいかず、プログラムを削っていったら、こんな形に・・・。
これって、ブラウザからでもコマンドラインからでも駄目なのですが
なぜでしょうか?
cgi版かcli版のphpはインスト済み?
それと1行目に
#!/usr/bin/php
とかが必要。
もしくは、
system("/usr/bin/php /usr/sites/home/test_back.php .....
で実行するかだな。
0627nobodyさん
02/10/29 00:09ID:TKErwWFl<?php
system ("C:\WINDOWS\NOTEPAD");
echo "OK";
?>
0628613
02/10/29 00:52ID:TzxoQcf+どうも有難うございます。コマンドラインからの実行の際は
#!/usr/bin/php の部分が抜けていました。
その点を修正して、試しに、パーミッション777にしてroot権限で
実行してみましたがそれでも、Permission denied になってしまいます。。
これは、プログラムではなく、何かシステム的に原因があるのでしょうか?
なぜ、Permission denied かわからんが、試しに
which php
と打つとどぉよ。
0631613
02/10/29 11:13ID:TzxoQcf+which php で帰ってきたパスは
/usr/local/bin/php です。
1行目のこのパスを書いてますが。それでも駄目みたいです。
0634613
02/10/29 12:23ID:TzxoQcf+試してみましたが、駄目みたいです。
>>633
コマンドラインからだと動いてません。
ブラウザからだと、ちゃんと動作します。
試しに、シェルスクリプトで試してみたところ動作しました。
=test2.php=========
<?php
system("/bin/sh ./sleep.sh &");
echo "OK send.php<br>";
?>
=sleep.sh=========
sleep 5
==============
phpをコマンドライン上から実行できないのが原因でしょうか?
0636nobodyさん
02/10/29 12:58ID:wf/l5by6この設定によってaddslashes()をするかどうかを分岐したいので。
magic_quotes_gpcがオンの場合でaddslashed()しちゃうと2回エスケープしちゃいますよね。
0637nobodyさん
02/10/29 13:26ID:???var_dump(ini_get("magic_qoutes_gpc"));
string(0) is global value
string(1) is local value
どのバージョンから使えるかはしらんです。
0639636
02/10/29 13:48ID:wf/l5by6サンクス子
できました。ありがとう。
0640nobodyさん
02/10/29 13:49ID:???やりたいことと違うかもしれないけど
http://pc.2ch.net/php/kako/1003/10032/1003283567.html
このスレで教えてもらってうまくできたよ。
0641nobodyさん
02/10/29 16:28ID:tR/mb4fjApacheの設定ファイルにも AddType application/x-httpd-php .phpって追加したけれど
表示されません。どうしたら表記できるでしょうか?
誰か教えてください。
0642PHPの日本語
02/10/29 16:37ID:vXsUrIJbなぜかPHPのスクリプトが記述してあるファイルはEUC/LFでないと文字
化けしてしまいます。しかし、ブラウザのエンコードを見るとシフトJIS
なんです。
同階層にあるHTMLファイルはSJIS/CR+LFで全然問題ありません。
別の僕が構築したテスト用サーバではPHPのファイルがSJISでも全然問題
ないのですが?
どういう状況なんでしょう?
php -v
が実行できる?
0644613
02/10/29 17:17ID:TzxoQcf+php -v
bash: php: is a directory
とでました。レンタル鯖なのですが、php のインストールの仕方に
問題があるんでしょうか?
はへ?
/usr/local/bin/php -v
では?
/usr/local/bin/php のパーミッションも。
レンタル鯖の設定で実行させないようにしているのかもね。
0646613
02/10/30 02:35ID:NfkYl6Lzこれもやっぱり
bash: /usr/local/bin/php: is a directory でした。
ディレクトリの中身はこんな感じでした。何が問題でしょう?
drwxr-xr-x 2 root root 1024 Jun 7 13:57 .
drwxr-xr-x 3 root root 1024 Jun 7 13:57 ..
-rwxr-xr-x 1 root root 10018 Mar 5 2002 pear
-rwxr-xr-x 1 root root 4325 Mar 5 2002 pearize
-rwxr-xr-x 1 root root 500 Mar 5 2002 php-config
-rwxr-xr-x 1 root root 593 Mar 5 2002 phpextdist
-rwxr-xr-x 1 root root 700 Mar 5 2002 phpize
-rwxr-xr-x 1 root root 5088 Mar 5 2002 phptar
0647nobodyさん
02/10/30 03:01ID:???Apacheモジュール版のPHPじゃないの?
0648613
02/10/30 03:28ID:NfkYl6Lz>Apacheモジュール版のPHPじゃないの?
/usr/local/bin/php のディレクトリの中の中身が
>>646 です。>>647 さんのいうように、Apacheモジュール版のPHP
じゃないってことが原因?
のようですな。(ぉィぉィ)
つうことで、wgetを使いませう。
system ("wget URL/test_back.php > /dev/null &");
0650nobodyさん
02/10/30 13:43ID:dL3lvkbY<php? hogehoge ?>だったら動くのですが<? hogehoge ?>が動きません。
現在の環境は、VineLinux2.6+Apache/1.3.26+PHP/4.2.3です。
原因を教えていただけると幸いです。
どなたか宜しくお願い致します。
0653nobodyさん
02/10/30 14:03ID:LfLiEMdashort_open_tag = Onで解決しました。
お騒がせしました。
0654nobodyさん
02/10/30 15:30ID:???どうすればよいでしょうか?
私の見た限り、ズバリな関数はマニュアルには載っていませんでした。
0657YAHOOO情報
02/10/30 15:53ID:9DFYsx8y0658nobodyさん
02/10/30 18:56ID:4q8hzZpWarray_spliceとかarray_sliceとか
0659nobodyさん
02/10/31 01:40ID:yMK1gcv2最低、生ログ(訪問回数含)が見れればいいんだけどね。
0660nobodyさん
02/10/31 04:15ID:YDMbLtmR$_SERVERをマニュアルで探してみる
0661ノンノン
02/10/31 11:16ID:Gi8DIir1で、ログイン時にIDなどをセッションレジスタに取り込んでいるのですが、
個人情報の更新する時にSSLを使用するとセッションの内容がなくなって
しまってるんです。「セッション切れ」とでも言うのかな?
SSLへセッションを引き継ぐにはどうすれば良いのでしょうか?
おわかりになられる方がいらっしゃいましたらお教え願います。
ヨロシクお願いします。
ちょっと前に、バーチャルホスト間のセッション共有があったが、基本的に
同じことだと思うよ。cookie経由で引き継がれるかどうかわからんので、
SSLなページを指定するURLにPHPSESSIDを追加したらどうでしょう。
ただ、SIDってcookieが有効だ(とわかる)と空になるので、
<form action="https://www.hogehoge.com/sslpage.php?PHPSESSID=<?=session_id()?>" method=....
とかかな。もっと簡易な方法がありそうだが...
ただし、未検証です。
0663ひよこさん
02/10/31 21:39ID:XxGc2Q670664nobodyさん
02/10/31 21:43ID:???0665nobodyさん
02/10/31 22:51ID:???ここで調べれ
http://www.php.co.jp/
http://www.php.com/
0666nobodyさん
02/11/01 07:12ID:???扱い上は別のホストに移ってるのと等価だから、セッション変数を受渡しできる方がまずい。
ホストを跨ぐようなデータのやりとりをしようとする事がそもそもの間違いだと思うんだが…
PHPのセッション処理はホストを跨いでやり取りできないようになっている。
勿論、セッションIDも他のホストに晒すものではないが、
信頼できる同一ホスト上で、別ホストとみなされてセッションが引き継がれ
ないのを何とかしたい。
ってのは、間違いではないと思うが、どぉよ。
0668nobodyさん
02/11/01 14:29ID:rT5mgBbe思っているのですが、どのような形で作ればよいか教えてください。
0669nobodyさん
02/11/01 15:22ID:sjfqb6HL$now = getdate();
$today = mktime(0,0,0,$now['mon'],$now['mday'],$now['year']);
$start = $today - 86400 * $now['wday'];
$end = $start + 86400 * 7 - 1;
echo date("Y/m/d",$start) ." - ". date("Y/m/d",$end);
0670nobodyさん
02/11/01 15:53ID:t42zlzPT例えばこんなURL↓
http://messages.yahoo.co.jp/bbs?action=topics&board=2000247&sid=2000247&type=r
なんでだろ・・? やっぱ規制かけてるのかな・・?
どなたか、外部から上記ページの取得ができた人いませんか?
0673nobodyさん
02/11/01 17:14ID:???インデントがタブなので書きこむと無くなるため見にくいと思いますが、、
後学のためにもならないと思います(;´Д`)
//today
$today = getdate();
//月の最大日
$maxday_array = array(0,31,28,31,30,31,30,31,31,30,31,30,31);
//うるう年チェック
if( !( $today['year'] % 4 || $today['year'] % 100 ) )
{
$maxday_array[2] = 29;
}
0674続き
02/11/01 17:15ID:???$d_sabun = $today['mday'] - $today['wday'];
if( $d_sabun < 1 )
{
$m_sabun = $today['mon'] - 1;
if( $m_sabun < 1 )
{
$st_m = 12;
}else{
$st_m = $m_sabun;
}
$st_d = $maxday_array[$st_m] + $d_sabun;
}else{
$st_m = $today['mon'];
$st_d = $d_sabun;
}
0675さらに続き
02/11/01 17:15ID:???$d_sabun = $today['mday'] + ( 6 - $today['wday'] );
if( $d_sabun > $maxday_array[$today['mon']] )
{
$m_sabun = $today['mon'] + 1;
if( $m_sabun > 12 )
{
$ed_m = 1;
}else{
$ed_m = $m_sabun;
}
$ed_d = $d_sabun - $maxday_array[$ed_m];
}else{
$ed_m = $today['mon'];
$ed_d = $d_sabun;
}
$ed_str = sprintf( "%02d/%02d〜%02d/%02d", $st_m, $st_d, $ed_m, $ed_d );
0676あぼーん
NGNG0677nobodyさん
02/11/01 20:16ID:???>309
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´Д` ) < 通報しますた!
/, / \_______
(ぃ9 |
/ /、
/ ∧_二つ
/ /
/ \ ((( ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ /~\ \ ( ´Д` ) < 通報しますた!
/ / > ) (ぃ9 ) \_______
/ ノ / / / ∧つ
/ / . / ./ / \ (゚д゚) ツーホーシマスタ!
/ ./ ( ヽ、 / /⌒> ) ゚( )−
( _) \__つ (_) \_つ / > (・∀・)ツーホー!
0678497
02/11/02 00:05ID:F92LVFOLその場合、
./configure の --with-pgsql はどうやって指定すればいいんでしょうか?
本やマニュアルは同一サーバに入れることを前提に書かれているので
調べたんですがわかりませんでした。
やろうとしているのはWeb(Apache+PHP)をグローバルで、
DBを裏側(プライベート)に置こうとしてるだけなので、
特別変わったことをしているわけではないと思うのですが。。
0679nobodyさん
02/11/02 00:06ID:F92LVFOL0680nobodyさん
02/11/02 00:35ID:xj1s/Rjkスクリプトが急にエラーになったんだけど、さっぱり
原因がわからない。
問い合わせてみたが返事はまだ。。。
なんなんだろ?
0682nobodyさん
02/11/02 11:03ID:???PHPをコンパイルする時だけ、PostgreSQLをインストールしておくと良い。
PostgreSQLのlibとincludeが必要だから。
>>680
register_globalsとかshot_open_tagあたりが原因っぽい気がする。
0683nobodyさん
02/11/02 11:17ID:VDOgYkQjちょと遅レス気味ながら。
漏れもそれで悩んでる。つか、環境によって違うのね。ローカルのテストサーバ(PHP4.2.2)では
ちゃんと+が残ってるのに、ホスティングサーバ(PHP4.2.3)上では+が消えて空白になる。
rawurlencodeを使っているので、渡している文字列は"hoge%20%2B%20hage"みたいに
なっていることを確認済み。受け取った直後に$_GETを見ると"hoge hage"になってるという
具合。
PHPの設定なのか?とも思うけど、それらしいものが見当たらないように思う。ちなみに、
magic_quote_gpcはどちらの環境でもOn。
PHPのバージョン違いによるものか、それともApacheの設定ということもありうるかもと
思ってるんだけど・・・誰かわかる人いない?
0685678
02/11/02 11:42ID:F92LVFOLありがとうございます。やってみました。
RPMで、potgresql-develを入れたら/usr/include/以下に
「libpq-fe.h」が入りますね。
あとは --with-pgsql オプションでエラーが消えました。
0686nobodyさん
02/11/02 17:19ID:3DCZqrMjmb_send_mailで添付ファイルつけて送らせたいと質問したものですが。
マニュアルを読んで最後の引数になにかヘッダを渡せばいいのかと思い
ましたが何を渡せばいいのかわかりません。
なにかヒントでも結構ですので教えてくださいませ、困り果ててしまいました。
■ このスレッドは過去ログ倉庫に格納されています