【PHP】質問スレッドpart23【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/10/05 17:36:38ID:???・新規質問の方は上げてください。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
0653nobodyさん
04/10/21 12:23:38ID:???0655nobodyさん
04/10/21 13:02:56ID:???レスありがとうございます。
本来ならご指摘の通りマクロで対応したいのですが、DBにあるデータで
値を埋めなければならないため、Web上でおこなっております。
0656nobodyさん
04/10/21 13:03:49ID:???0657nobodyさん
04/10/21 13:41:34ID:???0659nobodyさん
04/10/21 14:54:54ID:???それでも良い気がするんだけど、問題はそのDBを繋ぎにいくExcelを
不特定多数の人が使うとなると色々問題があるような・・・
>>651
幾つか手段はあると思うんだけど、
・サーバをWindowsにしてWEBアプリもASP.NETなどで作って、
全てサーバ側で処理してExcelをダウンロードできるようにする。
・そのExcelで必要なデータをCSVやらSYLK形式のテキストでダウンロードできるようにして、
各ユーザはマクロが組まれたExcelのテンプレートでそのファイルを読み込み、
後は勝手にマクロが処理してくれる。
0660652
04/10/21 15:57:58ID:???DBのテーブル/ビューの内容をPHPを使ってベタなHTMLの<TABLE>に整形するような
スクリプトを作っておいて、それをExcelからWebクエリとして開くと一見普通の
Excelの表として読みこめるから、その手もいけるかもしれない。
0661651
04/10/21 16:48:57ID:???659さんの2番目のやり方を少しいじったやり方で実現出来ました。
DBから必要なデータをCSVに出力した後に、FTP経由でCSVを取得して
そのCSVデータをマクロで処理するexeを作りました。謝謝ですm(_ _)m
0662nobodyさん
04/10/21 17:33:03ID:Q3cv6Kj3PHPからPostgreSQLに検索をかけるプログラムを書いております。
PGの文字コードがEUC-JPで、PHPからPOSTする検索対象語は
SJISです。それで検索対象語をSQLを実行する側のPHPにてEUC-JPに
変換したのですが、以下のようなエラーが出てきてしまいます。
Warning: pg_exec(): Query failed: ERROR: parser: unterminated quoted string at or near "'%" at character 201 .
検索対象文字の前後にワイルドカードをつけています。
検索対象文字がアルファベットの場合には何事もなく動作するのですが。。。
何か対処法がありますでしょうか?よろしくお願いします。
0664nobodyさん
04/10/21 19:17:09ID:???0665nobodyさん
04/10/21 19:34:36ID:Fws0z8swイメージ的には include や require の引数に文字列を渡すといった感じです。
例えば変数の内容が
<html><body><?php echo date('m/d'); ?></body></html>
となっている時に、正しく実行(処理)したいのですが方法がわかりません。
上記の内容がファイルの中身であればファイルを include すれば、
include した時点で、評価されると思うのですが、
この内容が変数にある時にどうしたらよいのかがわかりません。
eval だと 渡す内容が php のコードじゃないとだめだし。
アドバイスのほどよろしくお願いします。
0666nobodyさん
04/10/21 19:42:47ID:???全く同じ質問がこのスレにあったような気がする。
eval('?>'.$str.'<?php');
ではなかっただろうか。
0667nobodyさん
04/10/21 19:45:58ID:AZy0QHNb現在、PHPを使用して構築したサイトを運営しており、今回、OSとApacheの
バージョンアップを行おうと思いテストを行っていたところ、PHPからメールを
送信した場合に、エラーとしてはじかれてしまうアドレスがある事がわかりました。
具体的には、sendmailをコマンドラインからキックする際に「-f スイッチ」を
付けなかった場合と同じ現象のようです。
現在、PHPでのメール送信は「mb_send_mail」を使用しておりますが、この現象を
回避する方法をご教授ください。
現在の環境
RedHat EL3 / Apache 2.0.46 / PHP 4.2.3 / 8.12.6
バージョンアップ前の環境
RedHat 7.2 / Apaache 1.3.29 / PHP 4.2.3 / 8.11.x
よろしくお願いいたします。
0668665
04/10/21 19:53:08ID:Fws0z8swスレ探してみましたがみつけられませんでした。すみません。
教えて頂いたようにやってみましたが、
Parse error: parse error, unexpected T_ECHO in /home/hoge/test.php(10) : eval()'d code on line 5
となってしまいます…。
よろしくお願いします。
0669nobodyさん
04/10/21 20:15:38ID:???別ウィンドウでソース見れるだよ。
0670nobodyさん
04/10/21 20:25:41ID:???0671nobodyさん
04/10/21 22:50:33ID:???0672nobodyさん
04/10/21 22:52:47ID:???| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J << 671
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
0673nobodyさん
04/10/21 23:14:40ID:???0675nobodyさん
04/10/21 23:22:46ID:???0676ゆういち
04/10/21 23:57:45ID:???0677nobodyさん
04/10/22 00:04:04ID:???○いい加減な
0679nobodyさん
04/10/22 00:22:11ID:???0681nobodyさん
04/10/22 00:28:12ID:???0682662
04/10/22 00:33:50ID:n1ZmUV/Qすいません、遅くなりました。echoで出してみたら以下のようになります。
WHERE UPPER(name) LIKE '%F{%'
LIKEのあとが変換したあとです。
0683nobodyさん
04/10/22 01:28:53ID:GnBF56DF($rowForumInfo['numpost']) ? $numPost = $rowForumInfo['numpost']: $numPost = 0;
これの意味がわかんないのです。
?と:で前後を比較してるのかな?と思うんですけど、検索しても出てこないし・・・
phpマニュアルの該当ページとか教えてくださいまし。
0684nobodyさん
04/10/22 01:56:25ID:???三項演算子
ttp://jp2.php.net/manual/ja/language.operators.comparison.php
0685nobodyさん
04/10/22 02:46:09ID:???$numPost = ($rowForumInfo['numpost']) ? $rowForumInfo['numpost'] : 0;
と書くのでは?
0686nobodyさん
04/10/22 02:58:10ID:???即レス感謝です!
そのページ見て他のに気が付かなかったよ!
>685
マニュアルではそうなってますね。
>683のはF-boardさんのです。
0688nobodyさん
04/10/22 08:26:39ID:???マニュアル読め。
検索しろ。
0689nobodyさん
04/10/22 10:42:52ID:???0690nobodyさん
04/10/22 11:46:00ID:???スクリプトの中でファイルのサイズがころころ変わる場合、
一回づつ clearstatcache() しとかないと filesize() の
返す値が更新されないんでやんの。
マニュアルを読めば「注意」のとこに書いてあるけどナー。orz
0691nobodyさん
04/10/22 13:08:06ID:rXNsH1Ryodbc_connect(): SQL error: [unixODBC][FreeTDS][SQL Server]Unable to connect to data source, SQL state S1000 in SQLConnect
というエラーがでてきてしまい接続できません。
ポートは開いておりPingもとんでいます。
設定は多分問題ないかと思うのですが
W2KServer もしくは MSSQL2000の方でセキュリティとかの設定のせいでしょうか?
odbc.ini等の設定見直しているのですが・・
0692nobodyさん
04/10/22 14:19:22ID:rNwrhFTR"bbb","ccc","piyo","uyo"
ってな""で囲まれたカンマ区切りのCSVデータをexplodeする際に
データに、1,000みたいに途中にカンマが入っていると、上手く切ることが出来ません。
どうしたらいいでしょうか?
list($a,$b,$c,$d) = explode(",",$data);
0693nobodyさん
04/10/22 14:58:14ID:???$csv = <<<CSV
"aaa","bbb","1,000","hoge"
"bbb","ccc","piyo","uyo"
CSV;
$result = preg_split("/(\",)?\"(\r\n)?/m", $csv, -1, PREG_SPLIT_NO_EMPTY);
var_dump($result);
0694nobodyさん
04/10/22 15:20:21ID:???何でやったらいいか思案中
プロセス間通信にファイルを使うのはダサいしなぁ
0695nobodyさん
04/10/22 15:20:58ID:wsf+cSNuネットで探してみたもののあまり参考になる例が無く…
詰まってしまいましたのでよろしくお願いしますm(_)m
ログデータは下のような感じで管理しているとして、
-------------------------
名前,DATA1,DATA2,DATA3\n
名前2,DATA1,DATA2,DATA3\n
名前3,DATA1,DATA2,DATA3\n
------------------------
このデータから"名前2"の行を抽出する場合どのようにしたらよいでしょうか?
一応下記の方法で試したのですが、どこが間違っているのかも解らず…
"名前2"以降のデータも全て取得してしまいます…。
正規表現がおかしいのでしょうか?
誰か解る方いましたらよろしくお願い致します。
$id="名前2";
$l_f = file_get_contents($logfile);
$idstr = "^($id,.*)$";//名前を正規表現に組み込む
if (ereg($idstr,$l_f,$rtdata)) {
echo $rtdata[1];
}else{
echo "エラー";
}
結果的にデータの中から一行を効率よく抜ければいいのですが…
0698695
04/10/22 18:15:34ID:???ありがとうございます
その方法は始めに試しましたが、
ログを増やしていくとなると重くなるのかな?と思い、
ループを使わない方法を探っております。
fseekを行単位で行えたらいいんですけどねぇ^^;
0699nobodyさん
04/10/22 18:45:51ID:???eval('?>' . $string . '<?php ');
だった。
phpの後に半角スペース1つ。
<?php
$string = "<html><body><?php echo date('m/d'); ?></body></html>";
eval('?>' . $string . '<?php ');
?>
0700なちじょあ ◆yEbBEcuFOU
04/10/22 18:57:33ID:???( ● ・3・ ● ) エェー >if (ereg($idstr,$l_f,$rtdata))
if (preg_match("/$idstr/m", $l_f, $rtdata))
0701nobodyさん
04/10/22 18:57:51ID:IrQQWX67print "<FORM method=POST target=up action=$PHP_SELF>\n";
print "名前:\n";
$cookiename = $_COOKIE["cookiename"];
print "<INPUT type=text name=ename size=20 Value=$cookiename>\n";
print "<INPUT type=submit value=入場口1>\n";
print "<INPUT type=hidden name=gateway value=entry1>\n";
print "<INPUT type=submit value=入場口2>\n";
print "<INPUT type=hidden name=gateway value=entry2>\n";
print "</FORM></BODY></HTML>\n";
一つのForm内で、一つのtextboxから2パターンに処理を振り分けることは
可能なんでしょうか?
上は、ボタン「入場口1」とボタン「入場口2」をそれぞれ押すと、別の
処理を流したいのですが、一つのFormから可能なんでしょうか?
或いは、他に方法があるなら教えてください。
0702なちじょあ ◆yEbBEcuFOU
04/10/22 19:06:33ID:???( ● ・3・ ● ) エェー submit の value は押さない限り送られないから
同じ name にして value 見て振り分けるとかすれBA?
0703698
04/10/22 19:13:53ID:???おおっ!!ありがとうございます〜!!
無事、やりたいことができました!
preg_matchの方がeregより処理が速いと書いてあったので、
一度試してみたのですが、その時はエラーが出て断念していました…。
これで安心して眠れます、本当にありがとうございますm(_)m
0704nobodyさん
04/10/22 19:22:42ID:/rwDGP0lデータベースを検索して、データの中のURLを取得するのですが、
そのURLのページに自動ですぐ行くようにするにはどう書けばよいですか?
$aaa = $row["URL"];
print($aaa);
で、目的のURLは表示されましたが
html部で
<META HTTP-EQUIV="refresh" CONTENT="1;URL='$aaa'">
とやってもうまくいきませんでした。。
0705nobodyさん
04/10/22 19:28:52ID:???http://jp2.php.net/manual/ja/function.header.php
0706nobodyさん
04/10/22 21:17:38ID:OP6//mfv0707nobodyさん
04/10/22 21:38:14ID:???phpを使ってMTAに接続しメールを送信するだけでなく、
MDAが配送したものをPOPすることができるか?ということならできる。
マニュアルのIMAP,POP3,NNTP関数を参照。
0708nobodyさん
04/10/22 22:50:34ID:???0709nobodyさん
04/10/22 22:51:50ID:???0710nobodyさん
04/10/23 01:26:33ID:2GvadRBBどういう風に書けば良いでしょうか?
0711nobodyさん
04/10/23 01:42:16ID:???fsockopen()
0712nobodyさん
04/10/23 02:37:12ID:???ですがどんなにがんばってもうまくいかなくてphpinfo()したところ、
safe_mode On
safe_mode_exec_dir /usr/local/php/bin
とありました。これはもしかしてsystem()とかpopen()とかは使えない状態なんでしょうか。
ちなみにxreaという無料スペース使っています。
0713nobodyさん
04/10/23 02:40:56ID:???0717nobodyさん
04/10/23 10:31:33ID:???0718nobodyさん
04/10/23 16:26:49ID:???デフォルトは0だそうですが、最大どのくらいの値を設定できますか?
0719nobodyさん
04/10/23 18:06:14ID:ICRztpGpecho ($a+"1");
上記の$a を連結して$a1とする方法はありますでしょうか?
0721nobodyさん
04/10/23 18:48:05ID:ICRztpGp${a.$foo}でうごきますた。
有難う。
0722nobodyさん
04/10/23 21:05:08ID:???intだから 2^32-1(=30億くらい)で無いの?(一般的なプラットフォームの場合)
実際には cookieのexpiresにセットされるわけで、
expires=Thursday, 31-Dec-2037 00:00:00 に相当するlifetime(10億秒後くらい)が妥当かと。
0723nobodyさん
04/10/23 22:07:31ID:???time()で取れる時間も10桁、いつか破綻しそうなのに大丈夫なのかなぁ
0725nobodyさん
04/10/23 23:39:16ID:???<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="test.xsl" type="text/xsl" ?>
<doc>
<head>テスト太郎</head>
<par>こんにちは、テスト太郎です。</par>
</doc>
という内容のXMLファイルを$xmlに読み込み、そのデータを echo $xml->asXML();で画面表示したのですが、
test.xslが反映されていません。XMLファイルを直接ブラウザで表示すると、反映されているのですが……。
どうしたらいいのでしょう、教えてください。
0726nobodyさん
04/10/23 23:39:34ID:???0727nobodyさん
04/10/23 23:40:45ID:???0728nobodyさん
04/10/23 23:42:56ID:???0729nobodyさん
04/10/24 00:14:07ID:???0730nobodyさん
04/10/24 00:20:31ID:???simpleXMLって、xslとかxsdとかに対応してなかった希ガス。
どっかで読んだと思うんだが、今見たら本家のSimpleXMLリファレンスには
書いてなかったし……(記憶違いだったらすまぬ)
"<"と">"の記号が2chと同じように変換されません。原因が分かる人教えて。。
環境:php4.3.8
$key = "<>";
$key = JcodeConvert($key, 1, 2); //EUC-JPの$keyをShift-JISに変換・・
$salt = substr($key."H.", 1, 2);
$salt = strtr($salt,":;<=>?@[\\]^_`","ABCDEFGabcdef");
$salt = ereg_replace("[^\.-z]", ".", $salt);
echo $trip = "◆".substr(crypt($key, $salt),-10);
0732nobodyさん
04/10/24 04:31:22ID:???0733nobodyさん
04/10/24 09:10:59ID:???サーバ側の PHP スクリプトと同じディレクトリに test.xsl があって、
ブラウザ側で PHP スクリプトが出力する XML に test.xsl を適用させたい
ということでいいのかな?
もし、そうだとしたら、デフォルトで PHP は
Content-type: text/html
を出力するので、単なる HTML ファイルとしてブラウザが認識しているはず。
PHP で XML 用のヘッダを出力すればブラウザが test.xsl を取得して
適用してくれると思う。
header('Content-type: application/xml');
一応、Mozilla Firefox では確認した。IE では試してないけど。
0734730
04/10/24 09:40:30ID:???あ、なるほど。THX
元質問者でないが、次そういう話がありそうなので助かった。御礼
0736nobodyさん
04/10/24 13:28:57ID:???Operaだと、xsltは無視される。
IEは追加のコンポーネントを入れないと、まともに表示されないのもある。
IEとMozillaで、xsltの解釈が違って、表示が異なる事がある。
0737725
04/10/24 14:17:43ID:???もちろん、(XMLを使うわけですから)そのくらいのことは存じております。
ですから、サーバサイドでXSLTを適用するか、それともブラウザの変換に委ねるかどうか、閲覧者に選択
させるようにするつもりです。
まあ、わざわざありがとうございます。
0738nobodyさん
04/10/24 14:43:24ID:???表示させるスクリプトを作りたいのですが、
同一ディレクトリ内ファイル名を配列$f_nameに格納後
zipとlzhのものを配列$itemに格納して一致するものを抜き出そうと
下記のように書きましたがうまくいきません。$new_f_nameが空になります。
よろしければどなたかおかしいところを教えていただけないでしょうか。
(ディレクトリ内のファイル名を$f_nameに格納するところまで省略)
$item = array("zip$","lzh$");
$new_f_name = array();
foreach($f_name as $value);{
if (in_array($value, $item)){
$new_f_name[] = $value;
}
}
$f_name = $new_f_name;
0739nobodyさん
04/10/24 15:53:21ID:???キーワードをgoogleのように色違いにしています。
str_replace('検索ワード', '<B><FONT COLOR="#FF0000">検索ワード</FONT></B>', $対象文字列);
と言う感じです。
これを改造して、半角空白でAND検索を出来るようにしたんですが
例えば「たま まご」で検索した場合、結果表示がうまくいきません。
元の文章が「生たまご全滅」だった場合に
本来なら「生<B><FONT COLOR="#FF0000">たまご</FONT></B>全滅」となって欲しいのですが
実際は「生<B><FONT COLOR="#FF0000">たま</FONT></B>ご全滅」となってしまいます。
途中で置換しているために「まご」が消えてしまい、置換されないためなのですが、
これをうまく回避または処理する方法はありますでしょうか。
何かアイデアなどありましたら、ご教授お願いしますm(_ _)m
0740nobodyさん
04/10/24 17:11:25ID:???それさ、実装したとして、
「結構 構文」 で検索したときに
「結構文章がうまい」 が 「<b>結構文</b>章がうまい」 になっちゃうだろ。
Google で 「たま まご」 で検索しても 「たまご」 にはハイライトされてないし。
っていうか 「たまご」 で検索したいなら最初から 「たまご」 で検索するんじゃ。
0741nobodyさん
04/10/24 17:26:42ID:l6rOaDlU最近、php&mysqlに手を出した、インチキweb屋です。
スクリプトなんかは、ありものを改造してなんとかする程度のレベルです。
よくある、登録したデータから条件を設定して検索したり、
データを登録するためのインターフェイスを作ろうと試行錯誤してます。
ローカル、及びリモート(レンタル鯖)でphpとmysqlは既に稼働してます。
データベース板で質問したのですが、web prog板で聞いた方がいいよ、と
言われこちらにおじゃましました。さて、いくつか質問させて下さい。
環境はPHP4.3.1、MySQL 3.23.58です。(本番用のレンタル鯖)
質問1 検索結果で、タイトルにあたるものをずらっとリストアップして
そこから、詳細画面(getでid を渡して表示)を出すというのをやってみました。
そのさい、詳細画面を表示するときにこっそり、count(例)というフィールドの
値を増やしてそのレコードに書き込む。すなわち、レコードごとにアクセスカウンタを
付けた(重複対策悩んですますが)ような事をしてみたのですが、やり方的に、変ですか?
普通のカウンタみたいに、レコードごとにカウント用のファイルを用意してするべきでしょうか?
質問2 ひとまず、検索、一覧、修正、登録、削除等の機能をmodeという変数で判別して
一つのphpのなかでcase文で振り分けてやりくりしちゃってるのですが
こういうやり方はかなり変でしょうか?(もちろん公開するときは修正、登録、削除は別ファイルにしますが)
質問3 本番で使うレンタル鯖は、phpのcgi版しか使えません。これだとHTTP 認証出来ないのですが
このような場合、修正、登録、削除などの管理画面をどのようにプロテクトすればよいでしょうか?
いざとなったら、編集作業のときだけ、スクリプトをアップして作業が終わったら消すとかw
質問項目が多くなってしまいました。「質問1 それ、変」とかそんな感じでいいので
アドバイスというか解答をいただけたらと思います。
0742nobodyさん
04/10/24 17:38:12ID:???思いつくまま適当に書いてみる
答え1
いいんじゃないですか。同時アクセスの問題とか解決できてるなら。
まあ、web屋さんだからその辺は心得てるだろうけど。
答え2
一つの関数に複数の異なる機能を持たせるのはあまりよくない。
一機能一関数位の感じで組むと見やすいと思うけど、その辺は個人の感覚次第。
答え3
DB使えるなら、認証はDBを使って作ってしまうってのはどうだろう?
それか、.htaccessを使えるならそっちで。
0743nobodyさん
04/10/24 17:44:26ID:???そういう質問している段階からピンで仕事を獲ろうという神経はどうかしてるよ。
悪いことはいわないから、とりあえず下請けから初めてプロジェクト管理なども
含めて勉強してください。
0744nobodyさん
04/10/24 17:44:34ID:???>質問1
>質問2
「変」ではない。
一般的かどうかなんて、そんなに重要なことじゃないだろ?
仕事でチーム組んで開発するのならいざ知らず、
個人的にやっているものなら、やりたいようにやればいい。
>質問3
自分で認証実装すればいいんでは?
いくらでもやりようはある。
ま、俺ならモジュールで動く環境使うけどな。
0745nobodyさん
04/10/24 17:49:25ID:???0746738
04/10/24 17:51:32ID:???0747739
04/10/24 18:07:30ID:???回答どもです。
>それさ、実装したとして、
>「結構 構文」 で検索したときに
>「結構文章がうまい」 が 「<b>結構文</b>章がうまい」 になっちゃうだろ。
まさにそういうことです。
検索者が意図してるしてないに関わらず、
単に結果を正確に表示したいという事です…
googleってのはイメージしやすい一例で出しただけで、
仕様としては「入力した文字を厳密にハイライトする」って形にしたいと思ってます。
「しんぶんし ぶん」のような形も
「たま まご」のような形にも対処できる、スマートな方法のアイデア、
何かありませんでしょうか…
0748nobodyさん
04/10/24 18:12:36ID:???検索側がわざわざ「たま まご」や「しんぶんし ぶん」で検索してるんだったら、
「たまご」や「しんぶんし」と混同されるとマズイってことだろう。
せいぜい表記ゆれを見て修正候補だすぐらいじゃない?
0751741
04/10/24 18:53:32ID:???>>742
1. いや、同時アクセスの場合のこととかそこまで深くは考えてません。
やっぱりカウンタ値を、単なるページの読み込みで書き換えるってのはヤバい気がしてきました。
2. この辺は、まだプログラムの構成も練れてないのでじっくり考えてみることにします。
3. 別テーブルにid とパスを入れてそこに問い合わせてあってたらそれ以後のスクリプトを実行という感じですかね?
>>743
漏れのスキルが至らないのは自分でも解りきっています。
これでも何も解らないところからひと月でなんとかここまで来た訳でして
むしろ、仕事を獲ろう、としたというより、仕事が来てしまった、と
いう形なのです。とにかくやるしかない状況なのです。
>>744
なるほど。自分の場合、他のひとは一切関わりませんし
すべて自分で作って自分で対処するので、自分のやりたいようにやるのが
いいのかもしれません。
幸い、漏れて困るような情報はあつかっておりませんので、勉強だと思って
思ったように作って少しずつ、知識に応じて改造していくのでもよいですね。
■ このスレッドは過去ログ倉庫に格納されています