質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

解決済

1回答

1197閲覧

モジュールから実際のディレクトリにファイルを保存したい

NAOYA118

総合スコア38

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

1クリップ

投稿2021/04/04 02:49

実現したいこと

Apacheのモジュールから実際のディレクトリにファイルを保存したいです

問題

仮想的なディレクトリ?にファイルが保存されてしまいます

該当のソースコード

mod_filetest.c

C

1/* 2** mod_filetest.c -- Apache sample filetest module 3** [Autogenerated via ``apxs -n filetest -g''] 4** 5** To play with this sample module first compile it into a 6** DSO file and install it into Apache's modules directory 7** by running: 8** 9** $ apxs -c -i mod_filetest.c 10** 11** Then activate it in Apache's apache2.conf file for instance 12** for the URL /filetest in as follows: 13** 14** # apache2.conf 15** LoadModule filetest_module modules/mod_filetest.so 16** <Location /filetest> 17** SetHandler filetest 18** </Location> 19** 20** Then after restarting Apache via 21** 22** $ apachectl restart 23** 24** you immediately can request the URL /filetest and watch for the 25** output of this module. This can be achieved for instance via: 26** 27** $ lynx -mime_header http://localhost/filetest 28** 29** The output should be similar to the following one: 30** 31** HTTP/1.1 200 OK 32** Date: Tue, 31 Mar 1998 14:42:22 GMT 33** Server: Apache/1.3.4 (Unix) 34** Connection: close 35** Content-Type: text/html 36** 37** The sample page from mod_filetest.c 38*/ 39 40#include "httpd.h" 41#include "http_config.h" 42#include "http_protocol.h" 43#include "ap_config.h" 44 45#include <stdio.h> 46 47/* The sample content handler */ 48static int filetest_handler(request_rec *r) 49{ 50 if (strcmp(r->handler, "filetest")) { 51 return DECLINED; 52 } 53 r->content_type = "text/html"; 54 55 if (!r->header_only){ 56 FILE *fp; 57 fp = fopen("/var/tmp/fssv.txt", "w"); 58 fclose(fp); 59 60 FILE *fp2 = fopen("/var/tmp/fssv.txt", "r"); 61 if (fp2 == NULL){ 62 ap_rputs("Not found", r); 63 } 64 65 ap_rputs("The sample page from mod_filetest.c\n", r); 66 } 67 return OK; 68} 69 70static void filetest_register_hooks(apr_pool_t *p) 71{ 72 ap_hook_handler(filetest_handler, NULL, NULL, APR_HOOK_MIDDLE); 73} 74 75/* Dispatch list for API hooks */ 76module AP_MODULE_DECLARE_DATA filetest_module = { 77 STANDARD20_MODULE_STUFF, 78 NULL, /* create per-dir config structures */ 79 NULL, /* merge per-dir config structures */ 80 NULL, /* create per-server config structures */ 81 NULL, /* merge per-server config structures */ 82 NULL, /* table of config file commands */ 83 filetest_register_hooks /* register hooks */ 84};

fopenでファイルを作成して、存在を確認します
存在していなかったら Not found という文字を返します

default-ssl.conf
<VirtualHost *:443> DocumentRoot path ServerName domain SSLCertificateFile path SSLCertificateKeyFile path SSLCertificateChainFile path <FilesMatch ".filetest$"> SetHandler filetest </FilesMatch> </VirtualHost>

実行結果

Not found は表示されませんでした
ファイルは作成されたようですが、シェルから ls で存在を確認したところ、存在していないようでした
sudo を付けても同じでした

実際のディレクトリに保存することは可能でしょうか

バージョン

Ubuntu 20.04.2
Apache 2.4.41

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seastar3

2021/04/04 03:31

UNIXのフォルダ・ファイルの権限(パーミッション)は書き込み可になっていますか。
dodox86

2021/04/04 04:03

apache2がsystemdを介しての起動で、そのオプションでユーザー毎の仮想テンポラリディレクトリ指定になっているのではないでしょうか。
NAOYA118

2021/04/04 04:43

ありがとうございます! 解決しました
guest

回答1

0

自己解決

dodox86さんありがとうございました

調べたところ、この記事を見つけました

確認してみたところ、apache2.service に
PrivateTemp = true
が書かれていました

投稿2021/04/04 04:49

NAOYA118

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問